SonarQube عبارة عن منصة مفتوحة المصدر لضمان جودة التعليمات البرمجية التي تدعم مجموعة واسعة من لغات البرمجة وتوفر تقارير عن المقاييس مثل تكرار التعليمات البرمجية والامتثال لمعايير الترميز وتغطية الاختبار وتعقيد التعليمات البرمجية والأخطاء المحتملة والمزيد. يقوم SonarQube بتصور نتائج التحليل بسهولة ويسمح لك بتتبع ديناميكيات تطوير المشروع مع مرور الوقت.
الهدف: إظهار حالة مراقبة جودة التعليمات البرمجية المصدر للمطورين في SonarQube.
هناك حلان:
- قم بتشغيل برنامج نصي للتحقق من حالة مراقبة جودة التعليمات البرمجية المصدر في SonarQube. إذا لم يتم اجتياز مراقبة جودة الكود المصدري في SonarQube، فسيفشل التجميع.
- إظهار حالة مراقبة جودة التعليمات البرمجية المصدر على صفحة المشروع الرئيسية.
تثبيت SonarQube
لتثبيت sonarqube من حزم rpm، سنستخدم المستودع .
لنقم بتثبيت الحزمة مع مستودع 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إذا استغرق التحميل وقتًا طويلاً، فقم بإضافة مولد الأرقام العشوائية /dev/./urandom إلى نهاية الخيارات sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandomتشغيل برنامج نصي للتحقق من حالة مراقبة جودة التعليمات البرمجية المصدر في SonarQube.
لسوء الحظ، لم يتم تحديث البرنامج المساعد 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 بالحالة: "SUCCESS". حتى الآن لم تكن هناك حالات أخرى. بمجرد وجود حالات أخرى، سأقوم بتصحيح .gitlab-ci.yml في هذا المنشور.
عرض حالة مراقبة جودة الكود المصدري على صفحة المشروع الرئيسية
تثبيت البرنامج المساعد لـ SonarQube
yum install -y sonarqube-qualinsight-badgesنذهب إلى SonarQube في
إنشاء مستخدم عادي، على سبيل المثال "الشارات".
قم بتسجيل الدخول إلى SonarQube ضمن هذا المستخدم.

انتقل إلى "حسابي"، وقم بإنشاء رمز مميز جديد، على سبيل المثال باسم "read_all_repository" وانقر فوق "إنشاء".

نرى أن الرمز المميز قد ظهر. سوف يظهر مرة واحدة فقط .
تسجيل الدخول كمسؤول.
انتقل إلى التكوين -> شارات SVG

انسخ هذا الرمز المميز في حقل "رمز شارة النشاط" وانقر على زر الحفظ.

انتقل إلى الإدارة -> الأمان -> قوالب الأذونات -> القالب الافتراضي (والقوالب الأخرى التي ستكون لديك).
يجب أن يكون مستخدم الشارات محددًا في مربع الاختيار "تصفح".
الاختبار.
على سبيل المثال، لنأخذ المشروع .
دعونا استيراد هذا المشروع.
أضف ملف .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:
- dockerفي SonarQube سيبدو المشروع كما يلي:

أضف الحقائب إلى 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-проекта)مكان الحصول على/التحقق من مفتاح المشروع ومعرف المشروع.
مفتاح المشروع موجود في أسفل اليمين. يحتوي عنوان URL على معرف المشروع.

يمكن أن تكون خيارات الحصول على المقاييس .
جميع طلبات السحب للتحسينات وإصلاحات الأخطاء .
دردشة برقية حول SonarQube
دردشة Telegram حول DevSecOps - DevOps الآمنة
المصدر: www.habr.com
