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.rpm
Nag-install kami ng sonarqube mismo.
yum install -y sonarqube
Sa 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-pmd
Ilunsad ang serbisyo at idagdag ito sa startup
systemctl start sonarqube
systemctl enable sonarqube
Kung 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/urandom
Pagpapatakbo 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:
- docker
Ang .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-badges
Pumunta 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:
- docker
Sa 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:
[![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-ΠΏΡΠΎΠ΅ΠΊΡΠ°)
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