SonarQube Àr en öppen plattform för kontinuerlig kodkvalitetskontroll som stödjer ett stort antal programmeringssprÄk och möjliggör rapportering av metrik som kodduplicering, följsamhet till kodstandarder, testtÀckning, kodkomplexitet, potentiella fel, osv. SonarQube visualiserar analysresultaten pÄ ett anvÀndarvÀnligt sÀtt och möjliggör spÄrning av projektets utveckling över tid.
Uppgift: Visa utvecklarna statusen för kodkvalitetskontroll i SonarQube.
Det finns tvÄ sÀtt att lösa det:
- Kör ett skript för att kontrollera statusen för kodkvalitetskontroll i SonarQube. Om kodkvalitetskontrollen i SonarQube misslyckas, ska bygget misslyckas.
- Visa statusen för kodkvalitetskontroll pÄ projektets huvudsida.
Installation av SonarQube
För att installera SonarQube frÄn rpm-paket, anvÀnd repot .
Vi installerar paketet med repot för CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmVi installerar sjÀlva SonarQube.
yum install -y sonarqubeVid installation kommer de flesta plugins att installeras, men vi behöver installera findbugs och pmd
yum install -y sonarqube-findbugs sonarqube-pmdStarta tjÀnsten och lÀgg till den i autostart
systemctl start sonarqube
systemctl enable sonarqubeOm det tar lÄng tid att ladda, lÀgg till i slutet av alternativen sonar.web.javaOpts en slumpgenerator /dev/.urandom
sonar.web.javaOpts=övriga alternativ -Djava.security.egd=file:/dev/urandomKör skriptet för att kontrollera statusen för kodkvalitetskontroll i SonarQube.
TyvÀrr har pluginet sonar-break-maven-plugin inte uppdaterats pÄ lÀnge. DÀrför skriver vi vÄrt eget skript.
För testning ska vi anvÀnda repot .
Importera i Gitlab. LĂ€gg till 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" # anvÀndarnamn sonarqube
PASSWORD: "admin" # lösenord 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 dÀr rapporten sparas
- 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 ANALYS 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') #HĂ€mta analys-ID
- |
if [ "$status" == "SUCCESS" ]; then
echo -e "SONAR ANALYS FRAMGĂ
NGSRIK...ANALYSERAR RESULTAT";
curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Analysresultat som kritiska, stora och smÄ problem
export result=$(cat result.txt | jq -r '.projectStatus.status');
if [ "$result" == "ERROR" ];then
echo -e "91mSONAR RESULTAT MISSLYCKADES";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #skriver ut de kritiska, stora och smÄ övertrÀdelserna
exit 1 #avbryter bygget för övertrÀdelser
else
echo -e "SONAR RESULTAT FRAMGĂ
NGSRIKA";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
exit 0
fi
else
echo -e "e[91mSONAR ANALYS MISSLYCKADESe[0m";
exit 1 #avbryter bygget för fel i Steg2
fi
tags:
- docker.gitlab-ci.yml-filen Àr inte perfekt. Den har testats för att kontrollera om uppgifterna avslutas med status: "SUCCESS". Jag har Ànnu inte haft nÄgra andra statusar. NÀr det kommer andra statusar kommer jag att justera .gitlab-ci.yml i detta inlÀgg.
Visning pÄ projektets startsida för status för kvalitetskontroll av kÀllkoden
Installera tillÀgget för SonarQube
yum install -y sonarqube-qualinsight-badgesLogga in pÄ SonarQube pÄ adressen
Skapa en vanlig anvÀndare, till exempel "badges".
Logga in med den hÀr anvÀndaren i SonarQube.

GÄ till "Min anvÀndare", skapa en ny token, till exempel med namnet "read_all_repository" och klicka pÄ "Generera".

Vi ser att token har dykt upp. Den kommer bara att visas en gÄng.
Logga in som administratör.
GĂ„ till Konfiguration -> SVG Badges

Kopiera den hÀr token till fÀltet "Activity badge token" och klicka pÄ knappen spara.

GÄ till Administration -> SÀkerhet -> Behörighetsmallar -> Standardmall (och andra mallar som du har).
För anvÀndaren badges mÄste du markera "BlÀddra".
Testning.
Vi tar ett exempelprojekt. .
Importera detta projekt.
LÀgg till filen .gitlab-ci.yml i projektets rot med följande innehÄll.
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 anvÀndarnamn
PASSWORD: "admin" # sonarqube lösenord
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 kommer projektet att se ut sÄ hÀr:

LÀgg till badges i README.md och de kommer att se ut sÄ hÀr:

Koden för att visa badges ser ut sÄ hÀr:

Analys av strÀngen för att visa badges:
[](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)Var du kan hitta/kontrollera Project Key och id-projekt.
Project Key finns lÀngst ner till höger. I URL:en finns id-projektet.

Alternativ för att hÀmta metrik kan .
Alla pull requests för förbÀttringar, buggfixar .
Telegram-chat om SonarQube
Telegram-chat om DevSecOps â sĂ€ker DevOps
KĂ€lla: habr.com
