سونار کیوب ایک اوپن سورس کوڈ کوالٹی ایشورنس پلیٹ فارم ہے جو پروگرامنگ زبانوں کی ایک وسیع رینج کو سپورٹ کرتا ہے اور میٹرکس پر رپورٹنگ فراہم کرتا ہے جیسے کوڈ ڈپلیکیشن، کوڈنگ کے معیارات کی تعمیل، ٹیسٹ کوریج، کوڈ کی پیچیدگی، ممکنہ کیڑے وغیرہ۔ سونار کیوب آسانی سے تجزیہ کے نتائج کو دیکھتا ہے اور آپ کو وقت کے ساتھ ساتھ پروجیکٹ کی ترقی کی حرکیات کو ٹریک کرنے کی اجازت دیتا ہے۔
مقصد: ڈویلپرز کو سونار کیوب میں سورس کوڈ کوالٹی کنٹرول کی حیثیت دکھائیں۔
دو حل ہیں:
- سونار کیوب میں سورس کوڈ کوالٹی کنٹرول اسٹیٹس چیک کرنے کے لیے اسکرپٹ چلائیں۔ اگر سونار کیوب میں سورس کوڈ کا کوالٹی کنٹرول پاس نہیں ہوتا ہے، تو اسمبلی کو ناکام کر دیں۔
- مرکزی پروجیکٹ کے صفحہ پر سورس کوڈ کوالٹی کنٹرول کی حیثیت دکھائیں۔
سونار کیوب انسٹال کرنا
rpm پیکجوں سے سونارکیوب کو انسٹال کرنے کے لیے، ہم ریپوزٹری استعمال کریں گے۔
آئیے CentOS 7 کے ریپوزٹری کے ساتھ پیکیج کو انسٹال کریں۔
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
ہم خود سونارکیوب انسٹال کرتے ہیں۔
yum install -y sonarqube
انسٹالیشن کے دوران، زیادہ تر پلگ ان انسٹال ہو جائیں گے، لیکن آپ کو فائنڈ بگز اور پی ایم ڈی انسٹال کرنے کی ضرورت ہے۔
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
سونار کیوب میں سورس کوڈ کوالٹی کنٹرول کی حیثیت کو چیک کرنے کے لیے اسکرپٹ چلانا۔
بدقسمتی سے، 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 فائل کامل نہیں ہے۔ جانچ کی گئی اگر سونارکیوب میں اسکیننگ کے کام اس حیثیت کے ساتھ ختم ہوئے: "کامیابی"۔ ابھی تک کوئی دوسری حیثیت نہیں ہے۔ جیسے ہی دیگر سٹیٹس ہوں گے، میں اس پوسٹ میں .gitlab-ci.yml کو درست کر دوں گا۔
مرکزی پراجیکٹ کے صفحہ پر سورس کوڈ کوالٹی کنٹرول اسٹیٹس ڈسپلے کرنا
سونار کیوب کے لیے پلگ ان انسٹال کرنا
yum install -y sonarqube-qualinsight-badges
ہم سونار کیوب پر جاتے ہیں۔
ایک باقاعدہ صارف بنائیں، مثال کے طور پر "بیجز"۔
اس صارف کے تحت سونار کیوب میں لاگ ان کریں۔
"میرا اکاؤنٹ" پر جائیں، ایک نیا ٹوکن بنائیں، مثال کے طور پر "read_all_repository" نام کے ساتھ اور "Genereate" پر کلک کریں۔
ہم دیکھتے ہیں کہ ایک ٹوکن ظاہر ہوا ہے۔ وہ صرف 1 بار ظاہر ہوگا۔
ایڈمنسٹریٹر کے طور پر لاگ ان کریں۔
کنفیگریشن -> 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
سونار کیوب میں پروجیکٹ اس طرح نظر آئے گا:
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-проекта)
پروجیکٹ کی اور پروجیکٹ آئی ڈی کہاں سے حاصل کریں/چیک کریں۔
پروجیکٹ کلید نیچے دائیں طرف ہے۔ یو آر ایل پروجیکٹ آئی ڈی پر مشتمل ہے۔
میٹرکس حاصل کرنے کے اختیارات ہو سکتے ہیں۔
بہتری کے لیے تمام پل کی درخواستیں، بگ کی اصلاحات
سونار کیوب کے بارے میں ٹیلی گرام چیٹ
DevSecOps کے بارے میں ٹیلی گرام چیٹ - محفوظ DevOps
ماخذ: www.habr.com