SonarQube është një platformë e hapur për sigurimin e kontrollit të vazhdueshëm të cilësisë së kodit burimor, e cila mbështet një numër të madh gjuhësh programuese dhe lejon marrjen e raporteve për metrikat si dublimi i kodit, përputhshmëria me standardet e kodimit, mbulimi me teste, kompleksiteti i kodit, gabimet potenciale etj. SonarQube vizualizon me lehtësi rezultatet e analizës dhe lejon ndjekjen e dinamikës së zhvillimit të projektit në kalim të kohës.
Detyra: Të tregojmë zhvilluesve statusin e kontrollit të cilësisë së kodit burimor në SonarQube.
Ka dy mënyra për të zgjidhur:
- Të ekzekutojmë skriptin për kontrollin e statusit të kontrollit të cilësisë së kodit burimor në SonarQube. Nëse kontrolli i cilësisë së kodit burimor nuk kalon në SonarQube, atëherë të dështojmë ndërtimin.
- Të tregojmë në faqen kryesore të projektit statusin e kontrollit të cilësisë së kodit burimor.
Instalimi i SonarQube
Për të instaluar SonarQube nga paketat rpm, do të përdorim repositorin .
Do të instalojmë paketën me repositorin për CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmPo instalojmë vetë SonarQube.
yum install -y sonarqubeGjatë instalimit do të instalohen shumica e plugjineve, por duhet të instalojmë findbugs dhe pmd
yum install -y sonarqube-findbugs sonarqube-pmdPo nisim shërbimin dhe do ta shtojmë në ngarkesën automatike
systemctl start sonarqube
systemctl enable sonarqubeNëse ngarkohet ngadalë, atëherë shtoni në fund të opsioneve sonar.web.javaOpts gjeneratorin e numrave të rastësishëm /dev/./urandom
sonar.web.javaOpts=parametra të tjerë -Djava.security.egd=file:/dev/urandomEkzekutimi i skriptit për kontrollin e statusit të kontrollit të cilësisë së kodit burimor në SonarQube.
Fatkeqësisht, plugjini sonar-break-maven-plugin nuk është përditësuar prej një kohe të gjatë. Prandaj do të shkruajmë skriptin tonë.
Për testim do të përdorim repositorin .
Do të importojmë në Gitlab. Shtojmë 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" # login sonarqube
PASSWORD: "admin" # password 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:
- dockerSkema .gitlab-ci.yml nuk është e përsosur. U testua nëse detyrat e kontrollit në sonarqube përfundonin me statusin: "SUCCESS". Deri më tani, nuk ka patur statuse të tjera. Pasi të ketë statuse të tjera, do ta përditësoj .gitlab-ci.yml në këtë post.
Shfaqja në faqen kryesore të projektit e statusit të kontrollit të cilësisë së kodit burimor
Instaloni plugin për SonarQube
yum install -y sonarqube-qualinsight-badgesHyni në SonarQube në adresën
Krijoni një përdorues të zakonshëm, për shembull "badges".
Hyni me këtë përdorues në SonarQube.

Hyni në "My account", krijoni një token të ri, për shembull me emrin "read_all_repository" dhe shtypni "Generate".

Shikoni se tokeni është shfaqur. Ai do të shfaqet vetëm një herë.
Hyni si administrator.
Shkoni në Configuration -> SVG Badges

Kopjojmë këtë token në fushën "Activity badge token" dhe klikojmë butonin save.

Hyni në Administration -> Security -> Permission Templates -> Default template (dhe template të tjera që mund të keni).
Këtu përdoruesit badges duhet të kenë shenjën "Browse" të aktivizuar.
Testimi.
Për shembull, le të marrim projektin .
ImportojmĂ« kĂ«tĂ« ĐżŃĐŸĐ”ĐșŃ.
Shtojmë 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" # login sonarqube
PASSWORD: "admin" # fjalëkalimi 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:
- dockerNë SonarQube projekti do të duket kështu:

Shtojmë badges në README.md dhe ato do të duken kështu:

Kodi i shfaqjes për badges duket kështu:

Analizë e vargut të shfaqjes për badges:
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-projektit)
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-projektit)Ku të gjejmë/kontrollojmë Project Key dhe id-projektin.
Project Key ndodhet poshtë në të djathtë. Në URL ndodhet id-projektin.

Opsionet për marrjen e metrikave mund .
Të gjitha kërkesat për përmirësime, rregullime të gabimeve .
Biseda në Telegram për SonarQube.
Biseda nĂ« Telegram pĂ«r DevSecOps â DevOps i sigurt.
Burimi: habr.com
