Visualizzazione dello stato del controllo qualità del codice sorgente in SonarQube agli sviluppatori

SonarQube è una piattaforma di garanzia della qualità del codice open source che supporta un'ampia gamma di linguaggi di programmazione e fornisce report su parametri quali duplicazione del codice, conformità agli standard di codifica, copertura dei test, complessità del codice, potenziali bug e altro ancora. SonarQube visualizza comodamente i risultati delle analisi e consente di monitorare le dinamiche di sviluppo del progetto nel tempo.

Obiettivo: mostrare agli sviluppatori lo stato del controllo di qualità del codice sorgente in SonarQube.

Ci sono due soluzioni:

  • Esegui uno script per verificare lo stato del controllo di qualità del codice sorgente in SonarQube. Se il controllo di qualità del codice sorgente in SonarQube non viene superato, l'assemblaggio fallisce.
  • Mostra lo stato del controllo qualità del codice sorgente nella pagina principale del progetto.

Installazione di SonarQube

Per installare sonarqube dai pacchetti RPM, utilizzeremo il repository https://harbottle.gitlab.io/harbottle-main.

Installiamo il pacchetto con il repository per CentOS 7.

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

Installiamo sonarqube stesso.

yum install -y sonarqube

Durante l'installazione verrà installata la maggior parte dei plugin, ma è necessario installare findbugs e pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Avvia il servizio e aggiungilo all'avvio

systemctl start sonarqube
systemctl enable sonarqube

Se il caricamento richiede molto tempo, aggiungi un generatore di numeri casuali /dev/./urandom alla fine delle opzioni sonar.web.javaOpts

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

Esecuzione di uno script per verificare lo stato del controllo di qualità del codice sorgente in SonarQube.

Sfortunatamente, il plugin sonar-break-maven-plugin non è stato aggiornato da molto tempo. Quindi scriviamo la nostra sceneggiatura.

Per i test utilizzeremo il repository https://github.com/uweplonus/spotbugs-examples.

Importazione in Gitlab. Aggiungi il file .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

Il file .gitlab-ci.yml non è perfetto. Testato se le attività di scansione in sonarqube terminavano con lo stato: "SUCCESSO". Finora non ci sono stati altri status. Non appena ci saranno altri stati, correggerò .gitlab-ci.yml in questo post.

Visualizzazione dello stato del controllo di qualità del codice sorgente nella pagina principale del progetto

Installazione del plugin per SonarQube

yum install -y sonarqube-qualinsight-badges

Andiamo a SonarQube alle http://172.26.9.115:9000/
Crea un utente normale, ad esempio "badge".
Accedi a SonarQube con questo utente.

Visualizzazione dello stato del controllo qualità del codice sorgente in SonarQube agli sviluppatori

Vai su “Il mio account”, crea un nuovo token, ad esempio con il nome “read_all_repository” e fai clic su “Genereate”.

Visualizzazione dello stato del controllo qualità del codice sorgente in SonarQube agli sviluppatori

Vediamo che è apparso un token. Apparirà solo 1 volta.

Accedi come amministratore.

Vai a Configurazione -> Badge SVG

Visualizzazione dello stato del controllo qualità del codice sorgente in SonarQube agli sviluppatori

Copia questo token nel campo "Token badge attività" e fai clic sul pulsante Salva.

Visualizzazione dello stato del controllo qualità del codice sorgente in SonarQube agli sviluppatori

Vai su Amministrazione -> Sicurezza -> Modelli di autorizzazione -> Modello predefinito (e altri modelli che avrai).

L'utente del badge deve avere la casella di controllo "Sfoglia" selezionata.

Testing.

Prendiamo ad esempio il progetto https://github.com/jitpack/maven-simple.

Importiamo questo progetto.

Aggiungi il file .gitlab-ci.yml alla root del progetto con il seguente contenuto.

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

In SonarQube il progetto sarà simile a questo:

Visualizzazione dello stato del controllo qualità del codice sorgente in SonarQube agli sviluppatori

Aggiungi i bagagli a README.md e appariranno così:

Visualizzazione dello stato del controllo qualità del codice sorgente in SonarQube agli sviluppatori

Il codice di visualizzazione dei badge è simile al seguente:

Visualizzazione dello stato del controllo qualità del codice sorgente in SonarQube agli sviluppatori

Analisi della stringa di visualizzazione dei badge:

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

Dove ottenere/controllare la chiave del progetto e l'ID del progetto.

La chiave del progetto è in basso a destra. L'URL contiene l'ID del progetto.

Visualizzazione dello stato del controllo qualità del codice sorgente in SonarQube agli sviluppatori

Le opzioni per ottenere le metriche possono essere guarda qui.

Tutte le richieste pull per miglioramenti e correzioni di bug inviare a questo repository.

Chat di Telegram su SonarQube https://t.me/sonarqube_ru
Chat di Telegram su DevSecOps: DevOps sicuro https://t.me/sec_devops

Fonte: habr.com

Aggiungi un commento