SonarQube on avatud platvorm pidevaks lähtekoodi kvaliteedi kontrolliks, mis toetab suurt hulka programmeerimiskeeli ja võimaldab genereerida aruandeid selliste mõõdikute kohta nagu koodide dubleerimine, kodeerimisstandardite täitmine, testide katvuse tase, koodi keerukus, potentsiaalsed vead jne. SonarQube visualiseerib analüüsi tulemusi mugavalt ning võimaldab jälgida projekti arengudünaamikat ajas.
Ülesanne: Näidata arendajatele lähtekoodi kvaliteedi kontrolli staatust SonarQubes.
Probleemi lahendamiseks on kaks võimalust:
- Käivitada lähtekoodi kvaliteedi kontrolli staatuse skript SonarQubes. Kui lähtekoodi kvaliteedi kontroll SonarQubes ei vasta nõuetele, siis ebaõnnestub komplekteerimine.
- Näidata projekti peamisel lehel lähtekoodi kvaliteedi kontrolli staatust.
SonarQube installatsioon
SonarQube’i installimiseks rpm-pakettide abil kasutame hoidlat. .
Installime paketi hoidla jaoks CentOS 7-le.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmInstalleerime SonarQube'i.
yum install -y sonarqubeInstalleerimise käigus installitakse enamik pluginadest, kuid tuleb juurde installida findbugs ja pmd.
yum install -y sonarqube-findbugs sonarqube-pmdKäivitame teenuse ja lisame selle automaatkäivitusse.
systemctl start sonarqube
systemctl enable sonarqubeKui laadimine venib, siis lisage sonar.web.javaOpts lõppu järgnevad seadistused: juhuslike numbrite generaator /dev/./urandom
sonar.web.javaOpts=teised seaded -Djava.security.egd=file:/dev/urandomKäivitame lähtekoodi kvaliteedi kontrolli staatuse skripti SonarQubes.
Kahjuks ei ole sonar-break-maven-plugin juba kaua aega uuendatud. Seetõttu kirjutame oma skripti.
Testimiseks kasutame hoidlat. .
Impordime Gitlabi. 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
vahemälu:
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') # Staatus 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') # Staatus nagu SUCCESS, CANCELED või FAILED
- export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') # Saame analüüsi ID
- |
if [ "$status" == "SUCCESS" ]; then
echo -e "SONAR ANALÜÜS EDUKAS... TULEMUSTE ANALÜÜS";
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ÕNNESTUNUD";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; # trükib 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";
exit 1 # katkestab ehituse ebaõnnestumise tõttu sammus 2
fi
märgised:
- docker.gitlab-ci.yml fail ei ole täiuslik. Testiti, kas sonarqube kontrollimisülesannete staatuseks oli: "SUCCESS". Praegu pole olnud teisi staatuseid. Kui tulevad teised staatused, parandan .gitlab-ci.yml selle postituse juures.
Projekti avalehel kuvatakse lähtekoodikvaliteedi kontrolli staatust
Paigaldame SonarQube plugina
yum install -y sonarqube-qualinsight-badgesSiseneme SonarQube aadressil
Loome tavalise kasutaja, näiteks "badges".
Siseneme selle kasutajana SonarQube.

Siseneme "My account" alla, loome uue tokeni, näiteks nimega "read_all_repository" ja vajutame "Genereate".

Näeme, et token on tekkinud. See ilmub ainult kord.
Siseneme administraatorina.
Läheme Configuration -> SVG Badges

Kopeerime selle tokeni "Activity badge token" väljale ja vajutame nuppu salvesta.

Siseneme Administration -> Security -> Permission Templates -> Default template (ja teised teie olemasolevad mallid).
Kasutajal badges on vaja valida "Browse".
Testimine.
Näiteks võtame projekti .
Impordime selle projekti.
Lisame faili .gitlab-ci.yml projekti juurka, millel on järgmine sisu.
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 kasutajanimi
PASSWORD: "admin" # sonarqube parool
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:
- dockerSonarQubes näeb projekt 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 kuvamistringi 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/kontrollida Project Key ja id-projekti.
Project Key asub paremal alumises nurgas. URL-is on id-projekti.

Metrika saamise valikud saab .
Kõik pull request'id parandusettepanekute ja veaparanduste jaoks .
Telegram'i vestlus SonarQube'ist
Telegram'i vestlus DevSecOps'i kohta — turvaline DevOps
Allikas: habr.com
