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 .
Installeremo il pacchetto del repository per CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmInstallemmo SonarQube stesso.
yum install -y sonarqubeDurante l'installazione verranno installati la maggior parte dei plugin, ma sarà necessario installare findbugs e pmd.
yum install -y sonarqube-findbugs sonarqube-pmdAvviamo il servizio e lo aggiungiamo all'avvio automatico.
systemctl start sonarqube
systemctl enable sonarqubeSe 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/urandomEsecuzione 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. .
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:
- dockerIl 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-badgesAccediamo a SonarQube all'indirizzo
Creiamo un utente normale, ad esempio "badges".
Accediamo con questo utente a SonarQube.

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

Vediamo che è apparso un token. Apparirà solo una volta.
Accediamo come amministratore.
Andiamo su Configuration -> SVG Badges.

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

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. .
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:
- dockerIn SonarQube, il progetto apparirà così:

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

Il codice per visualizzare i badge appare così:

Analisi della stringa per la visualizzazione dei badge:
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpack%3Amaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-проекта)
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpack%3Amaven-simple)
[](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.

Le opzioni per ricevere le metriche possono .
Tutti i pull request per miglioramenti e correzioni di bug .
Chat Telegram su SonarQube
Chat Telegram su DevSecOps — un DevOps sicuro
Fonte: habr.com
