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" ва "Наворид" -ро клик кунед.
Мо мебинем, ки нишона пайдо шудааст. Ӯ танҳо як маротиба пайдо мешавад.
Ҳамчун администратор ворид шавед.
Ба Конфигуратсия -> Нишонҳои 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 халтаҳо илова кунед ва онҳо чунин хоҳанд буд:
Рамзи намоиши лавҳаҳо чунин менамояд:
Таҳлили нишонаҳо сатри намоиш:
[![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-проекта)
Калиди лоиҳа ва ID-и лоиҳаро аз куҷо гирифтан/тафтиш кардан мумкин аст.
Калиди лоиҳа дар поёни рост ҷойгир аст. URL дорои ID-и лоиҳа мебошад.
Имкониятҳо барои гирифтани ченакҳо метавонанд бошанд
Ҳама дархостҳо барои такмилдиҳӣ, ислоҳи хатогиҳо
Чати Telegram дар бораи SonarQube
Чати Telegram дар бораи DevSecOps - бехатар DevOps
Манбаъ: will.com