SonarQube er en åben platform til kontinuerlig kvalitetskontrol af kildekode, der understøtter en lang række programmeringssprog og giver mulighed for at få rapporter om målinger som kode-duplikation, overholdelse af kodestandarder, testdækning, kodekompleksitet, potentielle fejl osv. SonarQube visualiserer resultaterne af analysen på en brugervenlig måde og gør det muligt at følge udviklingen af projektet over tid.
Opgaven: At vise udviklerne status for kvalitetskontrol af kildekoden i SonarQube.
Der er to måder at løse det på:
- Køre et script til kontrol af status for kvalitetskontrol af kildekoden i SonarQube. Hvis kvalitetskontrollen ikke bestås i SonarQube, skal bygningen fejles.
- Vise status for kvalitetskontrol af kildekoden på hovedsiden af projektet.
Installation af SonarQube
Til installation af SonarQube fra rpm-pakker bruger vi repositoryet .
Vi installerer pakken med repositoryet til CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmVi installerer selve SonarQube.
yum install -y sonarqubeVed installationen vil de fleste plugins blive installeret, men findbugs og pmd skal installeres separat.
yum install -y sonarqube-findbugs sonarqube-pmdVi starter tjenesten og tilføjer den til automatisk opstart.
systemctl start sonarqube
systemctl enable sonarqubeHvis det tager lang tid at indlæse, så tilføj en tilfældig nummergenerator ved slutningen af indstillingerne sonar.web.javaOpts /dev/.urandom
sonar.web.javaOpts=andre parametre -Djava.security.egd=file:/dev/urandomKør scriptet til kontrol af status for kvalitetskontrol af kildekoden i SonarQube.
Desværre har plugin'et sonar-break-maven-plugin ikke været opdateret i lang tid. Derfor vil vi skrive vores eget script.
Til testning vil vi bruge repositoryet .
Vi importerer det til GitLab. Tilføj filen .gitlab-ci.yml:
variabler:
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 til sonarqube
PASSWORD: "admin" # password til 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 hvor rapporten gemmes
- echo $URL
- |
while : ;do
curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
export status=$(cat analysis.txt | jq -r '.task.status') #Status som SUCCESS, CANCELED, IN_PROGRESS eller FAILED
echo $status
if [ ${status} == "SUCCESS" ];then
echo "SONAR ANALYSE 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 som SUCCESS, CANCELED eller FAILED
- export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Hent analyse Id
- |
if [ "$status" == "SUCCESS" ]; then
echo -e "SONAR ANALYSE SUCCESSFUL...ANALYSERER RESULTATER";
curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Analyse resultater som kritiske, alvorlige og mindre problemer
export result=$(cat result.txt | jq -r '.projectStatus.status');
if [ "$result" == "ERROR" ];then
echo -e "91mSONAR RESULTATER FEJLEDE";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #udskriver kritiske, alvorlige og mindre overtrædelser
exit 1 #stopper bygningen for overtrædelser
else
echo -e "SONAR RESULTATER SUCCESSFUL";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
exit 0
fi
else
echo -e "e[91mSONAR ANALYSE FEJLEDEe[0m";
exit 1 #stopper bygningen for fejl i Step2
fi
tags:
- docker.gitlab-ci.yml-filen er ikke perfekt. Den er testet, hvis kontrolopgaverne i sonarqube sluttede med status: "SUCCESS". Der har indtil videre ikke været andre statusser. Når der kommer andre statusser, vil jeg rette .gitlab-ci.yml i dette indlæg.
Visning på projektets forside af status for kvalitetskontrol af koden
Installerer plugin til SonarQube
yum install -y sonarqube-qualinsight-badgesGå ind på SonarQube på adressen
Opretter en almindelig bruger, for eksempel "badges".
Log ind med denne bruger i SonarQube.

Gå ind under "Min konto", opret en ny token, for eksempel med navnet "read_all_repository", og klik på "Genereate".

Ser at tokenet er blevet oprettet. Det vil kun blive vist én gang.
Log ind som administrator.
Gå til Configuration -> SVG Badges

Vi kopierer denne token ind i feltet "Activity badge token" og trykker på knappen gem.

Vi går ind i Administration -> Sikkerhed -> Tilladelsesskabeloner -> Standard skabelon (og andre skabeloner, du måtte have).
Brugeren badges skal have markeret "Browse".
Testning.
Lad os tage et projekt som eksempel .
Vi importerer dette projekt.
Vi tilføjer filen .gitlab-ci.yml til roden af projektet med følgende indhold.
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" # kodeord 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:
- dockerI SonarQube vil projektet se sådan ud:

Vi tilføjer badges i README.md, og de vil se sådan ud:

Koden til visningen af badges ser sådan ud:

Analyse af badges visningsstrengen:
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-projekt)
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-projekt)Hvor kan man finde/tjekke Project Key og id-projekt.
Project Key findes nederst til højre. Id-projektet findes i URL'en.

Muligheder for at hente metrikker kan .
Alle pull requests til forbedringer, fejlrettelser .
Telegram chat om SonarQube
Telegram chat om DevSecOps - sikker DevOps
Kilde: habr.com
