SonarQube është një platformë e hapur për të siguruar kontrollin e vazhdueshëm të cilësisë së kodit burimor, që mbështet një gamë të gjerë gjuhësh programimi dhe lejon raportimin mbi metrika të tilla si dyfishimi i kodit, përputhshmëria me standardet e kodimit, mbulimi me teste, kompleksiteti i kodit, gabimet potenciale, etj. SonarQube vizualizon lehtësisht rezultatet e analizës dhe lejon ndjekjen e dinamikës së zhvillimit të projektit në kohë.
Detyra: Të tregohet zhvilluesve statusi i kontrollit të cilësisë së kodit burimor në SonarQube.
Ekzistojnë dy mënyra për ta zgjidhur:
- Të ekzekutohet një skenar për kontrollin e statusit të cilësisë së kodit burimor në SonarQube. Nëse kontrolli i cilësisë së kodit burimor në SonarQube dështon, atëherë ndalohet ndërtimi.
- Të tregojë në faqen kryesore të projektit statusin e 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.rpmTë instalojmë vetë SonarQube.
yum install -y sonarqubeGjatë instalimit do të instalohen shumica e plugjineve, por ne duhet të instalojmë përveç kësaj findbugs dhe pmd.
yum install -y sonarqube-findbugs sonarqube-pmdTë aktivizojmë shërbimin dhe ta shtojmë në ngarkimin automatik
systemctl start sonarqube
systemctl enable sonarqubeNëse ngarkohet gjatë, shtoni në fund të opsioneve sonar.web.javaOpts gjeneratorin e numrave të rastit /dev/. /urandom.
sonar.web.javaOpts=parametra të tjerë -Djava.security.egd=file:/dev/urandomEkzekutimi i skenarit për kontrollin e statusit të cilësisë së kodit burimor në SonarQube.
Fatkeqësisht, plugjini sonar-break-maven-plugin nuk është përditësuar për një kohë të gjatë. Prandaj, do të shkruajmë skenarin tonë.
Për testimin do të përdorim repositorin .
Imporojmë 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" # sonarqube login
PASSWORD: "admin" # sonarqube password
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ë ideale. U testua nëse detyrat e verifikimit në sonarqube përfundojnë me statusin: "SUCCESS". Deri tani nuk ka pasur statusesh të tjera. Kur të ketë statuset e tjera, do ta rregulloj .gitlab-ci.yml në këtë post.
Shfaqja në faqen kryesore të projektit të statusit të kontrollit të cilësisë së kodit burimor
Instalojmë plugin për SonarQube
yum install -y sonarqube-qualinsight-badgesHyni në SonarQube në adresën
Krijojmë 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 klikoni "Genereate".

Shihni që tokeni u shfaq. Ai do të shfaqet vetëm 1 herë.
Hyni si administrator.
Shkoni në Configuration -> SVG Badges

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

Hyni në Administration -> Security -> Permission Templates -> Default template (dhe të tjerat që keni).
Përdoruesit badges i nevojitet të vendoset shenja "Browse".
Testimi.
Për shembull, le të marrim projektin .
Importojmë këtë projekt.
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ë bages në README.md dhe ato do të duken kështu:

Kodi i shfaqjes së badges duket kështu:

Analiza e vargut të shfaqjes së badges:
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-projekti)
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-projekti)Ku të gjejmë/kontrollojmë Projektin Key dhe id-projektit.
Projektin Key është poshtë në të djathtë. Në URL është id-projektit.

Opsionet për marrjen e metrikeve mund .
Të gjitha kërkesat pull për përmirësime, rregullime gabimesh .
Grupi në Telegram për SonarQube
Grupi nĂ« Telegram pĂ«r DevSecOps â DevOps tĂ« sigurt
Burimi: habr.com
