SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

SonarQube on avatud lähtekoodiga koodi kvaliteedi tagamise platvorm, mis toetab laia valikut programmeerimiskeeli ja pakub aruandeid selliste mõõdikute kohta nagu koodi dubleerimine, kodeerimisstandardite järgimine, testide hõlmatus, koodi keerukus, võimalikud vead ja palju muud. SonarQube visualiseerib mugavalt analüüsi tulemusi ja võimaldab teil jälgida projekti arendusdünaamikat aja jooksul.

Ülesanne: Näidata arendajatele SonarQube'is nende lähtekoodi kvaliteedikontrolli olekut.

On kaks lahendust:

  • Käivita skript, et kontrollida SonarQube'i lähtekoodi kvaliteedi tagamise olekut. Kui SonarQube'i lähtekoodi kvaliteedi tagamine ebaõnnestub, siis ebaõnnestub ka ehitus.
  • Näita lähtekoodi kvaliteedikontrolli olekut projekti avalehel.

SonarQube'i installimine

Sonarqube'i installimiseks rpm-pakettidest kasutame repositooriumi https://harbottle.gitlab.io/harbottle-main.

Paigaldame CentOS 7 hoidla paketi.

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

Paigalda sonarqube ise.

yum install -y sonarqube

Installimise ajal installitakse enamik pluginaid, aga peate installima ka findbugs ja pmd.

yum install -y sonarqube-findbugs sonarqube-pmd

Käivitage teenus ja lisage see käivitusmenüüsse

systemctl start sonarqube
systemctl enable sonarqube

Kui laadimine võtab kaua aega, lisa juhuslike arvude generaator /dev/./urandom sonar.web.javaOpts valikute lõppu.

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

Lähtekoodi kvaliteedikontrolli oleku kontrolli skripti käivitamine SonarQube'is.

Kahjuks pole sonar-break-maven-plugin pluginat mõnda aega uuendatud. Seega kirjutame oma skripti.

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

Impordi Gitlabi. Lisa fail .gitlab-ci.yml:

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

Fail .gitlab-ci.yml pole täiuslik. Testisin seda, kas sonarqube'i kontrolliülesanded lõppesid staatusega "SUCCESS". Siiani pole muid staatuseid olnud. Kui mul on muud staatused, uuendan faili .gitlab-ci.yml selles postituses.

Lähtekoodi kvaliteedikontrolli oleku kuvamine projekti avalehel

SonarQube'i pistikprogrammi installimine

yum install -y sonarqube-qualinsight-badges

Mine SonarQube'i aadressile http://172.26.9.115:9000/
Loo tavakasutaja, näiteks "märgid".
Logi SonarQube'i sisse selle kasutajanimega.

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Mine jaotisse „Minu konto“, loo uus token, näiteks nimega „read_all_repository“, ja klõpsa nupul „Genereeri“.

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Näeme, et ilmunud on märk. See ilmub ainult üks kord.

Logi sisse administraatorina.

Mine menüüsse Konfiguratsioon -> SVG märgid

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Kopeeri see märk väljale „Tegevusmärgi märk” ja klõpsa salvestusnupule.

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Mine menüüsse Administreerimine -> Turvalisus -> Õiguste mallid -> Vaikimisi mall (ja muud mallid, mis sul võivad olla).

Märgi kasutajal peab olema märgitud märkeruut „Sirvi”.

Testimine.

Võtame näiteks projekti https://github.com/jitpack/maven-simple.

Impordime selle projekti.

Lisa projekti juurkataloogi fail .gitlab-ci.yml järgmise sisuga.

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'is näeb projekt välja selline:

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Lisa paketid README.md faili ja need näevad välja sellised:

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Märkide kuvamise kood näeb välja selline:

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Märkide kuvamise stringi parsimine:

[![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 saada/kontrollida projekti võtit ja projekti ID-d?

Projekti võti asub paremas alanurgas. URL sisaldab projekti ID-d.

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Mõõdikute hankimise võimalused võivad olla järgmised vaata siia.

Kõik täiustuste ja veaparanduste pull-taotlused saada sellesse hoidlasse.

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

Allikas: www.habr.com

Lisa kommentaar