SonarQube on avatud lähtekoodiga koodi kvaliteedi tagamise platvorm, mis toetab laia valikut programmeerimiskeeli ja pakub aruandeid selliste mõõdikute kohta nagu koodi dubleerimine, kodeerimisstandardite järgimine, testide hõlmatus, koodi keerukus, võimalikud vead ja palju muud. SonarQube visualiseerib mugavalt analüüsi tulemusi ja võimaldab teil jälgida projekti arendusdünaamikat aja jooksul.
Ülesanne: Näidata arendajatele SonarQube'is nende lähtekoodi kvaliteedikontrolli olekut.
On kaks lahendust:
- Käivita skript, et kontrollida SonarQube'i lähtekoodi kvaliteedi tagamise olekut. Kui SonarQube'i lähtekoodi kvaliteedi tagamine ebaõnnestub, siis ebaõnnestub ka ehitus.
- Näita lähtekoodi kvaliteedikontrolli olekut projekti avalehel.
SonarQube'i installimine
Sonarqube'i installimiseks rpm-pakettidest kasutame repositooriumi .
Paigaldame CentOS 7 hoidla paketi.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmPaigalda sonarqube ise.
yum install -y sonarqubeInstallimise ajal installitakse enamik pluginaid, aga peate installima ka findbugs ja pmd.
yum install -y sonarqube-findbugs sonarqube-pmdKäivitage teenus ja lisage see käivitusmenüüsse
systemctl start sonarqube
systemctl enable sonarqubeKui laadimine võtab kaua aega, lisa juhuslike arvude generaator /dev/./urandom sonar.web.javaOpts valikute lõppu.
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandomLähtekoodi kvaliteedikontrolli oleku kontrolli skripti käivitamine SonarQube'is.
Kahjuks pole sonar-break-maven-plugin pluginat mõnda aega uuendatud. Seega kirjutame oma skripti.
Testimiseks kasutame repositooriumi .
Impordi Gitlabi. Lisa fail .gitlab-ci.yml:
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:
- dockerFail .gitlab-ci.yml pole täiuslik. Testisin seda, kas sonarqube'i kontrolliülesanded lõppesid staatusega "SUCCESS". Siiani pole muid staatuseid olnud. Kui mul on muud staatused, uuendan faili .gitlab-ci.yml selles postituses.
Lähtekoodi kvaliteedikontrolli oleku kuvamine projekti avalehel
SonarQube'i pistikprogrammi installimine
yum install -y sonarqube-qualinsight-badgesMine SonarQube'i aadressile
Loo tavakasutaja, näiteks "märgid".
Logi SonarQube'i sisse selle kasutajanimega.

Mine jaotisse „Minu konto“, loo uus token, näiteks nimega „read_all_repository“, ja klõpsa nupul „Genereeri“.

Näeme, et ilmunud on märk. See ilmub ainult üks kord.
Logi sisse administraatorina.
Mine menüüsse Konfiguratsioon -> SVG märgid

Kopeeri see märk väljale „Tegevusmärgi märk” ja klõpsa salvestusnupule.

Mine menüüsse Administreerimine -> Turvalisus -> Õiguste mallid -> Vaikimisi mall (ja muud mallid, mis sul võivad olla).
Märgi kasutajal peab olema märgitud märkeruut „Sirvi”.
Testimine.
Võtame näiteks projekti .
Impordime selle projekti.
Lisa projekti juurkataloogi fail .gitlab-ci.yml järgmise sisuga.
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:
- dockerSonarQube'is näeb projekt välja selline:

Lisa paketid README.md faili ja need näevad välja sellised:

Märkide kuvamise kood näeb välja selline:

Märkide kuvamise stringi parsimine:
[](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 saada/kontrollida projekti võtit ja projekti ID-d?
Projekti võti asub paremas alanurgas. URL sisaldab projekti ID-d.

Mõõdikute hankimise võimalused võivad olla järgmised .
Kõik täiustuste ja veaparanduste pull-taotlused .
Telegrami vestlus SonarQube'i kohta
Telegrami vestlus DevSecOpsi kohta — turvaline DevOps
Allikas: www.habr.com
