Arendajatele, kes töötavad SonarQube'is, kvaliteedikontrolli staatuse kuvamine

SonarQube on avatud platvorm pidevaks lähtekoodi kvaliteedi kontrolliks, mis toetab suurt hulka programmeerimiskeeli ja võimaldab genereerida aruandeid selliste mõõdikute kohta nagu koodide dubleerimine, kodeerimisstandardite täitmine, testide katvuse tase, koodi keerukus, potentsiaalsed vead jne. SonarQube visualiseerib analüüsi tulemusi mugavalt ning võimaldab jälgida projekti arengudünaamikat ajas.

Ülesanne: Näidata arendajatele lähtekoodi kvaliteedi kontrolli staatust SonarQubes.

Probleemi lahendamiseks on kaks võimalust:

  • Käivitada lähtekoodi kvaliteedi kontrolli staatuse skript SonarQubes. Kui lähtekoodi kvaliteedi kontroll SonarQubes ei vasta nõuetele, siis ebaõnnestub komplekteerimine.
  • Näidata projekti peamisel lehel lähtekoodi kvaliteedi kontrolli staatust.

SonarQube installatsioon

SonarQube’i installimiseks rpm-pakettide abil kasutame hoidlat. https://harbottle.gitlab.io/harbottle-main.

Installime paketi hoidla jaoks CentOS 7-le.

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

Installeerime SonarQube'i.

yum install -y sonarqube

Installeerimise käigus installitakse enamik pluginadest, kuid tuleb juurde installida findbugs ja pmd.

yum install -y sonarqube-findbugs sonarqube-pmd

Käivitame teenuse ja lisame selle automaatkäivitusse.

systemctl start sonarqube
systemctl enable sonarqube

Kui laadimine venib, siis lisage sonar.web.javaOpts lõppu järgnevad seadistused: juhuslike numbrite generaator /dev/./urandom

sonar.web.javaOpts=teised seaded -Djava.security.egd=file:/dev/urandom

Käivitame lähtekoodi kvaliteedi kontrolli staatuse skripti SonarQubes.

Kahjuks ei ole sonar-break-maven-plugin juba kaua aega uuendatud. Seetõttu kirjutame oma skripti.

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

Impordime Gitlabi. 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

vahemälu:
  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') # Staatus 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') # Staatus nagu SUCCESS, CANCELED või FAILED
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') # Saame analüüsi ID
    - |
      if [ "$status" == "SUCCESS" ]; then
        echo -e "SONAR ANALÜÜS EDUKAS... TULEMUSTE ANALÜÜS";
        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ÕNNESTUNUD";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; # trükib 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";
          exit 1 # katkestab ehituse ebaõnnestumise tõttu sammus 2
      fi
  märgised:
    - docker

.gitlab-ci.yml fail ei ole täiuslik. Testiti, kas sonarqube kontrollimisülesannete staatuseks oli: "SUCCESS". Praegu pole olnud teisi staatuseid. Kui tulevad teised staatused, parandan .gitlab-ci.yml selle postituse juures.

Projekti avalehel kuvatakse lähtekoodikvaliteedi kontrolli staatust

Paigaldame SonarQube plugina

yum install -y sonarqube-qualinsight-badges

Siseneme SonarQube aadressil http://172.26.9.115:9000/
Loome tavalise kasutaja, näiteks "badges".
Siseneme selle kasutajana SonarQube.

Arendajatele, kes töötavad SonarQube'is, kvaliteedikontrolli staatuse kuvamine

Siseneme "My account" alla, loome uue tokeni, näiteks nimega "read_all_repository" ja vajutame "Genereate".

Arendajatele, kes töötavad SonarQube'is, kvaliteedikontrolli staatuse kuvamine

Näeme, et token on tekkinud. See ilmub ainult kord.

Siseneme administraatorina.

Läheme Configuration -> SVG Badges

Arendajatele, kes töötavad SonarQube'is, kvaliteedikontrolli staatuse kuvamine

Kopeerime selle tokeni "Activity badge token" väljale ja vajutame nuppu salvesta.

Arendajatele, kes töötavad SonarQube'is, kvaliteedikontrolli staatuse kuvamine

Siseneme Administration -> Security -> Permission Templates -> Default template (ja teised teie olemasolevad mallid).

Kasutajal badges on vaja valida "Browse".

Testimine.

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

Impordime selle projekti.

Lisame faili .gitlab-ci.yml projekti juurka, millel on järgmine sisu.

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

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

SonarQubes näeb projekt välja selline:

Arendajatele, kes töötavad SonarQube'is, kvaliteedikontrolli staatuse kuvamine

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

Arendajatele, kes töötavad SonarQube'is, kvaliteedikontrolli staatuse kuvamine

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

Arendajatele, kes töötavad SonarQube'is, kvaliteedikontrolli staatuse kuvamine

Badge'ide kuvamistringi 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/kontrollida Project Key ja id-projekti.

Project Key asub paremal alumises nurgas. URL-is on id-projekti.

Arendajatele, kes töötavad SonarQube'is, kvaliteedikontrolli staatuse kuvamine

Metrika saamise valikud saab vaadata siit.

Kõik pull request'id parandusettepanekute ja veaparanduste jaoks saada sellele repositoriumile.

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

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster