Ang SonarQube ay isang open source code quality assurance platform na sumusuporta sa malawak na hanay ng mga programming language at nagbibigay ng pag-uulat sa mga sukatan gaya ng pagdoble ng code, pagsunod sa mga pamantayan ng coding, saklaw ng pagsubok, pagiging kumplikado ng code, mga potensyal na bug, at higit pa. Maginhawang nakikita ng SonarQube ang mga resulta ng pagsusuri at nagbibigay-daan sa iyong subaybayan ang dinamika ng pagbuo ng proyekto sa paglipas ng panahon.
Layunin: Ipakita sa mga developer ang katayuan ng kontrol sa kalidad ng source code sa SonarQube.
Mayroong dalawang solusyon:
- Magpatakbo ng script upang suriin ang katayuan ng kontrol sa kalidad ng source code sa SonarQube. Kung ang kontrol sa kalidad ng source code sa SonarQube ay hindi pumasa, pagkatapos ay mabigo ang pagpupulong.
- Ipakita ang katayuan ng kontrol sa kalidad ng source code sa pangunahing pahina ng proyekto.
Pag-install ng SonarQube
Upang mag-install ng sonarqube mula sa mga rpm package, gagamitin namin ang repositoryo .
I-install natin ang package na may repository para sa CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmNag-install kami ng sonarqube mismo.
yum install -y sonarqubeSa panahon ng pag-install, karamihan sa mga plugin ay mai-install, ngunit kailangan mong mag-install ng findbugs at pmd
yum install -y sonarqube-findbugs sonarqube-pmdIlunsad ang serbisyo at idagdag ito sa startup
systemctl start sonarqube
systemctl enable sonarqubeKung matagal mag-load, magdagdag ng random number generator /dev/./urandom sa dulo ng mga opsyon sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandomPagpapatakbo ng isang script upang suriin ang katayuan ng kontrol sa kalidad ng source code sa SonarQube.
Sa kasamaang palad, ang sonar-break-maven-plugin plugin ay hindi na-update nang mahabang panahon. Kaya't magsulat tayo ng sarili nating script.
Para sa pagsubok, gagamitin namin ang repositoryo .
Ini-import sa Gitlab. Idagdag ang .gitlab-ci.yml file:
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:
- dockerAng .gitlab-ci.yml file ay hindi perpekto. Sinubukan kung ang mga gawain sa pag-scan sa sonarqube ay natapos na may katayuang: "TAGUMPAY". Sa ngayon ay wala pang ibang status. Sa sandaling may iba pang mga status, itatama ko ang .gitlab-ci.yml sa post na ito.
Pagpapakita ng katayuan ng kontrol sa kalidad ng source code sa pangunahing pahina ng proyekto
Pag-install ng plugin para sa SonarQube
yum install -y sonarqube-qualinsight-badgesPumunta kami sa SonarQube sa
Gumawa ng isang regular na user, halimbawa "mga badge".
Mag-log in sa SonarQube sa ilalim ng user na ito.

Pumunta sa “Aking account”, lumikha ng bagong token, halimbawa na may pangalang “read_all_repository” at i-click ang “Genereate”.

Nakita namin na may lumitaw na token. 1 time lang siya lalabas.
Mag-login bilang administrator.
Pumunta sa Configuration -> SVG Badges

Kopyahin ang token na ito sa field na "Token ng badge ng aktibidad" at i-click ang button na i-save.

Pumunta sa Administrasyon -> Seguridad -> Mga Template ng Pahintulot -> Default na template (at iba pang mga template na mayroon ka).
Ang mga badge na gumagamit ay dapat na may check na "Browse" na checkbox.
Pagsubok.
Halimbawa, kunin natin ang proyekto .
I-import natin ang proyektong ito.
Idagdag ang .gitlab-ci.yml file sa root ng proyekto na may sumusunod na nilalaman.
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:
- dockerSa SonarQube ang proyekto ay magiging ganito:

Magdagdag ng mga bag sa README.md at magiging ganito ang mga ito:

Ang mga badge display code ay ganito ang hitsura:

Pag-parse ng mga badge ng display string:
[](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-проекта)Saan kukuha/suriin ang Project Key at project id.
Ang Project Key ay nasa kanang ibaba. Ang URL ay naglalaman ng project id.

Ang mga opsyon para sa pagkuha ng mga sukatan ay maaaring .
Lahat ng pull request para sa mga pagpapabuti, pag-aayos ng bug .
Telegram chat tungkol sa SonarQube
Telegram chat tungkol sa DevSecOps - secure na DevOps
Pinagmulan: www.habr.com
