SonarQube és una plataforma de garantia de la qualitat del codi font oberta que admet una àmplia gamma de llenguatges de programació i proporciona informes sobre mètriques com ara la duplicació de codi, el compliment dels estàndards de codificació, la cobertura de proves, la complexitat del codi, possibles errors i molt més. SonarQube visualitza còmodament els resultats de l'anàlisi i us permet fer un seguiment de la dinàmica del desenvolupament del projecte al llarg del temps.
Objectiu: mostrar als desenvolupadors l'estat del control de qualitat del codi font a SonarQube.
Hi ha dues solucions:
- Executeu un script per comprovar l'estat del control de qualitat del codi font a SonarQube. Si el control de qualitat del codi font a SonarQube no passa, falla el muntatge.
- Mostra l'estat del control de qualitat del codi font a la pàgina principal del projecte.
Instal·lació de SonarQube
Per instal·lar sonarqube des de paquets rpm, utilitzarem el repositori
Instal·lem el paquet amb el repositori per a CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
Instal·lem el propi sonarqube.
yum install -y sonarqube
Durant la instal·lació, la majoria dels connectors s'instal·laran, però cal que instal·leu findbugs i pmd
yum install -y sonarqube-findbugs sonarqube-pmd
Inicieu el servei i afegiu-lo a l'inici
systemctl start sonarqube
systemctl enable sonarqube
Si es triga molt de temps a carregar-se, afegiu un generador de números aleatoris /dev/./urandom al final de les opcions sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom
Execució d'un script per comprovar l'estat del control de qualitat del codi font a SonarQube.
Malauradament, el connector sonar-break-maven-plugin no s'ha actualitzat des de fa molt de temps. Així que escrivim el nostre propi guió.
Per fer proves farem servir el repositori
Importació a Gitlab. Afegiu el fitxer .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
El fitxer .gitlab-ci.yml no és perfecte. S'ha provat si les tasques d'escaneig a sonarqube van acabar amb l'estat: "ÈXIT". Fins ara no hi ha hagut altres estats. Tan bon punt hi hagi altres estats, corregiré .gitlab-ci.yml en aquesta publicació.
Mostra l'estat del control de qualitat del codi font a la pàgina principal del projecte
Instal·lació del connector per a SonarQube
yum install -y sonarqube-qualinsight-badges
Anem a SonarQube a
Creeu un usuari habitual, per exemple "insígnies".
Inicieu sessió a SonarQube amb aquest usuari.
Aneu a "El meu compte", creeu un testimoni nou, per exemple amb el nom "read_all_repository" i feu clic a "Genereu".
Veiem que ha aparegut un testimoni. Només apareixerà una vegada.
Inicieu sessió com a administrador.
Aneu a Configuració -> Insígnies SVG
Copieu aquest testimoni al camp "Insígnia d'activitat" i feu clic al botó Desa.
Aneu a Administració -> Seguretat -> Plantilles de permisos -> Plantilla predeterminada (i altres plantilles que tindreu).
L'usuari de les insígnies ha de tenir marcada la casella de selecció "Examinar".
Proves.
Per exemple, prenem el projecte
Importem aquest projecte.
Afegiu el fitxer .gitlab-ci.yml a l'arrel del projecte amb el contingut següent.
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
A SonarQube el projecte es veurà així:
Afegiu bosses a README.md i es veuran així:
El codi de visualització de les insígnies té aquest aspecte:
Analitzant la cadena de visualització de les insígnies:
[![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-проекта)
On obtenir/comprovar la clau del projecte i l'identificador del projecte.
La clau del projecte es troba a la part inferior dreta. L'URL conté l'identificador del projecte.
Les opcions per obtenir mètriques poden ser
Totes les sol·licituds d'extracció de millores, correccions d'errors
Xateja de Telegram sobre SonarQube
Xateja de Telegram sobre DevSecOps: DevOps segur
Font: www.habr.com