SonarQube ir atvÄrtÄ pirmkoda kvalitÄtes nodroÅ”inÄÅ”anas platforma, kas atbalsta plaÅ”u programmÄÅ”anas valodu klÄstu un nodroÅ”ina pÄrskatus par tÄdiem rÄdÄ«tÄjiem kÄ koda dublÄÅ”ana, atbilstÄ«ba kodÄÅ”anas standartiem, testa pÄrklÄjums, koda sarežģītÄ«ba, iespÄjamÄs kļūdas un daudz ko citu. SonarQube Ärti vizualizÄ analÄ«zes rezultÄtus un ļauj izsekot projekta attÄ«stÄ«bas dinamikai laika gaitÄ.
MÄrÄ·is: parÄdÄ«t izstrÄdÄtÄjiem SonarQube pirmkoda kvalitÄtes kontroles statusu.
Ir divi risinÄjumi:
- Palaidiet skriptu, lai pÄrbaudÄ«tu avota koda kvalitÄtes kontroles statusu SonarQube. Ja SonarQube pirmkoda kvalitÄtes kontrole neiztur, montÄža neizdodas.
- RÄdÄ«t pirmkoda kvalitÄtes kontroles statusu galvenajÄ projekta lapÄ.
SonarQube instalÄÅ”ana
Lai instalÄtu sonarqube no rpm pakotnÄm, mÄs izmantosim repozitoriju .
InstalÄsim pakotni ar CentOS 7 repozitoriju.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmMÄs uzstÄdÄm paÅ”u sonarqube.
yum install -y sonarqubeInstalÄÅ”anas laikÄ tiks instalÄta lielÄkÄ daļa spraudÅu, taÄu jums ir jÄinstalÄ findbugs un pmd
yum install -y sonarqube-findbugs sonarqube-pmdPalaidiet pakalpojumu un pievienojiet to startÄÅ”anai
systemctl start sonarqube
systemctl enable sonarqubeJa ielÄde prasa ilgu laiku, opciju beigÄs pievienojiet nejauÅ”o skaitļu Ä£eneratoru /dev/./urandom.
sonar.web.javaOpts=Š“ŃŃŠ³ŠøŠµ ŠæŠ°ŃŠ°Š¼ŠµŃŃŃ -Djava.security.egd=file:/dev/urandomSkripta palaiÅ”ana, lai pÄrbaudÄ«tu SonarQube pirmkoda kvalitÄtes kontroles statusu.
DiemžÄl spraudnis sonar-break-maven-plugin ilgu laiku nav atjauninÄts. TÄpÄc rakstÄ«sim paÅ”i savu scenÄriju.
TestÄÅ”anai izmantosim repozitoriju .
ImportÄÅ”ana Gitlab. Pievienojiet failu .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 fails nav ideÄls. PÄrbaudÄ«ts, vai skenÄÅ”anas uzdevumi sonarqube beidzÄs ar statusu: "SUCCESS". LÄ«dz Å”im citu statusu nav bijis. TiklÄ«dz bÅ«s citi statusi, es Å”ajÄ ziÅÄ izlaboÅ”u .gitlab-ci.yml.
Avota koda kvalitÄtes kontroles statusa parÄdīŔana galvenajÄ projekta lapÄ
SonarQube spraudÅa instalÄÅ”ana
yum install -y sonarqube-qualinsight-badgesMÄs dodamies uz SonarQube plkst
Izveidojiet parastu lietotÄju, piemÄram, "nozÄ«mÄ«tes".
Piesakieties SonarQube ar Å”o lietotÄju.

Dodieties uz āMans kontsā, izveidojiet jaunu marÄ·ieri, piemÄram, ar nosaukumu ālasÄ«t_visu_repozitorijuā un noklikŔķiniet uz āIzveidotā.

MÄs redzam, ka ir parÄdÄ«jies žetons. ViÅÅ” parÄdÄ«sies tikai 1 reizi.
Piesakieties kÄ administrators.
Atveriet sadaļu KonfigurÄcija -> SVG emblÄmas

KopÄjiet Å”o marÄ·ieri laukÄ DarbÄ«bas emblÄmas marÄ·ieris un noklikŔķiniet uz saglabÄÅ”anas pogas.

Dodieties uz AdministrÄÅ”ana -> DroŔība -> Atļauju veidnes -> NoklusÄjuma veidne (un citas veidnes, kas jums bÅ«s).
EmblÄmu lietotÄjam ir jÄatzÄ«mÄ izvÄles rÅ«tiÅa PÄrlÅ«kot.
PÄrbaude.
PiemÄram, Åemsim projektu .
ImportÄsim Å”o projektu.
Pievienojiet .gitlab-ci.yml failu projekta saknei ar Å”Ädu saturu.
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:
- dockerProgrammÄ SonarQube projekts izskatÄ«sies Å”Ädi:

Pievienojiet somas vietnei README.md, un tÄs izskatÄ«sies Å”Ädi:

Žetonu parÄdīŔanas kods izskatÄs Å”Ädi:

EmblÄmu displeja virknes parsÄÅ”ana:
[](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-ŠæŃŠ¾ŠµŠŗŃа)Kur iegÅ«t/pÄrbaudÄ«t projekta atslÄgu un projekta ID.
Projekta atslÄga atrodas apakÅ”ÄjÄ labajÄ stÅ«rÄ«. URL satur projekta ID.

Metrikas iegūŔanas iespÄjas var bÅ«t .
Visi izvilkŔanas pieprasījumi veikt uzlabojumus, kļūdu labojumus .
Telegrammas tÄrzÄÅ”ana par SonarQube
Telegrammas tÄrzÄÅ”ana par DevSecOps ā droÅ”s DevOps
Avots: www.habr.com
