SonarQube is in platfoarm foar kwaliteitsfersekering foar iepen boarne koade dat in breed oanbod fan programmeartalen stipet en rapportaazje leveret oer metriken lykas koadeduplikaasje, neilibjen fan kodearringnormen, testdekking, koadekompleksiteit, potensjele bugs, en mear. SonarQube visualisearret analyseresultaten maklik en lit jo de dynamyk fan projektûntwikkeling oer de tiid folgje.
Doel: Toan ûntwikkelders de status fan boarnekoade kwaliteitskontrôle yn SonarQube.
D'r binne twa oplossingen:
- In skript útfiere om de kwaliteitskontrôlestatus fan boarnekoade yn SonarQube te kontrolearjen. As de kwaliteitskontrôle fan 'e boarnekoade yn SonarQube net trochgiet, mislearje dan de gearkomste.
- Lit de kwaliteitskontrôlestatus fan boarnekoade sjen op 'e haadprojektside.
SonarQube ynstalleare
Om sonarqube te ynstallearjen fan rpm-pakketten, sille wy it repository brûke .
Litte wy it pakket ynstallearje mei it repository foar CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmWy ynstallearje sonarqube sels.
yum install -y sonarqubeTidens de ynstallaasje wurde de measte plugins ynstalleare, mar jo moatte findbugs en pmd ynstallearje
yum install -y sonarqube-findbugs sonarqube-pmdStarte de tsjinst en foegje it ta oan it opstarten
systemctl start sonarqube
systemctl enable sonarqubeAs it lang duorret om te laden, foegje dan in willekeurige nûmergenerator /dev/./urandom ta oan 'e ein fan' e opsjes sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandomIn skript útfiere om de status fan boarnekoade kwaliteitskontrôle te kontrolearjen yn SonarQube.
Spitigernôch is de plugin sonar-break-maven-plugin in lange tiid net bywurke. Dus litte wy ús eigen skript skriuwe.
Foar testen sille wy it repository brûke .
Ymportearje yn Gitlab. Foegje it .gitlab-ci.yml-bestân ta:
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:
- dockerDe .gitlab-ci.yml triem is net perfekt. Teste as skennen taken yn sonarqube einige mei de status: "SUKSES". Oant no ta binne der gjin oare statusen. Sa gau as der binne oare statusen, Ik sil korrigearje .gitlab-ci.yml yn dizze post.
De boarnekoade kwaliteitskontrôlestatus werjaan op 'e haadprojektside
Ynstallearje de plugin foar SonarQube
yum install -y sonarqube-qualinsight-badgesWy geane nei SonarQube at
Meitsje in gewoane brûker, bygelyks "badges".
Oanmelde by SonarQube ûnder dizze brûker.

Gean nei "Myn akkount", meitsje in nij token, bygelyks mei de namme "read_all_repository" en klik op "Genereate".

Wy sjogge dat der in token is ferskynd. Hy sil mar 1 kear ferskine.
Oanmelde as behearder.
Gean nei Konfiguraasje -> SVG Badges

Kopiearje dit token yn it fjild "Activity badge token" en klikje op de knop opslaan.

Gean nei Administration -> Feiligens -> Tastimmingssjabloanen -> Standert sjabloan (en oare sjabloanen dy't jo hawwe).
De badges-brûker moat it karfakje "Blêdzje" ynskeakele hawwe.
Testen.
Litte wy bygelyks it projekt nimme .
Litte wy dit projekt ymportearje.
Foegje de .gitlab-ci.yml-bestân ta oan de projektroot mei de folgjende ynhâld.
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:
- dockerYn SonarQube sil it projekt der sa útsjen:

Foegje tassen ta oan README.md en se sille der sa útsjen:

De werjeftekoade fan de badges sjocht der sa út:

It parsearjen fan de tekenrige werjaan fan de badges:
[](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-проекта)Wêr te krijen / kontrolearje Project Key en projekt id.
Project Key is rjochts ûnder. De URL befettet de projekt-id.

Opsjes foar it krijen fan metriken kinne wêze .
Alle pull-oanfragen foar ferbetteringen, bug fixes .
Telegram petear oer SonarQube
Telegram petear oer DevSecOps - feilige DevOps
Boarne: www.habr.com
