SonarQube je platforma za osiguranje kvalitete otvorenog koda koja podržava širok raspon programskih jezika i pruža izvješćivanje o metrikama kao što su dupliciranje koda, usklađenost sa standardima kodiranja, pokrivenost testom, složenost koda, potencijalne greške i još mnogo toga. SonarQube praktično vizualizira rezultate analize i omogućava vam da pratite dinamiku razvoja projekta tokom vremena.
Cilj: Pokažite programerima status kontrole kvaliteta izvornog koda u SonarQubeu.
Postoje dva rješenja:
- Pokrenite skriptu za provjeru statusa kontrole kvalitete izvornog koda u SonarQubeu. Ako kontrola kvalitete izvornog koda u SonarQube-u ne prođe, onda ne uspijeva sklopiti.
- Prikaži status kontrole kvaliteta izvornog koda na glavnoj stranici projekta.
Instaliranje SonarQubea
Da bismo instalirali sonarqube iz rpm paketa, koristit ćemo spremište
Hajde da instaliramo paket sa repozitorijumom za CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
Instaliramo sam sonarqube.
yum install -y sonarqube
Tokom instalacije, većina dodataka će biti instalirana, ali morate instalirati findbugove i pmd
yum install -y sonarqube-findbugs sonarqube-pmd
Pokrenite uslugu i dodajte je u pokretanje
systemctl start sonarqube
systemctl enable sonarqube
Ako je potrebno dosta vremena za učitavanje, dodajte generator slučajnih brojeva /dev/./urandom na kraj opcija sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom
Pokretanje skripte za provjeru statusa kontrole kvalitete izvornog koda u SonarQubeu.
Nažalost, dodatak sonar-break-maven-plugin nije ažuriran dugo vremena. Pa hajde da napišemo sopstveni scenario.
Za testiranje ćemo koristiti spremište
Uvoz u Gitlab. Dodajte datoteku .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
Datoteka .gitlab-ci.yml nije savršena. Testirano jesu li zadaci skeniranja u sonarqube-u završili statusom: "USPJEH". Do sada nije bilo drugih statusa. Čim bude drugih statusa, ispraviću .gitlab-ci.yml u ovom postu.
Prikaz statusa kontrole kvaliteta izvornog koda na glavnoj stranici projekta
Instaliranje dodatka za SonarQube
yum install -y sonarqube-qualinsight-badges
Idemo na SonarQube u
Kreirajte redovnog korisnika, na primjer "značke".
Prijavite se na SonarQube pod ovim korisnikom.
Idite na „Moj nalog“, kreirajte novi token, na primer sa imenom „read_all_repository“ i kliknite na „Generiši“.
Vidimo da se pojavio token. Pojaviće se samo 1 put.
Prijavite se kao administrator.
Idite na Konfiguracija -> SVG značke
Kopirajte ovaj token u polje "Token značke aktivnosti" i kliknite na dugme za spremanje.
Idite na Administracija -> Sigurnost -> Predlošci dozvola -> Zadani predložak (i druge šablone koje ćete imati).
Korisnik značke mora imati označeno polje za potvrdu "Pregledaj".
Testiranje.
Na primjer, uzmimo projekat
Hajde da uvezemo ovaj projekat.
Dodajte datoteku .gitlab-ci.yml u korijen projekta sa sljedećim sadržajem.
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
U SonarQube-u projekat će izgledati ovako:
Dodajte torbe na README.md i one će izgledati ovako:
Kod za prikaz bedževa izgleda ovako:
Raščlanjivanje niza prikaza bedževa:
[![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-проекта)
Gdje nabaviti/provjeriti ključ projekta i ID projekta.
Ključ projekta je u donjem desnom uglu. URL sadrži ID projekta.
Opcije za dobijanje metrike mogu biti
Svi zahtjevi za povlačenjem za poboljšanja, ispravke grešaka
Telegram chat o SonarQubeu
Telegram chat o DevSecOps - sigurnim DevOps
izvor: www.habr.com