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 با وضعیت "موفقیت" به پایان می رسد. تاکنون هیچ وضعیت دیگری وجود نداشته است. به محض اینکه وضعیت های دیگر وجود داشته باشد در این پست .gitlab-ci.yml را تصحیح می کنم.
نمایش وضعیت کنترل کیفیت کد منبع در صفحه اصلی پروژه
نصب افزونه برای SonarQube
yum install -y sonarqube-qualinsight-badges
ما به SonarQube در
یک کاربر معمولی، به عنوان مثال "نشان" ایجاد کنید.
با این کاربر وارد SonarQube شوید.
به "حساب من" بروید، یک توکن جدید، به عنوان مثال با نام "read_all_repository" ایجاد کنید و روی "Genereate" کلیک کنید.
می بینیم که یک نشانه ظاهر شده است. او فقط 1 بار ظاهر می شود.
به عنوان مدیر وارد شوید.
به Configuration -> SVG Badges بروید
این نشانه را در قسمت «نشانه نشان فعالیت» کپی کنید و روی دکمه ذخیره کلیک کنید.
به Administration -> Security -> Permission Templates -> Default Template (و سایر الگوهایی که خواهید داشت) بروید.
کاربر نشان ها باید چک باکس "مرور" را علامت زده باشد.
آزمایش
مثلاً پروژه را در نظر بگیریم
بیایید این پروژه را وارد کنیم.
فایل 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 اضافه کنید و به شکل زیر در می آیند:
کد نمایش نشان ها به شکل زیر است:
تجزیه رشته نمایش نشان ها:
[![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-проекта)
از کجا می توان کلید پروژه و شناسه پروژه را دریافت/بررسی کرد.
Project Key در پایین سمت راست قرار دارد. URL حاوی شناسه پروژه است.
گزینه هایی برای به دست آوردن معیارها می تواند باشد
همه درخواست های کششی برای بهبود، رفع اشکال
چت تلگرام در مورد SonarQube
چت تلگرام در مورد DevSecOps - DevOps امن
منبع: www.habr.com