SonarQube is een open source codekwaliteitsborgingsplatform dat een breed scala aan programmeertalen ondersteunt en rapportage biedt over statistieken zoals codeduplicatie, naleving van coderingsstandaarden, testdekking, codecomplexiteit, potentiële bugs en meer. SonarQube visualiseert op handige wijze analyseresultaten en stelt u in staat de dynamiek van projectontwikkeling in de loop van de tijd te volgen.
Doel: Ontwikkelaars de status tonen van de kwaliteitscontrole van de broncode in SonarQube.
Er zijn twee oplossingen:
- Voer een script uit om de kwaliteitscontrolestatus van de broncode in SonarQube te controleren. Als de kwaliteitscontrole van de broncode in SonarQube niet slaagt, mislukt de montage.
- Toon de kwaliteitscontrolestatus van de broncode op de hoofdprojectpagina.
SonarQube installeren
Om sonarqube vanuit rpm-pakketten te installeren, zullen we de repository gebruiken
Laten we het pakket installeren met de repository voor CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
We installeren sonarqube zelf.
yum install -y sonarqube
Tijdens de installatie worden de meeste plug-ins geïnstalleerd, maar u moet findbugs en pmd installeren
yum install -y sonarqube-findbugs sonarqube-pmd
Start de service en voeg deze toe aan het opstarten
systemctl start sonarqube
systemctl enable sonarqube
Als het laden lang duurt, voeg dan een generator voor willekeurige getallen /dev/./urandom toe aan het einde van de opties sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom
Een script uitvoeren om de status van de kwaliteitscontrole van de broncode in SonarQube te controleren.
Helaas is de plug-in sonar-break-maven-plugin al een hele tijd niet meer bijgewerkt. Dus laten we ons eigen script schrijven.
Voor het testen zullen we de repository gebruiken
Importeren in Gitlab. Voeg het .gitlab-ci.yml-bestand toe:
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
Het .gitlab-ci.yml-bestand is niet perfect. Getest of scantaken in sonarqube eindigden met de status: "SUCCESS". Tot nu toe zijn er geen andere statussen geweest. Zodra er andere statussen zijn, zal ik .gitlab-ci.yml in dit bericht corrigeren.
Weergave van de kwaliteitscontrolestatus van de broncode op de hoofdprojectpagina
De plug-in voor SonarQube installeren
yum install -y sonarqube-qualinsight-badges
We gaan naar SonarQube om
Maak een gewone gebruiker aan, bijvoorbeeld "badges".
Log onder deze gebruiker in op SonarQube.
Ga naar "Mijn account", maak een nieuw token aan, bijvoorbeeld met de naam "read_all_repository" en klik op "Genereren".
We zien dat er een token is verschenen. Hij zal slechts 1 keer verschijnen.
Log in als beheerder.
Ga naar Configuratie -> SVG-badges
Kopieer dit token naar het veld 'Activiteitbadgetoken' en klik op de knop Opslaan.
Ga naar Beheer -> Beveiliging -> Toestemmingssjablonen -> Standaardsjabloon (en andere sjablonen die u zult hebben).
Voor de badgegebruiker moet het selectievakje 'Bladeren' zijn aangevinkt.
Testing.
Laten we bijvoorbeeld het project nemen
Laten we dit project importeren.
Voeg het bestand .gitlab-ci.yml toe aan de projectroot met de volgende inhoud.
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
In SonarQube ziet het project er als volgt uit:
Voeg tassen toe aan README.md en ze zullen er als volgt uitzien:
De weergavecode van de badges ziet er als volgt uit:
De weergavereeks van de badges parseren:
[![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-проекта)
Waar u de projectsleutel en project-ID kunt verkrijgen/controleren.
Projectsleutel bevindt zich rechtsonder. De URL bevat de project-ID.
Opties voor het verkrijgen van statistieken kunnen zijn
Alle pull-aanvragen voor verbeteringen en bugfixes
Telegramchat over SonarQube
Telegram-chat over DevSecOps - veilige DevOps
Bron: www.habr.com