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

SonarQube è una piattaforma open source per il controllo continuo della qualità del codice sorgente, che 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, potenziali errori, ecc. SonarQube visualizza comodamente i risultati dell'analisi e permette di monitorare l'evoluzione del progetto nel tempo.

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

Ci sono due modi per risolvere:

  • Eseguire uno script di controllo dello stato del controllo della qualità del codice sorgente in SonarQube. Se il controllo della qualità del codice sorgente in SonarQube fallisce, allora il build deve fermarsi.
  • Mostrare sulla pagina principale del progetto lo stato del 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 con il repository per CentOS 7.

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

Installiamo SonarQube.

yum install -y sonarqube

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

yum install -y sonarqube-findbugs sonarqube-pmd

Avviamo il servizio e aggiungiamolo all'avvio automatico

systemctl start sonarqube
systemctl enable sonarqube

Se impiega troppo tempo a caricarsi, aggiungete 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 controllo dello stato della qualità del codice sorgente in SonarQube.

Sfortunatamente, il plugin sonar-break-maven-plugin non è stato aggiornato da tempo. Pertanto, 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') # Stato 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') # Stato 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...ANALYZING RESULTS";
        curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; # Risultato dell'analisi come problemi critici, maggiori e minori
        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, maggiori e minori
          exit 1 # interrompe la build per le 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 il fallimento nella Fase 2
      fi
  tags:
    - docker

Il file .gitlab-ci.yml non è perfetto. È stato testato se le attività di verifica in sonarqube si sono concluse con lo stato: "SUCCESS". Finora non ci sono stati altri stati. Appena ci saranno altri stati, aggiornerò il .gitlab-ci.yml in questo post.

Visualizzazione sulla pagina principale 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 in SonarQube.

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

Andiamo su "Il mio account", creiamo un nuovo token, ad esempio chiamato "read_all_repository" e facciamo clic su "Genereate".

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

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

Accediamo come amministratore.

Andiamo in Configuration -> SVG Badges

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

Copia questo token nel campo "Activity badge token" e premi il pulsante save.

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

Accedi in Administration -> Security -> Permission Templates -> Default template (e altri template che potresti avere).

Per l'utente badges è necessario spuntare l'opzione "Browse".

Testing.

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

Importiamo questo progetto.

Aggiungiamo il file .gitlab-ci.yml alla radice 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" # 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ì:

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

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

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

Il codice per visualizzare i badges è così:

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

Analisi della stringa di visualizzazione dei 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)
[![Nome](http://172.26.9.115:9000/api/badges/gate?key=Project Key)](http://172.26.9.115:9000/dashboard?id=id-progetto)
[![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)
[![Nome Metri](http://172.26.9.115:9000/api/badges/measure?key=Project Key&metric=METRICA)](http://172.26.9.115:9000/dashboard?id=id-progetto)

Dove trovare/verificare il Project Key e l'id-progetto.

Il Project Key si trova in basso a destra. Nell'URL si trova l'id-progetto.

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

Le opzioni per ottenere le metriche possono essere consultate qui.

Tutte le pull request per miglioramenti, correzioni di bug inviale in 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

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