SonarQube er en open source-kode kvalitetssikringsplatform, der understøtter en bred vifte af programmeringssprog og giver rapportering om metrics såsom kodeduplikering, overholdelse af kodningsstandarder, testdækning, kodekompleksitet, potentielle fejl og mere. SonarQube visualiserer bekvemt analyseresultater og giver dig mulighed for at spore dynamikken i projektudvikling over tid.
Formål: Vis udviklere status for kildekodekvalitetskontrol i SonarQube.
Der er to løsninger:
- Kør et script for at kontrollere kildekodens kvalitetskontrolstatus i SonarQube. Hvis kvalitetskontrollen af kildekoden i SonarQube ikke består, så mislykkes samlingen.
- Vis kildekodekvalitetskontrolstatus på hovedprojektsiden.
Installerer SonarQube
For at installere sonarqube fra rpm-pakker, vil vi bruge repository
Lad os installere pakken med lageret til CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
Vi installerer selve sonarqube.
yum install -y sonarqube
Under installationen vil de fleste plugins blive installeret, men du skal installere findbugs og pmd
yum install -y sonarqube-findbugs sonarqube-pmd
Start tjenesten og føj den til opstart
systemctl start sonarqube
systemctl enable sonarqube
Hvis det tager lang tid at indlæse, så tilføj en tilfældig talgenerator /dev/./urandom til slutningen af mulighederne sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom
Kørsel af et script for at kontrollere status for kildekodekvalitetskontrol i SonarQube.
Desværre er sonar-break-maven-plugin plugin ikke blevet opdateret i lang tid. Så lad os skrive vores eget manuskript.
Til test vil vi bruge depotet
Importerer til Gitlab. Tilføj 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 er ikke perfekt. Testet om scanningsopgaver i sonarqube endte med status: "SUCCES". Indtil videre har der ikke været andre statusser. Så snart der er andre statusser, vil jeg rette .gitlab-ci.yml i dette indlæg.
Visning af kildekodens kvalitetskontrolstatus på hovedprojektsiden
Installation af plugin til SonarQube
yum install -y sonarqube-qualinsight-badges
Vi tager til SonarQube kl
Opret en almindelig bruger, for eksempel "badges".
Log ind på SonarQube under denne bruger.
Gå til "Min konto", opret et nyt token, for eksempel med navnet "read_all_repository", og klik på "Generer".
Vi ser, at der er dukket et token op. Han dukker kun op 1 gang.
Log ind som administrator.
Gå til Konfiguration -> SVG Badges
Kopier dette token ind i feltet "Aktivitetsmærketoken", og klik på knappen Gem.
Gå til Administration -> Sikkerhed -> Tilladelsesskabeloner -> Standardskabelon (og andre skabeloner, du vil have).
Badges-brugeren skal have afkrydsningsfeltet "Gennemse" markeret.
Test.
Lad os for eksempel tage projektet
Lad os importere dette projekt.
Tilføj filen .gitlab-ci.yml til projektroden med følgende indhold.
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 vil projektet se sådan ud:
Tilføj poser til README.md, og de vil se sådan ud:
Badges-visningskoden ser sådan ud:
Parsing af badges-visningsstrengen:
[![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-проекта)
Hvor kan man få/tjekke projektnøgle og projekt-id.
Projektnøgle er nederst til højre. URL'en indeholder projekt-id'et.
Muligheder for at opnå metrics kan være
Alle pull-anmodninger om forbedringer, fejlrettelser
Telegramchat om SonarQube
Telegramchat om DevSecOps - sikker DevOps
Kilde: www.habr.com