SonarQube är en kvalitetssäkringsplattform för öppen källkod som stöder ett brett utbud av programmeringsspråk och ger rapportering om mätvärden som kodduplicering, efterlevnad av kodningsstandarder, testtäckning, kodkomplexitet, potentiella buggar och mer. SonarQube visualiserar bekvämt analysresultat och låter dig spåra dynamiken i projektutveckling över tid.
Mål: Visa utvecklare status för kvalitetskontroll av källkod i SonarQube.
Det finns två lösningar:
- Kör ett skript för att kontrollera källkodens kvalitetskontrollstatus i SonarQube. Om kvalitetskontrollen av källkoden i SonarQube inte går igenom, misslyckas monteringen.
- Visa källkodens kvalitetskontrollstatus på huvudprojektsidan.
Installerar SonarQube
För att installera sonarqube från rpm-paket kommer vi att använda förvaret
Låt oss installera paketet med arkivet för CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
Vi installerar själva sonarqube.
yum install -y sonarqube
Under installationen kommer de flesta plugins att installeras, men du måste installera findbugs och pmd
yum install -y sonarqube-findbugs sonarqube-pmd
Starta tjänsten och lägg till den vid start
systemctl start sonarqube
systemctl enable sonarqube
Om det tar lång tid att ladda, lägg sedan till en slumptalsgenerator /dev/./urandom i slutet av alternativen sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom
Köra ett skript för att kontrollera statusen för källkodens kvalitetskontroll i SonarQube.
Tyvärr har plugin-programmet sonar-break-maven-plugin inte uppdaterats på länge. Så låt oss skriva vårt eget manus.
För testning kommer vi att använda förvaret
Importerar till Gitlab. Lägg till filen .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:
- docker
.gitlab-ci.yml-filen är inte perfekt. Testade om skanningsuppgifter i sonarqube slutade med statusen: "SUCCESS". Hittills har det inte funnits några andra statusar. Så fort det finns andra statusar kommer jag att rätta till .gitlab-ci.yml i detta inlägg.
Visar källkodens kvalitetskontrollstatus på huvudprojektsidan
Installerar plugin för SonarQube
yum install -y sonarqube-qualinsight-badges
Vi går till SonarQube kl
Skapa en vanlig användare, till exempel "badges".
Logga in på SonarQube under denna användare.
Gå till "Mitt konto", skapa en ny token, till exempel med namnet "read_all_repository" och klicka på "Genereate".
Vi ser att en token har dykt upp. Han kommer bara att dyka upp 1 gång.
Logga in som administratör.
Gå till Konfiguration -> SVG-märken
Kopiera denna token till fältet "Aktivitetsmärke" och klicka på knappen Spara.
Gå till Administration -> Säkerhet -> Behörighetsmallar -> Standardmall (och andra mallar som du kommer att ha).
Märkenanvändaren måste ha kryssrutan "Bläddra" markerad.
Testning.
Låt oss till exempel ta projektet
Låt oss importera det här projektet.
Lägg till filen .gitlab-ci.yml till projektroten 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
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:
- docker
I SonarQube kommer projektet att se ut så här:
Lägg till påsar till README.md så ser de ut så här:
Märkens visningskod ser ut så här:
Analysera märkets visningssträng:
[![Quality Gate](http://172.26.9.115:9000/api/badges/gate?key=com.github.jitpack:maven-simple)](http://172.26.9.115:9000/dashboard?id=com.github.jitpack%3Amaven-simple)
[![Название](http://172.26.9.115:9000/api/badges/gate?key=Project Key)](http://172.26.9.115:9000/dashboard?id=id-проекта)
[![Coverage](http://172.26.9.115:9000/api/badges/measure?key=com.github.jitpack:maven-simple&metric=coverage)](http://172.26.9.115:9000/dashboard?id=com.github.jitpack%3Amaven-simple)
[![Название Метрики](http://172.26.9.115:9000/api/badges/measure?key=Project Key&metric=МЕТРИКА)](http://172.26.9.115:9000/dashboard?id=id-проекта)
Var kan man få tag på/kontrollera projektnyckel och projekt-id.
Projektnyckeln finns längst ner till höger. URL:n innehåller projekt-id.
Alternativ för att få mätvärden kan vara
Alla pull-förfrågningar om förbättringar, buggfixar
Telegramchatt om SonarQube
Telegramchatt om DevSecOps - säker DevOps
Källa: will.com