Mostrare agli sviluppatori lo stato di controllo della qualità del codice sorgente in SonarQube

SonarQube è una piattaforma open source per la gestione continua della qualità del codice sorgente, supporta un'ampia gamma di linguaggi di programmazione e consente di ottenere report su metriche come la duplicazione del codice, la conformità agli standard di codifica, la copertura dei test, la complessità del codice, errori potenziali, ecc. SonarQube visualizza comodamente i risultati dell'analisi e permette di monitorare l'andamento del progetto nel tempo.

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

Ci sono due modi per risolvere:

  • Eseguire uno script per verificare lo stato del controllo della qualità del codice sorgente in SonarQube. Se il controllo della qualità del codice sorgente in SonarQube non supera il controllo, il build fallirà.
  • Mostrare sulla pagina principale del progetto lo stato di controllo della qualità del codice sorgente.

Installazione di SonarQube

Per installare SonarQube dai pacchetti rpm, utilizziamo il repository https://harbottle.gitlab.io/harbottle-main.

Installeremo il pacchetto del repository per CentOS 7.

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

Installemmo SonarQube stesso.

yum install -y sonarqube

Durante l'installazione verranno installati la maggior parte dei plugin, ma sarà necessario installare findbugs e pmd.

yum install -y sonarqube-findbugs sonarqube-pmd

Avviamo il servizio e lo aggiungiamo all'avvio automatico.

systemctl start sonarqube
systemctl enable sonarqube

Se ci mette troppo a caricarsi, aggiungi alla fine delle opzioni sonar.web.javaOpts il generatore di numeri casuali /dev/.urandom.

sonar.web.javaOpts=altri parametri -Djava.security.egd=file:/dev/urandom

Esecuzione dello script di verifica dello stato della qualità del codice sorgente in SonarQube.

Purtroppo, il plugin sonar-break-maven-plugin non è stato aggiornato da tempo. Quindi scriveremo il nostro script.

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

Importiamo in Gitlab. Aggiungiamo il file .gitlab-ci.yml:

variabili:
  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" # password 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 dove viene memorizzato il report
    - echo $URL
    - |
      while : ;do
          curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
          export status=$(cat analysis.txt | jq -r '.task.status') #Status come SUCCESS, CANCELED, IN_PROGRESS o 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 come SUCCESS, CANCELED o FAILED
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Ottieni l'ID dell'analisi
    - |
      if [ "$status" == "SUCCESS" ]; then
        echo -e "SONAR ANALYSIS SUCCESSFUL...ANALIZZANDO RISULTATI";
        curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Risultato dell'analisi come problemi critici, major e minor
        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')"; #stampa le violazioni critiche, major e minor
          exit 1 #interrompe la build per violazioni
        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 #interrompe la build per fallimento nel Passo 2
      fi
  tags:
    - docker

Il file .gitlab-ci.yml non è ideale. È stato testato per controllare se i controlli in SonarQube si sono conclusi con stato: "SUCCESS". Finora non ci sono stati altri stati. Man mano che ci saranno altri stati, aggiornerò il .gitlab-ci.yml in questo post.

Visualizzazione nella homepage del progetto dello stato del controllo qualità del codice sorgente.

Installiamo il plugin per SonarQube.

yum install -y sonarqube-qualinsight-badges

Accediamo a SonarQube all'indirizzo http://172.26.9.115:9000/
Creiamo un utente normale, ad esempio "badges".
Accediamo con questo utente a SonarQube.

Mostrare agli sviluppatori lo stato di controllo della qualità del codice sorgente in SonarQube

Andiamo su "Il mio account", creiamo un nuovo token, ad esempio con il nome "read_all_repository" e clicchiamo su "Genereate".

Mostrare agli sviluppatori lo stato di controllo della qualità del codice sorgente in SonarQube

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

Accediamo come amministratore.

Andiamo su Configuration -> SVG Badges.

Mostrare agli sviluppatori lo stato di controllo della qualità del codice sorgente in SonarQube

Copia questo token nel campo "Activity badge token" e clicca sul pulsante di salvataggio.

Mostrare agli sviluppatori lo stato di controllo della qualità del codice sorgente in SonarQube

Andiamo su Administration -> Security -> Permission Templates -> Default template (e altri modelli che avrai).

Per l'utente badges, è necessario attivare la casella "Browse".

Test.

Per esempio, prendiamo un progetto. https://github.com/jitpack/maven-simple.

Importiamo questo progetto.

Aggiungiamo il file .gitlab-ci.yml nella radice del progetto con il seguente contenuto.

variabili:
  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" # password 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 apparirà così:

Mostrare agli sviluppatori lo stato di controllo della qualità del codice sorgente in SonarQube

Aggiungiamo i badge in README.md e appariranno così:

Mostrare agli sviluppatori lo stato di controllo della qualità del codice sorgente in SonarQube

Il codice per visualizzare i badge appare così:

Mostrare agli sviluppatori lo stato di controllo della qualità del codice sorgente in SonarQube

Analisi della stringa per la 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 trovare/verificare la Chiave di Progetto e l'id del progetto.

La Chiave di Progetto si trova in basso a destra. L'id del progetto è nel URL.

Mostrare agli sviluppatori lo stato di controllo della qualità del codice sorgente in SonarQube

Le opzioni per ricevere le metriche possono essere visualizzate qui.

Tutti i pull request per miglioramenti e correzioni di bug inviare a questo repository.

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

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster