SonarQube est une plate-forme d'assurance qualité du code open source qui prend en charge un large éventail de langages de programmation et fournit des rapports sur des mesures telles que la duplication de code, la conformité aux normes de codage, la couverture des tests, la complexité du code, les bogues potentiels, etc. SonarQube visualise facilement les résultats de l'analyse et vous permet de suivre la dynamique du développement du projet au fil du temps.
Objectif : Montrer aux développeurs l'état du contrôle qualité du code source dans SonarQube.
Il existe deux solutions :
- Exécutez un script pour vérifier l'état du contrôle qualité du code source dans SonarQube. Si le contrôle qualité du code source dans SonarQube échoue, l'assemblage échoue.
- Afficher l'état du contrôle qualité du code source sur la page principale du projet.
Installation de SonarQube
Pour installer sonarqube à partir des packages rpm, nous utiliserons le référentiel
Installons le package avec le référentiel pour CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
Nous installons sonarqube lui-même.
yum install -y sonarqube
Lors de l'installation, la plupart des plugins seront installés, mais vous devrez installer findbugs et pmd
yum install -y sonarqube-findbugs sonarqube-pmd
Lancez le service et ajoutez-le au démarrage
systemctl start sonarqube
systemctl enable sonarqube
Si le chargement prend beaucoup de temps, ajoutez un générateur de nombres aléatoires /dev/./urandom à la fin des options sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom
Exécution d'un script pour vérifier l'état du contrôle qualité du code source dans SonarQube.
Malheureusement, le plugin sonar-break-maven-plugin n'a pas été mis à jour depuis longtemps. Alors écrivons notre propre script.
Pour les tests, nous utiliserons le référentiel
Importation dans Gitlab. Ajoutez le fichier .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
Le fichier .gitlab-ci.yml n'est pas parfait. Testé si les tâches d'analyse dans sonarqube se terminaient par le statut : "SUCCÈS". Jusqu'à présent, il n'y a pas eu d'autres statuts. Dès qu'il y aura d'autres statuts, je corrigerai .gitlab-ci.yml dans ce post.
Affichage de l'état du contrôle qualité du code source sur la page principale du projet
Installation du plugin pour SonarQube
yum install -y sonarqube-qualinsight-badges
Nous allons à SonarQube à
Créez un utilisateur régulier, par exemple "badges".
Connectez-vous à SonarQube sous cet utilisateur.
Allez dans « Mon compte », créez un nouveau token, par exemple avec le nom « read_all_repository » et cliquez sur « Générer ».
On voit qu'un jeton est apparu. Il n'apparaîtra qu'une seule fois.
Connectez-vous en tant qu'administrateur.
Allez dans Configuration -> Badges SVG
Copiez ce jeton dans le champ « Jeton de badge d'activité » et cliquez sur le bouton Enregistrer.
Accédez à Administration -> Sécurité -> Modèles d'autorisation -> Modèle par défaut (et autres modèles dont vous disposerez).
L'utilisateur des badges doit avoir la case "Parcourir" cochée.
Essai.
Par exemple, prenons le projet
Importons ce projet.
Ajoutez le fichier .gitlab-ci.yml à la racine du projet avec le contenu suivant.
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
Dans SonarQube, le projet ressemblera à ceci :
Ajoutez des sacs au README.md et ils ressembleront à ceci :
Le code d'affichage des badges ressemble à ceci :
Analyse de la chaîne d'affichage des 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.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-проекта)
Où obtenir/vérifier la clé du projet et l'identifiant du projet.
La clé du projet se trouve en bas à droite. L'URL contient l'identifiant du projet.
Les options pour obtenir des métriques peuvent être
Toutes les demandes d'extraction d'améliorations, de corrections de bugs
Discussion par télégramme sur SonarQube
Discussion par télégramme sur DevSecOps - DevOps sécurisé
Source: habr.com