SonarQube бол олон төрлийн програмчлалын хэлийг дэмждэг нээлттэй эх кодын чанарын баталгааны платформ бөгөөд кодын давхардал, кодчиллын стандартын нийцэл, тестийн хамрах хүрээ, кодын нарийн төвөгтэй байдал, болзошгүй алдаа гэх мэт хэмжигдэхүүнүүдийг тайлагнадаг. SonarQube нь шинжилгээний үр дүнг хялбархан дүрслэн харуулж, төслийн хөгжлийн динамикийг цаг хугацааны явцад хянах боломжийг танд олгоно.
Зорилго: Хөгжүүлэгчид SonarQube дээрх эх кодын чанарын хяналтын статусыг харуулах.
Хоёр шийдэл байна:
- SonarQube дээрх эх кодын чанарын хяналтын статусыг шалгахын тулд скрипт ажиллуулна уу. Хэрэв SonarQube дахь эх кодын чанарын хяналт амжилтгүй болвол угсралт амжилтгүй болно.
- Төслийн үндсэн хуудсан дээр эх кодын чанарын хяналтын статусыг харуул.
SonarQube суулгаж байна
RPM багцуудаас sonarqube-г суулгахын тулд бид репозиторыг ашиглах болно .
CentOS 7-д зориулсан репозиторын багцыг суулгацгаая.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmБид sonarqube-г өөрөө суулгадаг.
yum install -y sonarqubeСуулгах явцад ихэнх залгаасуудыг суулгах боловч findbugs болон pmd програмуудыг суулгах хэрэгтэй
yum install -y sonarqube-findbugs sonarqube-pmdҮйлчилгээг эхлүүлээд эхлүүлэхэд нэмнэ үү
systemctl start sonarqube
systemctl enable sonarqubeХэрэв ачаалахад удаан хугацаа шаардагдах бол sonar.web.javaOpts сонголтуудын төгсгөлд санамсаргүй тоо үүсгэгч /dev/./urandom нэмнэ үү.
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandomSonarQube дээрх эх кодын чанарын хяналтын статусыг шалгах скриптийг ажиллуулж байна.
Харамсалтай нь, sonar-break-maven-plugin залгаас удаан хугацаанд шинэчлэгдээгүй байна. Ингээд өөрсдөө зохиолоо бичье.
Туршилтын хувьд бид репозиторыг ашиглах болно .
Gitlab руу импортлох. .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.gitlab-ci.yml файл нь төгс биш юм. Sonarqube дээрх сканнердах ажлууд "АМЖИЛТ" гэсэн статустай дууссан эсэхийг шалгасан. Одоогоор өөр статус гараагүй байна. Бусад статусууд гарч ирэнгүүт би энэ нийтлэл дэх .gitlab-ci.yml-г засах болно.
Төслийн үндсэн хуудсан дээр эх кодын чанарын хяналтын статусыг харуулж байна
SonarQube-д зориулсан залгаасыг суулгаж байна
yum install -y sonarqube-qualinsight-badgesБид SonarQube руу явдаг
Байнгын хэрэглэгч үүсгэх, жишээлбэл "тэмдэг тэмдэг".
Энэ хэрэглэгчийн доор SonarQube руу нэвтэрнэ үү.

"Миний данс" руу очоод шинэ токен үүсгээд, жишээ нь "read_all_repository" нэртэй "Үйлдвэрлэх" дээр дарна уу.

Токен гарч ирснийг бид харж байна. Тэр зөвхөн 1 удаа гарч ирнэ.
Администратороор нэвтэрнэ үү.
Тохиргоо -> SVG Badges руу очно уу

Энэ тэмдгийг "Үйл ажиллагааны тэмдэгийн тэмдэг" талбарт хуулаад хадгалах товчийг дарна уу.

Захиргаа -> Аюулгүй байдал -> Зөвшөөрлийн загварууд -> Өгөгдмөл загвар (болон танд байгаа бусад загварууд) руу очно уу.
Тэмдгийн хэрэглэгч "Үзэх" нүдийг тэмдэглэсэн байх ёстой.
Туршилт хийх.
Жишээлбэл, төслийг авч үзье .
Энэ төслийг оруулж ирье.
Дараах агуулга бүхий .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.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:
- dockerSonarQube дээр төсөл дараах байдлаар харагдах болно.

README.md-д уут нэмбэл дараах байдлаар харагдах болно.

Тэмдгийн дэлгэцийн код дараах байдалтай байна.

Тэмдгийн дэлгэцийн мөрийг задлан шинжилж байна:
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpack%3Amaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-проекта)
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpack%3Amaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-проекта)Төслийн түлхүүр болон төслийн ID-г хаанаас авах/шалгах.
Төслийн түлхүүр баруун доод талд байна. URL нь төслийн ID-г агуулна.

Хэмжилтийг олж авах сонголтууд байж болно .
Сайжруулах, алдаа засах бүх татах хүсэлт .
SonarQube-ийн тухай Telegram чат
DevSecOps-ийн тухай Telegram чат - аюулгүй DevOps
Эх сурвалж: www.habr.com
