SonarQube geniş proqramlaşdırma dillərini dəstəkləyən və kodun təkrarlanması, kodlaşdırma standartlarına uyğunluğu, testin əhatə dairəsi, kodun mürəkkəbliyi, potensial səhvlər və s. kimi göstəricilər üzrə hesabat təqdim edən açıq mənbə kodu keyfiyyətinin təminatı platformasıdır. SonarQube təhlil nəticələrini rahat şəkildə vizuallaşdırır və zamanla layihənin inkişaf dinamikasını izləməyə imkan verir.
Məqsəd: Tərtibatçılara SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu göstərin.
İki həll yolu var:
- SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu yoxlamaq üçün skript işlədin. SonarQube-də mənbə kodunun keyfiyyətinə nəzarət keçmirsə, montaj uğursuz olur.
- Əsas layihə səhifəsində mənbə kodu keyfiyyətinə nəzarət statusunu göstərin.
SonarQube quraşdırılır
Sonarqube-ni rpm paketlərindən quraşdırmaq üçün biz depodan istifadə edəcəyik
Gəlin paketi CentOS 7 üçün depo ilə quraşdıraq.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
Biz sonarqube-nin özünü quraşdırırıq.
yum install -y sonarqube
Quraşdırma zamanı əksər plaginlər quraşdırılacaq, lakin findbugs və pmd quraşdırmalı olacaqsınız
yum install -y sonarqube-findbugs sonarqube-pmd
Xidməti işə salın və onu başlanğıca əlavə edin
systemctl start sonarqube
systemctl enable sonarqube
Yükləmək üçün çox vaxt lazımdırsa, sonar.web.javaOpts seçimlərinin sonuna təsadüfi ədəd generatoru /dev/./urandom əlavə edin.
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom
SonarQube-də mənbə kodu keyfiyyətinə nəzarətin vəziyyətini yoxlamaq üçün skriptin işlədilməsi.
Təəssüf ki, sonar-break-maven-plugin plagini uzun müddətdir ki, yenilənməyib. Beləliklə, öz ssenarimizi yazaq.
Test üçün biz depodan istifadə edəcəyik
Gitlab-a idxal. .gitlab-ci.yml faylını əlavə edin:
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 faylı mükəmməl deyil. Sonarqube-də skanlama tapşırıqlarının "UĞUR" statusu ilə başa çatdığı yoxlanılıb. Hələlik başqa statuslar olmayıb. Başqa statuslar olan kimi bu postda .gitlab-ci.yml-i düzəldəcəm.
Əsas layihə səhifəsində mənbə kodu keyfiyyətinə nəzarət statusunun göstərilməsi
SonarQube üçün plaqinin quraşdırılması
yum install -y sonarqube-qualinsight-badges
SonarQube-ə gedirik
Daimi istifadəçi yaradın, məsələn, "nişanlar".
Bu istifadəçinin altında SonarQube-ə daxil olun.
“Hesabım” bölməsinə keçin, məsələn “read_all_repository” adı ilə yeni nişan yaradın və “Yarat” düyməsini basın.
Bir işarənin meydana gəldiyini görürük. O, cəmi 1 dəfə meydana çıxacaq.
Administrator kimi daxil olun.
Konfiqurasiya -> SVG Nişanları bölməsinə keçin
Bu nişanı "Fəaliyyət nişanı nişanı" sahəsinə kopyalayın və yadda saxla düyməsini basın.
İdarəetmə -> Təhlükəsizlik -> İcazə Şablonları -> Defolt şablona (və sizdə olacaq digər şablonlara) gedin.
Nişanlar istifadəçisi "Gözdən keçir" qutusunu işarələməlidir.
Test.
Məsələn, layihəni götürək
Gəlin bu layihəni idxal edək.
Aşağıdakı məzmunla .gitlab-ci.yml faylını layihə kökünə əlavə edin.
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-də layihə belə görünəcək:
Çantaları README.md-ə əlavə edin və onlar belə görünəcək:
Nişanların ekran kodu belə görünür:
Nişanların ekran sətirinin təhlili:
[![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-проекта)
Layihə Açarı və layihə identifikatorunu haradan əldə etmək/yoxlamaq olar.
Layihə Açarı sağ altdadır. URL layihə identifikatorunu ehtiva edir.
Metrikləri əldə etmək üçün seçimlər ola bilər
Təkmilləşdirmələr, səhv düzəlişləri üçün bütün çəkmə sorğuları
SonarQube haqqında Telegram söhbəti
DevSecOps haqqında Telegram söhbəti - təhlükəsiz DevOps
Mənbə: www.habr.com