Ang SonarQube usa ka open source code quality assurance platform nga nagsuporta sa usa ka halapad nga programming language ug naghatag ug report sa metrics sama sa code duplication, coding standards compliance, test coverage, code complexity, potential bugs, ug uban pa. Ang SonarQube dali nga nagtan-aw sa mga resulta sa pagtuki ug gitugotan ka nga masubay ang dinamika sa pag-uswag sa proyekto sa paglabay sa panahon.
Tumong: Ipakita sa mga developer ang kahimtang sa pagkontrol sa kalidad sa source code sa SonarQube.
Adunay duha ka solusyon:
- Pagdalag script para masusi ang source code quality control status sa SonarQube. Kung ang pagkontrol sa kalidad sa source code sa SonarQube dili moagi, unya mapakyas ang asembliya.
- Ipakita ang kahimtang sa pagkontrol sa kalidad sa source code sa panguna nga panid sa proyekto.
Pag-instalar sa SonarQube
Aron ma-install ang sonarqube gikan sa mga pakete sa rpm, among gamiton ang repositoryo
Atong i-install ang package nga adunay repository alang sa CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
Gi-install namon ang sonarqube mismo.
yum install -y sonarqube
Atol sa pag-instalar, kadaghanan sa mga plugins i-install, apan kinahanglan nimo nga i-install ang findbugs ug pmd
yum install -y sonarqube-findbugs sonarqube-pmd
Ilunsad ang serbisyo ug idugang kini sa pagsugod
systemctl start sonarqube
systemctl enable sonarqube
Kon kini nagkinahanglan og taas nga panahon sa pagkarga, unya pagdugang ug random number generator /dev/./urandom ngadto sa katapusan sa mga opsyon sonar.web.javaOpts
sonar.web.javaOpts=Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ -Djava.security.egd=file:/dev/urandom
Pagpadagan sa usa ka script aron masusi ang kahimtang sa pagkontrol sa kalidad sa source code sa SonarQube.
Ikasubo, ang sonar-break-maven-plugin plugin wala pa ma-update sa dugay nga panahon. Busa magsulat kita sa atong kaugalingong script.
Alang sa pagsulay among gamiton ang repositoryo
Pag-import sa Gitlab. Idugang 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 dili perpekto. Gisulayan kung ang mga buluhaton sa pag-scan sa sonarqube natapos sa status: "SUCCESS". Sa pagkakaron wala pay laing mga status. Sa diha nga adunay uban nga mga status, akong itul-id ang .gitlab-ci.yml niini nga post.
Pagpakita sa source code quality control status sa main page nga proyekto
Pag-instalar sa plugin para sa SonarQube
yum install -y sonarqube-qualinsight-badges
Moadto mi sa SonarQube sa
Paghimo usa ka regular nga tiggamit, pananglitan "mga badge".
Log in sa SonarQube ubos niini nga user.
Adto sa "Akong account", paghimo og bag-ong token, pananglitan sa ngalan nga "read_all_repository" ug i-klik ang "Genereate".
Atong makita nga usa ka timaan ang nagpakita. 1 time ra siya mupakita.
Login isip tigdumala.
Adto sa Configuration -> SVG Badges
Kopyaha kini nga token ngadto sa "Activity badge token" field ug i-klik ang save button.
Adto sa Administration -> Security -> Permission Templates -> Default template (ug uban pang templates nga imong mabatonan).
Ang badge user kinahanglan nga adunay checkbox nga "Browse".
Pagsulay.
Pananglitan, atong kuhaon ang proyekto
Atong i-import kini nga proyekto.
Idugang ang .gitlab-ci.yml file sa gamut sa proyekto nga adunay mosunod nga sulod.
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 ingon niini:
Idugang ang mga bag sa README.md ug kini tan-awon:
Ang mga badge nga gipakita nga code ingon niini:
Pag-parse sa mga badge nga gipakita nga 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-ΠΏΡΠΎΠ΅ΠΊΡΠ°)
Asa makuha/susiha ang Project Key ug project id.
Ang Project Key naa sa tuo sa ubos. Ang URL naglangkob sa project id.
Ang mga kapilian alang sa pagkuha sa mga sukatan mahimong
Ang tanan nga mga hangyo sa pagbitad alang sa pagpaayo, pag-ayo sa bug
Telegram chat bahin sa SonarQube
Telegram chat bahin sa DevSecOps - luwas nga DevOps
Source: www.habr.com