Sýnir gæðaeftirlitsstöðu frumkóða í SonarQube fyrir þróunaraðila

SonarQube er gæðatryggingarvettvangur fyrir opinn frumkóða sem styður fjölbreytt úrval forritunarmála og veitir skýrslur um mælikvarða eins og tvíverknað kóða, samræmi við kóðunarstaðla, prófumfjöllun, flókið kóða, hugsanlegar villur og fleira. SonarQube sér á þægilegan hátt greiningarniðurstöður og gerir þér kleift að fylgjast með gangverki þróunar verkefna með tímanum.

Markmið: Sýna þróunaraðilum stöðu gæðaeftirlits frumkóða í SonarQube.

Það eru tvær lausnir:

  • Keyrðu skriftu til að athuga gæðaeftirlitsstöðu frumkóðans í SonarQube. Ef gæðaeftirlit frumkóðans í SonarQube stenst ekki, mistekst samsetninguna.
  • Sýna gæðaeftirlitsstöðu frumkóðans á aðalverkefnasíðunni.

Setur upp SonarQube

Til að setja upp sonarqube úr rpm pakka munum við nota geymsluna https://harbottle.gitlab.io/harbottle-main.

Við skulum setja upp pakkann með geymslunni fyrir CentOS 7.

yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm

Við setjum upp sonarqube sjálft.

yum install -y sonarqube

Meðan á uppsetningu stendur verða flestar viðbætur settar upp en þú þarft að setja upp findbugs og pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Ræstu þjónustuna og bættu henni við ræsingu

systemctl start sonarqube
systemctl enable sonarqube

Ef það tekur langan tíma að hlaða þá skaltu bæta við slembitölugenerator /dev/./urandom í lok valkostanna sonar.web.javaOpts

sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom

Keyrir skriftu til að athuga stöðu gæðaeftirlits frumkóða í SonarQube.

Því miður hefur sonar-break-maven-plugin viðbótin ekki verið uppfærð í langan tíma. Svo skulum við skrifa okkar eigin handrit.

Til að prófa munum við nota geymsluna https://github.com/uweplonus/spotbugs-examples.

Flytur inn í Gitlab. Bættu við .gitlab-ci.yml skránni:

variables:
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=~/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
  SONAR_HOST_URL: "http://172.26.9.226:9000"
  LOGIN: "admin" # логин sonarqube
  PASSWORD: "admin" # пароль sonarqube

cache:
  paths:
    - .m2/repository

build:
  image: maven:3.3.9-jdk-8
  stage: build
  script:
    - apt install -y jq || true
    - mvn $MAVEN_CLI_OPTS -Dmaven.test.failure.ignore=true org.jacoco:jacoco-maven-plugin:0.8.5:prepare-agent clean verify org.jacoco:jacoco-maven-plugin:0.8.5:report
    - mvn $MAVEN_CLI_OPTS -Dmaven.test.skip=true verify sonar:sonar -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$LOGIN -Dsonar.password=$PASSWORD -Dsonar.gitlab.project_id=$CI_PROJECT_PATH -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
    - export URL=$(cat target/sonar/report-task.txt | grep ceTaskUrl | cut -c11- ) #URL where report gets stored
    - echo $URL
    - |
      while : ;do
          curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
          export status=$(cat analysis.txt | jq -r '.task.status') #Status as SUCCESS, CANCELED, IN_PROGRESS or FAILED
          echo $status
          if [ ${status} == "SUCCESS" ];then
            echo "SONAR ANALYSIS SUCCESS";
            break
          fi
          sleep 5
      done
    - curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
    - export status=$(cat analysis.txt | jq -r '.task.status') #Status as SUCCESS, CANCELED or FAILED
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Get the analysis Id
    - |
      if [ "$status" == "SUCCESS" ]; then
        echo -e "SONAR ANALYSIS SUCCESSFUL...ANALYSING RESULTS";
        curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Analysis result like critical, major and minor issues
        export result=$(cat result.txt | jq -r '.projectStatus.status');

        if [ "$result" == "ERROR" ];then
          echo -e "91mSONAR RESULTS FAILED";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #prints the critical, major and minor violations
          exit 1 #breaks the build for violations
        else
          echo -e "SONAR RESULTS SUCCESSFUL";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
          exit 0
        fi
      else
          echo -e "e[91mSONAR ANALYSIS FAILEDe[0m";
          exit 1 #breaks the build for failure in Step2
      fi
  tags:
    - docker

.gitlab-ci.yml skráin er ekki fullkomin. Prófað hvort skönnunarverkefnum í sonarqube endaði með stöðunni: "SUCCESS". Hingað til hafa engar aðrar stöður verið. Um leið og það eru aðrar stöður mun ég leiðrétta .gitlab-ci.yml í þessari færslu.

Sýnir gæðaeftirlitsstöðu frumkóðans á aðalverkefnasíðunni

Að setja upp viðbótina fyrir SonarQube

yum install -y sonarqube-qualinsight-badges

Við förum í SonarQube kl http://172.26.9.115:9000/
Búðu til venjulegan notanda, til dæmis „merki“.
Skráðu þig inn á SonarQube undir þessum notanda.

Sýnir gæðaeftirlitsstöðu frumkóða í SonarQube fyrir þróunaraðila

Farðu í „Reikningurinn minn“, búðu til nýjan tákn, til dæmis með nafninu „read_all_repository“ og smelltu á „Genereate“.

Sýnir gæðaeftirlitsstöðu frumkóða í SonarQube fyrir þróunaraðila

Við sjáum að tákn hefur birst. Hann mun aðeins koma fram 1 sinni.

Skráðu þig inn sem stjórnandi.

Farðu í Stillingar -> SVG Merki

Sýnir gæðaeftirlitsstöðu frumkóða í SonarQube fyrir þróunaraðila

Afritaðu þennan auðkenni í reitinn „Atvinnumerki“ og smelltu á vista hnappinn.

Sýnir gæðaeftirlitsstöðu frumkóða í SonarQube fyrir þróunaraðila

Farðu í Stjórnun -> Öryggi -> Leyfissniðmát -> Sjálfgefið sniðmát (og önnur sniðmát sem þú munt hafa).

Merkjanotandinn verður að hafa gátreitinn „Vafrað“.

Prófun.

Tökum til dæmis verkefnið https://github.com/jitpack/maven-simple.

Flytjum þetta verkefni inn.

Bættu .gitlab-ci.yml skránni við verkefnisrótina með eftirfarandi innihaldi.

variables:
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=~/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
  SONAR_HOST_URL: "http://172.26.9.115:9000"
  LOGIN: "admin" # логин sonarqube
  PASSWORD: "admin" # пароль sonarqube

cache:
  paths:
    - .m2/repository

build:
  image: maven:3.3.9-jdk-8
  stage: build
  script:
    - mvn $MAVEN_CLI_OPTS -Dmaven.test.failure.ignore=true org.jacoco:jacoco-maven-plugin:0.8.5:prepare-agent clean verify org.jacoco:jacoco-maven-plugin:0.8.5:report
    - mvn $MAVEN_CLI_OPTS -Dmaven.test.skip=true verify sonar:sonar -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$LOGIN -Dsonar.password=$PASSWORD -Dsonar.gitlab.project_id=$CI_PROJECT_PATH -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
  tags:
    - docker

Í SonarQube mun verkefnið líta svona út:

Sýnir gæðaeftirlitsstöðu frumkóða í SonarQube fyrir þróunaraðila

Bættu töskum við README.md og þeir munu líta svona út:

Sýnir gæðaeftirlitsstöðu frumkóða í SonarQube fyrir þróunaraðila

Kóðinn fyrir merkið lítur svona út:

Sýnir gæðaeftirlitsstöðu frumkóða í SonarQube fyrir þróunaraðila

Að þátta skjástreng merkjanna:

[![Quality Gate](http://172.26.9.115:9000/api/badges/gate?key=com.github.jitpack:maven-simple)](http://172.26.9.115:9000/dashboard?id=com.github.jitpack%3Amaven-simple)
[![Название](http://172.26.9.115:9000/api/badges/gate?key=Project Key)](http://172.26.9.115:9000/dashboard?id=id-проекта)
[![Coverage](http://172.26.9.115:9000/api/badges/measure?key=com.github.jitpack:maven-simple&metric=coverage)](http://172.26.9.115:9000/dashboard?id=com.github.jitpack%3Amaven-simple)
[![Название Метрики](http://172.26.9.115:9000/api/badges/measure?key=Project Key&metric=МЕТРИКА)](http://172.26.9.115:9000/dashboard?id=id-проекта)

Hvar á að nálgast/athugaðu verkefnislykil og verkefnisauðkenni.

Verkefnalykill er neðst til hægri. Vefslóðin inniheldur auðkenni verkefnisins.

Sýnir gæðaeftirlitsstöðu frumkóða í SonarQube fyrir þróunaraðila

Möguleikar til að fá mælikvarða geta verið líta hér.

Allar beiðnir um úrbætur, villuleiðréttingar leggja fyrir þessa geymslu.

Símsímaspjall um SonarQube https://t.me/sonarqube_ru
Telegram spjall um DevSecOps - örugg DevOps https://t.me/sec_devops

Heimild: www.habr.com

Bæta við athugasemd