SonarQube ist eine offene Plattform für die kontinuierliche Qualitätskontrolle von Quellcode, die eine Vielzahl von Programmiersprachen unterstützt und Berichte über Metriken wie Code-Duplikate, Einhaltung von Codierungsstandards, Testabdeckung, Komplexität des Codes, potenzielle Fehler usw. ermöglicht. SonarQube visualisiert die Analyseergebnisse übersichtlich und ermöglicht es, die Entwicklung des Projekts im Zeitverlauf zu verfolgen.
Aufgabe: Den Entwicklern den Status der Qualitätskontrolle des Quellcodes in SonarQube anzeigen.
Es gibt zwei Lösungsansätze:
- Ein Skript zur Überprüfung des Status der Qualitätskontrolle des Quellcodes in SonarQube ausführen. Wenn die Qualitätskontrolle des Quellcodes in SonarQube nicht besteht, den Build fehlschlagen.
- Den Status der Qualitätskontrolle des Quellcodes auf der Hauptseite des Projekts anzeigen.
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 nachinstalliert werden
yum install -y sonarqube-findbugs sonarqube-pmdWir starten den Dienst und fügen ihn zur Autostartliste hinzu.
systemctl start sonarqube
systemctl enable sonarqubeWenn es lange dauert zu laden, fügen Sie am Ende der Optionen sonar.web.javaOpts den Zufallszahlengenerator /dev/.urandom hinzu.
sonar.web.javaOpts=weitere Parameter -Djava.security.egd=file:/dev/urandomAusführung des Skripts zur Überprüfung des Status der Qualitätskontrolle des Quellcodes in SonarQube.
Leider wurde das Plugin sonar-break-maven-plugin seit langem nicht mehr aktualisiert. Daher schreiben wir unser eigenes Skript.
Für die Tests verwenden wir das Repository. .
Importieren in GitLab. Fügen Sie 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 SonarQube
PASSWORD: "admin" # Passwort 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, wohin der Bericht gespeichert wird
- echo $URL
- |
while : ;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
if [ ${status} == "SUCCESS" ];then
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') #Analyse-ID abrufen
- |
if [ "$status" == "SUCCESS" ]; then
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, wichtige und geringfügige Probleme
export result=$(cat result.txt | jq -r '.projectStatus.status');
if [ "$result" == "ERROR" ];then
echo -e "91mSONAR ERGEBNISSE FEHLGESCHLAGEN";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #Druckt die kritischen, wichtigen und geringfügigen Verstöße
exit 1 #bricht den Build wegen Verstöße ab
else
echo -e "SONAR ERGEBNISSE ERFOLGREICH";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
exit 0
fi
else
echo -e "e[91mSONAR ANALYSE FEHLGESCHLAGENe[0m";
exit 1 #bricht den Build ab bei Fehler in Schritt 2
fi
tags:
- dockerDie Datei .gitlab-ci.yml ist nicht perfekt. Es wurde getestet, ob die Überprüfungsaufgaben in SonarQube den Status: "SUCCESS" erreicht haben. Bisher gab es keinen anderen Status. Sobald es andere Status gibt, werde ich die .gitlab-ci.yml in diesem Beitrag anpassen.
Anzeigen des Status der Codequalität auf der Hauptseite des Projekts
Plugin für SonarQube installieren
yum install -y sonarqube-qualinsight-badgesZugang zu SonarQube unter der Adresse
Einen normalen Benutzer erstellen, zum Beispiel "badges".
Mit diesem Benutzer in SonarQube einloggen.

In "Mein Konto" gehen, einen neuen Token erstellen, beispielsweise mit dem Namen "read_all_repository", und auf "Generieren" klicken.

Wir sehen, dass der Token erschienen ist. Er wird nur einmal angezeigt.
Als Administrator einloggen.
Gehe zu Konfiguration -> SVG Badges

Wir kopieren dieses Token in das Feld "Activity badge token" und drücken die Schaltfläche Speichern.

Navigieren Sie zu Verwaltung -> Sicherheit -> Berechtigungsvorlagen -> Standardvorlage (und andere Vorlagen, die Sie haben).
Für den Benutzer müssen die Badges das Kästchen "Durchsuchen" aktiviert haben.
Testing.
Zum Beispiel nehmen wir ein Projekt. .
Wir importieren dieses Projekt.
Fügen Sie die Datei .gitlab-ci.yml in das Hauptverzeichnis des Projekts mit folgendem Inhalt hinzu.
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" # 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:
- dockerDas Projekt wird in SonarQube so aussehen:

Wir fügen Badges in README.md hinzu und sie werden so aussehen:

Der Code zur Anzeige der Badges sieht so aus:

Analyse der Badge-Anzeigereihe:
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-проекта)
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-проекта)Wo man den Project Key und die id-проекта findet/prüfen kann.
Der Project Key befindet sich rechts unten. Im URL ist die id-проекта zu finden.

Optionen zur Abfrage von Metriken können .
Alle Pull-Requests zur Verbesserung und Fehlerbehebung .
Telegram-Chat über SonarQube
Telegram-Chat über DevSecOps — sicheres DevOps
Quelle: habr.com
