SonarQube ist eine Open-Source-Plattform zur kontinuierlichen Qualitätssicherung von Quellcode, die zahlreiche Programmiersprachen unterstützt und Berichte zu Metriken wie Code-Duplizierung, Einhaltung von Codierungsstandards, Testabdeckung, Code-Komplexität sowie potenziellen Fehlern erstellt. SonarQube visualisiert die Analyseergebnisse verständlich und ermöglicht die Nachverfolgung der Projektentwicklung im Zeitverlauf.
Aufgabe: Entwicklern den Status der Quellcode-Qualitätssicherung in SonarQube anzuzeigen.
Es gibt zwei Möglichkeiten zur Lösung:
- Ein Skript zur Überprüfung des Status der Quellcode-Qualitätssicherung in SonarQube auszuführen. Wenn die Quellcode-Qualität in SonarQube nicht bestanden wird, soll der Build fehlschlagen.
- Den Status der Quellcode-Qualitätssicherung auf der Hauptseite des Projekts anzuzeigen.
Installation von SonarQube
Um SonarQube aus RPM-Paketen zu installieren, verwenden wir das Repository. .
Wir installieren das Paket mit dem Repository für CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmWir installieren SonarQube selbst.
yum install -y sonarqubeBei der Installation werden die meisten Plugins installiert, aber findbugs und pmd müssen zusätzlich installiert werden.
yum install -y sonarqube-findbugs sonarqube-pmdWir starten den Dienst und fügen ihn zur automatischen Startsequenz hinzu
systemctl start sonarqube
systemctl enable sonarqubeWenn es lange dauert, fügen Sie am Ende der Optionen sonar.web.javaOpts den Zufallszahlengenerator /dev/./urandom hinzu
sonar.web.javaOpts=weitere Optionen -Djava.security.egd=file:/dev/urandomAusführung des Skripts zur Überprüfung des Code-Qualitätsstatus in SonarQube.
Leider wurde das Plugin sonar-break-maven-plugin schon lange nicht mehr aktualisiert. Daher schreiben wir unser eigenes Skript.
Für die Tests verwenden wir das Repository .
Importieren in Gitlab. Wir fügen die Datei .gitlab-ci.yml hinzu:
variablen:
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 für SonarQube
PASSWORD: "admin" # Passwort für SonarQube
cache:
pfade:
- .m2/repository
build:
image: maven:3.3.9-jdk-8
phase: build
skript:
- 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, wo der Bericht gespeichert wird
- echo $URL
- |
während : ;do
curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
export status=$(cat analysis.txt | jq -r '.task.status') #Status als SUCCESS, CANCELED, IN_PROGRESS oder FAILED
echo $status
wenn [ ${status} == "SUCCESS" ]; dann
echo "SONAR ANALYSE ERFOLGREICH";
break
fi
sleep 5
done
- curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
- export status=$(cat analysis.txt | jq -r '.task.status') #Status als SUCCESS, CANCELED oder FAILED
- export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Erhalte die Analyse-ID
- |
wenn [ "$status" == "SUCCESS" ]; dann
echo -e "SONAR ANALYSE ERFOLGREICH... ERGEBNISSE ANALYSIEREN";
curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Analyseergebnis wie kritische, wesentliche und geringfügige Probleme
export result=$(cat result.txt | jq -r '.projectStatus.status');
wenn [ "$result" == "ERROR" ]; dann
echo -e "91mSONAR ERGEBNISSE FEHLGESCHLAGEN";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #druckt die kritischen, wesentlichen und geringfügigen Verstöße aus
exit 1 #bricht den Build wegen Verstöße ab
sonst
echo -e "SONAR ERGEBNISSE ERFOLGREICH";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
exit 0
fi
sonst
echo -e "e[91mSONAR ANALYSE FEHLGESCHLAGENe[0m";
exit 1 #bricht den Build wegen Fehler in Schritt 2 ab
fi
tags:
- dockerDie Datei .gitlab-ci.yml ist nicht ideal. Es wurde getestet, ob die Prüfaufgaben in SonarQube den Status: "SUCCESS" haben. Bisher gab es keine anderen Status. Wenn es andere Status gibt, werde ich .gitlab-ci.yml in diesem Beitrag anpassen.
Anzeige des Status der Code-Qualitätskontrolle auf der Projekt-Homepage
Plugin für SonarQube installieren
yum install -y sonarqube-qualinsight-badgesWir gehen zu SonarQube unter der Adresse
Einen normalen Benutzer erstellen, z.B. "badges".
Wir melden uns mit diesem Benutzer in SonarQube an.

Wir gehen zu "Mein Konto", erstellen einen neuen Token, z.B. mit dem Namen "read_all_repository" und klicken auf "Generieren".

Wir sehen, dass ein Token angezeigt wird. Er erscheint nur einmal.
Wir melden uns als Administrator an.
Gehen zu Konfiguration -> SVG Badges

Diesen Token in das Feld "Activity badge token" kopieren und die Schaltfläche speichern klicken.

Gehen zu Verwaltung -> Sicherheit -> Berechtigungsvorlagen -> Standardvorlage (und andere Vorlagen, die Sie haben).
Für den Benutzer badges muss das Kästchen "Browse" aktiviert werden.
Testen.
Zum Beispiel nehmen wir das Projekt .
Importieren dieses Projekts.
Fügen Sie die Datei .gitlab-ci.yml mit folgendem Inhalt in das Wurzelverzeichnis des Projekts ein.
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" # Benutzername Sonarqube
PASSWORD: "admin" # Passwort 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 wird das Projekt so aussehen:

Wir fügen Badges in die README.md ein, und sie werden so aussehen:

Der Code zur Anzeige der Badges sieht so aus:

Analyse der Badge-Anzeigezeichenfolge:
[](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-проекта)Wo finde ich den Project Key und die Projekt-ID?
Der Project Key befindet sich rechts unten. Im URL finden Sie die Projekt-ID.

Die Optionen zur Erfassung von Metriken finden Sie .
Alle Pull-Requests zur Verbesserung und Fehlerbehebung .
Telegram-Chat über SonarQube
Telegram-Chat über DevSecOps – sicheres DevOps
Quelle: habr.com
