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

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

Vediamo che è comparso un token. Apparirà solo 1 volta.
Accediamo come amministratore.
Andiamo in Configuration -> SVG Badges

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

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

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

Il codice per visualizzare i badges è così:

Analisi della stringa di visualizzazione dei badges:
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-progetto)
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](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.

Le opzioni per ottenere le metriche possono .
Tutte le pull request per miglioramenti, correzioni di bug .
Chat di Telegram su SonarQube
Chat di Telegram su DevSecOps — DevOps sicuro
Fonte: habr.com
