„SonarQube“ yra atvirojo kodo kokybės užtikrinimo platforma, palaikanti platų programavimo kalbų spektrą ir teikianti ataskaitas apie tokias metrikas kaip kodo dubliavimas, kodavimo standartų laikymasis, bandymų aprėptis, kodo sudėtingumas, galimos klaidos ir kt. SonarQube patogiai vizualizuoja analizės rezultatus ir leidžia sekti projekto kūrimo dinamiką laikui bėgant.
Tikslas: rodyti kūrėjams šaltinio kodo kokybės kontrolės būseną sistemoje „SonarQube“.
Yra du sprendimai:
- Paleiskite scenarijų, kad patikrintumėte šaltinio kodo kokybės kontrolės būseną „SonarQube“. Jei „SonarQube“ šaltinio kodo kokybės kontrolė nepraeina, surinkimas nepavyks.
- Rodyti šaltinio kodo kokybės kontrolės būseną pagrindiniame projekto puslapyje.
„SonarQube“ diegimas
Norėdami įdiegti sonarqube iš rpm paketų, naudosime saugyklą
Įdiegkime paketą su „CentOS 7“ saugykla.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
Sumontuojame patį sonarqube.
yum install -y sonarqube
Diegimo metu bus įdiegta dauguma įskiepių, tačiau reikia įdiegti findbugs ir pmd
yum install -y sonarqube-findbugs sonarqube-pmd
Paleiskite paslaugą ir pridėkite ją prie paleisties
systemctl start sonarqube
systemctl enable sonarqube
Jei įkėlimas trunka ilgai, parinkčių sonar.web.javaOpts pabaigoje pridėkite atsitiktinių skaičių generatorių /dev/./urandom
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom
Vykdomas scenarijus, skirtas patikrinti šaltinio kodo kokybės kontrolės būseną „SonarQube“.
Deja, sonar-break-maven-plugin įskiepis nebuvo atnaujintas ilgą laiką. Taigi rašykime savo scenarijų.
Testavimui naudosime saugyklą
Importavimas į Gitlab. Pridėkite .gitlab-ci.yml failą:
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 failas nėra tobulas. Išbandyta, ar nuskaitymo užduotys „sonarqube“ baigiasi būsena: „SĖKMĖ“. Kol kas kitų statusų nebuvo. Kai tik bus kitų būsenų, pataisysiu .gitlab-ci.yml šiame įraše.
Pagrindiniame projekto puslapyje rodoma šaltinio kodo kokybės kontrolės būsena
„SonarQube“ papildinio diegimas
yum install -y sonarqube-qualinsight-badges
Einame į SonarQube
Sukurkite įprastą vartotoją, pavyzdžiui, „ženklelius“.
Prisijunkite prie „SonarQube“ naudodami šį vartotoją.
Eikite į „Mano paskyra“, sukurkite naują prieigos raktą, pavyzdžiui, pavadinimu „read_all_repository“ ir spustelėkite „Generuoti“.
Matome, kad atsirado žetonas. Jis pasirodys tik 1 kartą.
Prisijunkite kaip administratorius.
Eikite į Konfigūracija -> SVG ženkleliai
Nukopijuokite šį prieigos raktą į lauką „Veiklos ženklelio prieigos raktas“ ir spustelėkite išsaugojimo mygtuką.
Eikite į Administravimas -> Sauga -> Leidimų šablonai -> Numatytasis šablonas (ir kiti šablonai, kuriuos turėsite).
Ženkliukų naudotojas turi pažymėti žymimąjį laukelį „Naršyti“.
Testavimas
Pavyzdžiui, paimkime projektą
Importuosime šį projektą.
Pridėkite .gitlab-ci.yml failą prie projekto šaknies su tokiu turiniu.
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
„SonarQube“ projektas atrodys taip:
Pridėkite maišelius prie README.md ir jie atrodys taip:
Ženklelių rodymo kodas atrodo taip:
Ženklelių rodymo eilutės analizavimas:
[![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-проекта)
Kur gauti / patikrinti projekto raktą ir projekto ID.
Projekto raktas yra apačioje dešinėje. URL yra projekto ID.
Metrikos gavimo galimybės gali būti
Visos patobulinimų, klaidų taisymo užklausos
Telegramos pokalbis apie „SonarQube“.
Telegramos pokalbis apie „DevSecOps“ – saugus „DevOps“.
Šaltinis: www.habr.com