SonarQube është një platformë për sigurimin e cilësisë së kodit me burim të hapur që mbështet një gamë të gjerë gjuhësh programimi dhe ofron raportime mbi metrika të tilla si dyfishimi i kodit, pajtueshmëria me standardet e kodimit, mbulimi i testit, kompleksiteti i kodit, gabimet e mundshme dhe më shumë. SonarQube vizualizon me lehtësi rezultatet e analizës dhe ju lejon të gjurmoni dinamikën e zhvillimit të projektit me kalimin e kohës.
Objektivi: Tregoju zhvilluesve statusin e kontrollit të cilësisë së kodit burimor në SonarQube.
Ka dy zgjidhje:
- Ekzekutoni një skript për të kontrolluar statusin e kontrollit të cilësisë së kodit burimor në SonarQube. Nëse kontrolli i cilësisë së kodit burimor në SonarQube nuk kalon, atëherë dështoni montimin.
- Shfaq statusin e kontrollit të cilësisë së kodit burimor në faqen kryesore të projektit.
Instalimi i SonarQube
Për të instaluar sonarqube nga paketat rpm, ne do të përdorim depon
Le të instalojmë paketën me depon për CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
Ne instalojmë vetë sonarqube.
yum install -y sonarqube
Gjatë instalimit, shumica e shtojcave do të instalohen, por ju duhet të instaloni findbugs dhe pmd
yum install -y sonarqube-findbugs sonarqube-pmd
Nisni shërbimin dhe shtojeni atë në fillim
systemctl start sonarqube
systemctl enable sonarqube
Nëse kërkon shumë kohë për t'u ngarkuar, atëherë shtoni një gjenerues numrash të rastësishëm /dev/./urandom në fund të opsioneve sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom
Ekzekutimi i një skripti për të kontrolluar statusin e kontrollit të cilësisë së kodit burimor në SonarQube.
Fatkeqësisht, shtojca sonar-break-maven-plugin nuk është përditësuar për një kohë të gjatë. Pra, le të shkruajmë skenarin tonë.
Për testim ne do të përdorim depon
Importimi në Gitlab. Shtoni skedarin .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
Skedari .gitlab-ci.yml nuk është i përsosur. Testuar nëse detyrat e skanimit në sonarqube përfunduan me statusin: "SUKSES". Deri më tani nuk ka pasur statuse të tjera. Sapo të ketë statuse të tjera, do të korrigjoj .gitlab-ci.yml në këtë postim.
Shfaqja e statusit të kontrollit të cilësisë së kodit burimor në faqen kryesore të projektit
Instalimi i shtojcës për SonarQube
yum install -y sonarqube-qualinsight-badges
Shkojmë në SonarQube në
Krijo një përdorues të rregullt, për shembull "distinktivë".
Hyni në SonarQube nën këtë përdorues.
Shkoni te "Llogaria ime", krijoni një token të ri, për shembull me emrin "read_all_repository" dhe klikoni "Genereate".
Ne shohim që është shfaqur një shenjë. Ai do të shfaqet vetëm 1 herë.
Identifikohu si administrator.
Shkoni te Konfigurimi -> Shenjat SVG
Kopjojeni këtë shenjë në fushën "Shenja e distinktivit të aktivitetit" dhe klikoni butonin ruaj.
Shkoni te Administrata -> Siguria -> Modelet e lejeve -> Modeli i paracaktuar (dhe shabllonet e tjerë që do të keni).
Përdoruesi i distinktivëve duhet të ketë të zgjedhur kutinë "Shfleto".
Testimi.
Për shembull, le të marrim projektin
Le të importojmë këtë projekt.
Shtoni skedarin .gitlab-ci.yml në rrënjën e projektit me përmbajtjen e mëposhtme.
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
Në SonarQube projekti do të duket kështu:
Shtoni çanta në README.md dhe ato do të duken kështu:
Kodi i shfaqjes së shënjave duket si ky:
Analiza e vargut të shfaqjes së distinktivëve:
[![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-проекта)
Ku të merrni/kontrolloni çelësin e projektit dhe ID-në e projektit.
Çelësi i projektit është poshtë djathtas. URL-ja përmban ID-në e projektit.
Opsionet për marrjen e metrikës mund të jenë
Të gjitha kërkesat tërheqëse për përmirësime, rregullime të gabimeve
Biseda në telegram rreth SonarQube
Biseda në telegram rreth DevSecOps - DevOps të sigurta
Burimi: www.habr.com