Afișarea stării controlului calității codului sursă dezvoltatorilor în SonarQube

SonarQube este o platformă deschisă pentru asigurarea controlului continuu al calității codului sursă, care suportă o mulțime de limbaje de programare și permite generarea de rapoarte pe baza unor metrici precum duplicarea codului, conformitatea cu standardele de codare, acoperirea testelor, complexitatea codului, posibile erori etc. SonarQube vizualizează convenabil rezultatele analizei și permite urmărirea dinamicii de dezvoltare a proiectului în timp.

Sarcina: Afișarea dezvoltatorilor a stării controlului calității codului sursă în SonarQube.

Există două moduri de a rezolva:

  • Rularea unui script de verificare a stării controlului calității codului sursă în SonarQube. Dacă controlul calității codului sursă în SonarQube nu trece, atunci să eșueze compilarea.
  • Afișarea pe pagina principală a proiectului a stării controlului calității codului sursă.

Instalarea SonarQube

Pentru a instala SonarQube din pachete rpm, vom folosi depozitul https://harbottle.gitlab.io/harbottle-main.

Vom instala pachetul cu depozitul pentru CentOS 7.

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

Instalăm SonarQube.

yum install -y sonarqube

La instalare se vor instala majoritatea pluginurilor, dar trebuie să instalăm suplimentar findbugs și pmd.

yum install -y sonarqube-findbugs sonarqube-pmd

Pornim serviciul și îl adăugăm la autostart.

systemctl start sonarqube
systemctl enable sonarqube

Dacă se încarcă mult, adăugați la final opțiunilor sonar.web.javaOpts generatorul de numere aleatorii /dev/./urandom.

sonar.web.javaOpts=alte opțiuni -Djava.security.egd=file:/dev/urandom

Rularea scriptului de verificare a stării controlului calității codului sursă în SonarQube.

Din păcate, pluginul sonar-break-maven-plugin nu a fost actualizat de mult timp. Prin urmare, vom scrie propriul nostru script.

Pentru testare, vom folosi depozitul https://github.com/uweplonus/spotbugs-examples.

Importăm în Gitlab. Adăugăm fișierul .gitlab-ci.yml:

variabile:
  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" # login sonarqube
  PASSWORD: "admin" # parola 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 unde se salvează raportul
    - echo $URL
    - |
      while : ;do
          curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
          export status=$(cat analysis.txt | jq -r '.task.status') #Status ca SUCCESS, CANCELED, IN_PROGRESS sau FAILED
          echo $status
          if [ ${status} == "SUCCESS" ];then
            echo "ANALIZA SONAR SUCCES";
            break
          fi
          sleep 5
      done
    - curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
    - export status=$(cat analysis.txt | jq -r '.task.status') #Status ca SUCCESS, CANCELED sau FAILED
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Obține ID-ul analizei
    - |
      if [ "$status" == "SUCCESS" ]; then
        echo -e "ANALIZA SONAR SUCCES...ANALIZAREA REZULTATELOR";
        curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Rezultatul analizei ca probleme critice, majore și minore
        export result=$(cat result.txt | jq -r '.projectStatus.status');

        if [ "$result" == "ERROR" ];then
          echo -e "91mREZULTATELE SONAR AU EȘUAT";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #împinge violările critice, majore și minore
          exit 1 #întrerupe construcția pentru violări
        else
          echo -e "REZULTATELE SONAR AU FOST SUCCESE";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
          exit 0
        fi
      else
          echo -e "e[91mANALIZA SONAR A EȘUATe[0m";
          exit 1 #întrerupe construcția pentru eșec în Pasul 2
      fi
  tags:
    - docker

Fișierul .gitlab-ci.yml nu este perfect. A fost testat dacă sarcinile de verificare în sonarqube se finalizează cu statutul: "SUCCESS". Deocamdată nu au fost alte stații. Când vor apărea alte stații, voi corecta .gitlab-ci.yml în acest post.

Afișarea pe pagina principală a proiectului statusului controlului calității codului sursă

Instalăm pluginul pentru SonarQube

yum install -y sonarqube-qualinsight-badges

Accesăm SonarQube la adresa http://172.26.9.115:9000/
Creăm un utilizator obișnuit, de exemplu, "badges".
Ne conectăm cu acest utilizator în SonarQube.

Afișarea stării controlului calității codului sursă dezvoltatorilor în SonarQube

Accesăm "My account", creăm un nou token, de exemplu cu denumirea "read_all_repository" și apăsăm "Genereate".

Afișarea stării controlului calității codului sursă dezvoltatorilor în SonarQube

Observăm că tokenul a apărut. Va apărea doar o dată.

Ne conectăm ca administrator.

Mergem la Configuration -> SVG Badges

Afișarea stării controlului calității codului sursă dezvoltatorilor în SonarQube

Copiem acest token în câmpul "Activity badge token" și facem clic pe butonul save.

Afișarea stării controlului calității codului sursă dezvoltatorilor în SonarQube

Accesăm Administration -> Security -> Permission Templates -> Default template (și alte șabloane pe care le aveți).

Utilizatorului badges trebuie să i se bifeze "Browse".

Testare.

Pentru exemplu, să luăm un proiect https://github.com/jitpack/maven-simple.

Importăm acest proiect.

Adăugăm fișierul .gitlab-ci.yml în rădăcina proiectului cu următorul conținut.

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" # login sonarqube
  PASSWORD: "admin" # parola 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

În SonarQube, proiectul va arăta astfel:

Afișarea stării controlului calității codului sursă dezvoltatorilor în SonarQube

Adăugăm bages în README.md și vor arăta astfel:

Afișarea stării controlului calității codului sursă dezvoltatorilor în SonarQube

Codul de afișare a badges arată astfel:

Afișarea stării controlului calității codului sursă dezvoltatorilor în SonarQube

Analiza șirului de afișare a badges:

[![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.jitpackmaven-simple)
[![Nume](http://172.26.9.115:9000/api/badges/gate?key=Project Key)](http://172.26.9.115:9000/dashboard?id=id-proiect)
[![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.jitpackmaven-simple)
[![Nume Metrică](http://172.26.9.115:9000/api/badges/measure?key=Project Key&metric=METRICĂ)](http://172.26.9.115:9000/dashboard?id=id-proiect)

Unde găsim/verificăm Project Key și id-proiect.

Project Key se află în colțul din dreapta jos. În URL se află id-proiect.

Afișarea stării controlului calității codului sursă dezvoltatorilor în SonarQube

Opțiunile pentru obținerea metricilor pot fi vizualizate aici.

Toate cererile de extragere pentru îmbunătățiri, corecturi de erori trimiteți-le în acest repository.

Chat Telegram despre SonarQube https://t.me/sonarqube_ru
Chat Telegram despre DevSecOps — DevOps sigur https://t.me/sec_devops

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster