Arendajatele kvaliteedikontrolli staatuse kuvamine SonarQubes

SonarQube on avatud platvorm pidevaks koodikvaliteedi jälgimiseks, mis toetab suurt hulka programmeerimiskeeli ja võimaldab genereerida aruandeid selliste mõõdikute kohta nagu koodide dubleering, koodistandardite järgimine, testide katvus, koodi keerukus, potentsiaalsed vead jne. SonarQube visualiseerib analüüsi tulemused mugavalt ja võimaldab jälgida projekti arengudünaamikat ajas.

Ülesanne: Näidata arendajatele kvaliteedikontrolli staatust SonarQubes.

On kaks lahendusteed:

  • Käivitada kvaliteedikontrolli staatuse kontrolle script SonarQubes. Kui SonarQubes kvaliteedikontroll ebaõnnestub, siis ebaõnnestub ka koostamine.
  • Kuvada peamisel projekti lehel kvaliteedikontrolli seisund.

SonarQube'i installimine

SonarQube'i installimiseks RPM-pakettidena kasutame hoidlat https://harbottle.gitlab.io/harbottle-main.

Installime CentOS 7-le repot.

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

Installime SonarQube'i ennast.

yum install -y sonarqube

Enamik pluginaid installitakse automaatselt, kuid tuleb juurde installida findbugs ja pmd.

yum install -y sonarqube-findbugs sonarqube-pmd

Käivitame teenuse ja lisame see automaatsetesse käivitustesse.

systemctl start sonarqube
systemctl enable sonarqube

Kui laadimine kestab kaua, lisage sonar.web.javaOpts lõppu järgnevad valikud, et kasutada juhuslikku numbrit /dev/.urandom.

sonar.web.javaOpts=muu konfiguratsioon -Djava.security.egd=file:/dev/urandom

Käivitame koodi kvaliteedi kontrolli staatuse skripti SonarQubes.

Kahjuks pole sonar-break-maven-plugin juba pikka aega uuendatud. Seetõttu kirjutame oma skripti.

Testimiseks kasutame hoidlat. https://github.com/uweplonus/spotbugs-examples.

Impordime Gitlabisse. Lisame faili .gitlab-ci.yml:

muutujad:
  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 kasutajanimi
  PASSWORD: "admin" # sonarqube parool

vahepealne:
  teed:
    - .m2/repository

ehitus:
  pilt: maven:3.3.9-jdk-8
  etapp: ehitus
  skript:
    - 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, kuhu aruanne salvestatakse
    - echo $URL
    - |
      while : ;do
          curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
          export status=$(cat analysis.txt | jq -r '.task.status') #Oleku info nagu SUCCESS, CANCELED, IN_PROGRESS või FAILED
          echo $status
          if [ ${status} == "SUCCESS" ];then
            echo "SONAR ANALÜÜS EDUKAS";
            break
          fi
          sleep 5
      done
    - curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
    - export status=$(cat analysis.txt | jq -r '.task.status') #Oleku info nagu SUCCESS, CANCELED või FAILED
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Hangi analüüsi ID
    - |
      if [ "$status" == "SUCCESS" ]; then
        echo -e "SONAR ANALÜÜS EDUKAS...ANALÜÜSITAKSE TULEMUSED";
        curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Analüüsi tulemus, näiteks kriitilised, olulised ja väikesed probleemid
        export result=$(cat result.txt | jq -r '.projectStatus.status');

        if [ "$result" == "ERROR" ];then
          echo -e "91mSONAR TULEMUSED EBAÕNNESTUS";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #prindib kriitilised, olulised ja väikesed rikkumised
          exit 1 #katkestab ehituse rikkumiste tõttu
        else
          echo -e "SONAR TULEMUSED EDUKAD";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
          exit 0
        fi
      else
          echo -e "e[91mSONAR ANALÜÜS EBAÕNNESTUS e[0m";
          exit 1 #katkestab ehituse ebaõnnestumise tõttu samm 2
      fi
  sildid:
    - docker

Fail .gitlab-ci.yml ei ole ideaalne. Testitud, kui SonarQube kontrollimise ülesanded lõpetati staatusega: "SUCCESS". Seni pole olnud teisi staatuseid. Kui tulevad teised staatused, parandan .gitlab-ci.yml selles postituses.

Kvaliteedikontrolli oleku kuvamine projekti avalehel

Installime SonarQube'i pistikprogrammi

yum install -y sonarqube-qualinsight-badges

Logime sisse SonarQube'i aadressil http://172.26.9.115:9000/
Looma tavaline kasutaja, näiteks "badges".
Logime selle kasutajaga sisse SonarQube'i.

Arendajatele kvaliteedikontrolli staatuse kuvamine SonarQubes

Logime sisse "Minu konto", loome uue tokeni, näiteks nimega "read_all_repository" ja vajutame "Genereate".

Arendajatele kvaliteedikontrolli staatuse kuvamine SonarQubes

Näeme, et token ilmus. See ilmub ainult 1 kord.

Logime sisse administraatorina.

Liigume Configuration -> SVG Badges

Arendajatele kvaliteedikontrolli staatuse kuvamine SonarQubes

Kopeerime selle tokeni välja "Activity badge token" ja vajutame nuppu salvestamiseks.

Arendajatele kvaliteedikontrolli staatuse kuvamine SonarQubes

Logime sisse Administration -> Security -> Permission Templates -> Default template (ja teised šablonid, mis teil võivad olla).

Kasutajal badges tuleb märkida kast "Browse".

Testimine.

Näiteks võtame projekti https://github.com/jitpack/maven-simple.

Importime selle projekti.

Lisame faili .gitlab-ci.yml projekti juuri järgmise sisuga.

muutujad:
  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 kasutajanimi
  PASSWORD: "admin" # sonarqube parool

vahevari:
  teed:
    - .m2/repository

ehitus:
  pilt: maven:3.3.9-jdk-8
  etapp: ehitus
  skript:
    - 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
  sildid:
    - docker

SonarQube'is projekt näeb välja selline:

Arendajatele kvaliteedikontrolli staatuse kuvamine SonarQubes

Lisame bages README.md ja need näevad välja sellised:

Arendajatele kvaliteedikontrolli staatuse kuvamine SonarQubes

Badge'ide kuvamise kood näeb välja selline:

Arendajatele kvaliteedikontrolli staatuse kuvamine SonarQubes

Badge'ide kuvamise rea analüüs:

[![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-проекта)

Kust leida/ülevaate Project Key ja projekti ID.

Project Key asub paremas alumises nurgas. URL-is on projekti ID.

Arendajatele kvaliteedikontrolli staatuse kuvamine SonarQubes

Meetmete saamiseks on võimalused vaata siit.

Kõik pull requestid paranduste ja parenduste jaoks saada sellele repole.

Telegrami vestlus SonarQube'i kohta https://t.me/sonarqube_ru
Telegrami vestlus DevSecOps'i kohta — turvaline DevOps https://t.me/sec_devops

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster