SonarQube - bu, bir çox proqramlaşdırma dilini dəstəkləyən açıq mənbə kodu keyfiyyətini davamlı olaraq təmin etməyə imkan verən platformadır. Bu platforma kodun təkrar olması, kodlaşdırma standartlarına uyğunluq, test örtüyü, kod mürəkkəbliyi, potensial səhvlər və s. kimi metriklərə dair hesabatlar təqdim edir. SonarQube, analiz nəticələrini rahatlıqla vizuallaşdırır və layihənin zamanla inkişaf dinamikasını izləməyə imkan tanıyır.
Məqsəd: İnkişaf etdiricilərə SonarQube-dakı kod keyfiyyəti vəziyyətini göstərmək.
Sahənin iki yolu var:
- SonarQube-da kod keyfiyyətinin statusunu yoxlamaq üçün skripti işə salmaq. Əgər SonarQube-dakı kod keyfiyyəti keçmirsə, kompilasiyanı uğursuz edin.
- Layihənin əsas səhifəsində kod keyfiyyəti vəziyyətini göstərmək.
SonarQube quraşdırılması
SonarQube-u rpm paketləri ilə quraşdırmaq üçün repositordan istifadə edəcəyik. .
CentOS 7 üçün repositoriyanın paketini quraşdıraq.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmArtıq SonarQube-u quraşdırırıq.
yum install -y sonarqubeQuraşdırma zamanı əksər plaginlər quraşdırılacaq, amma findbugs və pmd plaginlərini əlavə olaraq quraşdırmalıyıq.
yum install -y sonarqube-findbugs sonarqube-pmdServisi işə salırıq və avtomatik yükləməyə əlavə edirik.
systemctl start sonarqube
systemctl enable sonarqubeYüklənmə uzun çəkirsə, sonar.web.javaOpts parametrinin sonuna təsadüfi ədəd generatoru /dev/.urandom əlavə edin.
sonar.web.javaOpts=digər parametrlər -Djava.security.egd=file:/dev/urandomSonarQube-da kod keyfiyyətinin statusunu yoxlamaq üçün skripti işə salmaq.
Təəssüf ki, sonar-break-maven-plugin plaqini uzun zamandır yenilənməyib. Ona görə, öz skriptimizi yazmalıyıq.
Test üçün repositordan istifadə edəcəyik. .
Gitlab-a idxal edirik. .gitlab-ci.yml faylını əlavə edin:
dəyişənlər:
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 giriş
PASSWORD: "admin" # sonarqube şifrə
cache:
yollar:
- .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-) # Raportun saxlanıldığı URL
- echo $URL
- |
while : ;do
curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
export status=$(cat analysis.txt | jq -r '.task.status') # Status SUCCESS, CANCELED, IN_PROGRESS və ya FAILED
echo $status
if [ ${status} == "SUCCESS" ];then
echo "SONAR ANALİZİ UĞURLU";
break
fi
sleep 5
done
- curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
- export status=$(cat analysis.txt | jq -r '.task.status') # Status SUCCESS, CANCELED və ya FAILED
- export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') # Analiz ID-sini əldə et
- |
if [ "$status" == "SUCCESS" ]; then
echo -e "SONAR ANALİZİ UĞURLUDUR... NƏTİCƏLƏRİN TƏHLİLİ";
curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; # Analiz nəticəsi, məsələn, kritik, əsas və kiçik məsələlər
export result=$(cat result.txt | jq -r '.projectStatus.status');
if [ "$result" == "ERROR" ];then
echo -e "91mSONAR NƏTİCƏLƏRİ UĞURLU DEYİL";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; # kritik, əsas və kiçik pozuntuları çap edir
exit 1 # pozuntular üçün inşaatı dayandırır
else
echo -e "SONAR NƏTİCƏLƏRİ UĞURLUDUR";
echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
exit 0
fi
else
echo -e "e[91mSONAR ANALİZİ UĞURLU DEYİL e[0m";
exit 1 # Addım 2-də uğursuzluğa görə inşaatı dayandırır
fi
tags:
- docker.gitlab-ci.yml faylı mükəmməl deyil. Sonarqube-də yoxlanış tapşırıqlarının "SUCCESS" statusu ilə bitdiyini test etdim. Hələ ki, digər statuslar yoxdur. Digər statuslar olduğunda, bu yazıda .gitlab-ci.yml-ni düzəldəcəyəm.
Layihənin ana səhifəsində kod keyfiyyətini nəzarət etmə statusunun göstərilməsi
SonarQube üçün plagin quraşdırmaq
yum install -y sonarqube-qualinsight-badgesSonarQube-yə daxil olun:
Sadə istifadəçi yaradın, məsələn, "badges".
Bu istifadəçi adı ilə SonarQube-yə daxil olun.

"My account"-a daxil olun, yeni bir token yaradın, məsələn, "read_all_repository" adı ilə və "Genereate" düyməsini basın.

Tokenin yaradıldığına şahid oluruq. O yalnız bir dəfə görsənəcək.
İdarəçi kimi daxil olun.
Konfiqurasiyaya daxil olun -> SVG Badges

Bu tokeni "Activity badge token" sahəsinə köçürün və saxlama düyməsini basın.

İdarəetmə -> Təhlükəsizlik -> İcazə Şablonları -> Default template (və sizdə olan digər şablonlar) hissəsinə daxil olun.
Badges istifadəçisində "Browse" işarəsini aktivləşdirmək lazımdır.
Test etmə.
Məsələn, layihəni götürək: .
Bu layihəni idxal edin.
Layihənin kökündə aşağıdakı məzmunla .gitlab-ci.yml faylını əlavə edin.
deyiklər:
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 üçün login
PASSWORD: "admin" # sonarqube üçün parol
kesh:
yollar:
- .m2/repository
bina:
şəkil: maven:3.3.9-jdk-8
mərhələ: bina
skript:
- 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
etiketlər:
- dockerSonarQube-da layihə belə görünəcək:

README.md-yə badges əlavə edirik və onlar belə görünəcək:

Badges-in görüntü kodu belədir:

Badges-in görüntü sətirinin analizi:
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-layihe)
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-layihe)Project Key və id-layihe haradan əldə edilir/görülür.
Project Key sağ altda yerləşir. URL-də id-layihe var.

Metriqləri əldə etmək üçün seçimlər .
Bütün pull request-ləri təkmilləşdirmə, xətaları düzəltmə .
SonarQube barədə Telegram çatı
DevSecOps — təhlükəsiz DevOps barədə Telegram çatı
Mənbə: habr.com
