SonarQube on avatud platvorm pidevaks koodikvaliteedi jälgimiseks, mis toetab suurt hulka programmeerimiskeeli ja võimaldab genereerida aruandeid selliste mõõdikute kohta nagu koodide dubleering, koodistandardite järgimine, testide katvus, koodi keerukus, potentsiaalsed vead jne. SonarQube visualiseerib analüüsi tulemused mugavalt ja võimaldab jälgida projekti arengudünaamikat ajas.
Ülesanne: Näidata arendajatele kvaliteedikontrolli staatust SonarQubes.
On kaks lahendusteed:
- Käivitada kvaliteedikontrolli staatuse kontrolle script SonarQubes. Kui SonarQubes kvaliteedikontroll ebaõnnestub, siis ebaõnnestub ka koostamine.
- Kuvada peamisel projekti lehel kvaliteedikontrolli seisund.
SonarQube'i installimine
SonarQube'i installimiseks RPM-pakettidena kasutame hoidlat .
Installime CentOS 7-le repot.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmInstallime SonarQube'i ennast.
yum install -y sonarqubeEnamik pluginaid installitakse automaatselt, kuid tuleb juurde installida findbugs ja pmd.
yum install -y sonarqube-findbugs sonarqube-pmdKäivitame teenuse ja lisame see automaatsetesse käivitustesse.
systemctl start sonarqube
systemctl enable sonarqubeKui laadimine kestab kaua, lisage sonar.web.javaOpts lõppu järgnevad valikud, et kasutada juhuslikku numbrit /dev/.urandom.
sonar.web.javaOpts=muu konfiguratsioon -Djava.security.egd=file:/dev/urandomKäivitame koodi kvaliteedi kontrolli staatuse skripti SonarQubes.
Kahjuks pole sonar-break-maven-plugin juba pikka aega uuendatud. Seetõttu kirjutame oma skripti.
Testimiseks kasutame hoidlat. .
Impordime Gitlabisse. Lisame faili .gitlab-ci.yml:
muutujad:
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 kasutajanimi
PASSWORD: "admin" # sonarqube parool
vahepealne:
teed:
- .m2/repository
ehitus:
pilt: maven:3.3.9-jdk-8
etapp: ehitus
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, kuhu aruanne salvestatakse
- echo $URL
- |
while : ;do
curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
export status=$(cat analysis.txt | jq -r '.task.status') #Oleku info nagu SUCCESS, CANCELED, IN_PROGRESS või FAILED
echo $status
if [ ${status} == "SUCCESS" ];then
echo "SONAR ANALÜÜS EDUKAS";
break
fi
sleep 5
done
- curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
- export status=$(cat analysis.txt | jq -r '.task.status') #Oleku info nagu SUCCESS, CANCELED või FAILED
- export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Hangi analüüsi ID
- |
if [ "$status" == "SUCCESS" ]; then
echo -e "SONAR ANALÜÜS EDUKAS...ANALÜÜSITAKSE TULEMUSED";
curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Analüüsi tulemus, näiteks kriitilised, olulised ja väikesed probleemid
export result=$(cat result.txt | jq -r '.projectStatus.status');
if [ "$result" == "ERROR" ];then
echo -e "91mSONAR TULEMUSED EBAÕNNESTUS";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #prindib kriitilised, olulised ja väikesed rikkumised
exit 1 #katkestab ehituse rikkumiste tõttu
else
echo -e "SONAR TULEMUSED EDUKAD";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
exit 0
fi
else
echo -e "e[91mSONAR ANALÜÜS EBAÕNNESTUS e[0m";
exit 1 #katkestab ehituse ebaõnnestumise tõttu samm 2
fi
sildid:
- dockerFail .gitlab-ci.yml ei ole ideaalne. Testitud, kui SonarQube kontrollimise ülesanded lõpetati staatusega: "SUCCESS". Seni pole olnud teisi staatuseid. Kui tulevad teised staatused, parandan .gitlab-ci.yml selles postituses.
Kvaliteedikontrolli oleku kuvamine projekti avalehel
Installime SonarQube'i pistikprogrammi
yum install -y sonarqube-qualinsight-badgesLogime sisse SonarQube'i aadressil
Looma tavaline kasutaja, näiteks "badges".
Logime selle kasutajaga sisse SonarQube'i.

Logime sisse "Minu konto", loome uue tokeni, näiteks nimega "read_all_repository" ja vajutame "Genereate".

Näeme, et token ilmus. See ilmub ainult 1 kord.
Logime sisse administraatorina.
Liigume Configuration -> SVG Badges

Kopeerime selle tokeni välja "Activity badge token" ja vajutame nuppu salvestamiseks.

Logime sisse Administration -> Security -> Permission Templates -> Default template (ja teised šablonid, mis teil võivad olla).
Kasutajal badges tuleb märkida kast "Browse".
Testimine.
Näiteks võtame projekti .
Importime selle projekti.
Lisame faili .gitlab-ci.yml projekti juuri järgmise sisuga.
muutujad:
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 kasutajanimi
PASSWORD: "admin" # sonarqube parool
vahevari:
teed:
- .m2/repository
ehitus:
pilt: maven:3.3.9-jdk-8
etapp: ehitus
skript:
- 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
sildid:
- dockerSonarQube'is projekt näeb välja selline:

Lisame bages README.md ja need näevad välja sellised:

Badge'ide kuvamise kood näeb välja selline:

Badge'ide kuvamise rea analüüs:
[](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-проекта)Kust leida/ülevaate Project Key ja projekti ID.
Project Key asub paremas alumises nurgas. URL-is on projekti ID.

Meetmete saamiseks on võimalused .
Kõik pull requestid paranduste ja parenduste jaoks .
Telegrami vestlus SonarQube'i kohta
Telegrami vestlus DevSecOps'i kohta — turvaline DevOps
Allikas: habr.com
