SonarQube on avoimen lähdekoodin laadunvarmistusalusta, joka tukee monenlaisia ohjelmointikieliä ja tarjoaa raportteja mittareista, kuten koodin monistamisesta, koodausstandardien noudattamisesta, testin kattavuudesta, koodin monimutkaisuudesta, mahdollisista virheistä ja muista. SonarQube visualisoi analyysitulokset kätevästi ja antaa sinun seurata projektin kehityksen dynamiikkaa ajan mittaan.
Tavoite: Näytä kehittäjille lähdekoodin laadunvalvonnan tila SonarQubessa.
Ratkaisuja on kaksi:
- Suorita komentosarja tarkistaaksesi lähdekoodin laadunvalvonnan tilan SonarQubessa. Jos lähdekoodin laadunvalvonta SonarQubessa ei läpäise, kokoonpano epäonnistuu.
- Näytä lähdekoodin laadunvalvonnan tila projektin pääsivulla.
SonarQuben asentaminen
Käytämme arkistoa sonarquben asentamiseen rpm-paketeista .
Asennamme paketti CentOS 7:n arkiston kanssa.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmAsennamme itse sonarquben.
yum install -y sonarqubeAsennuksen aikana useimmat laajennukset asennetaan, mutta sinun on asennettava findbugs ja pmd
yum install -y sonarqube-findbugs sonarqube-pmdKäynnistä palvelu ja lisää se käynnistykseen
systemctl start sonarqube
systemctl enable sonarqubeJos lataaminen kestää kauan, lisää satunnaislukugeneraattori /dev/./urandom vaihtoehtojen sonar.web.javaOpts loppuun
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandomKomentosarjan suorittaminen lähdekoodin laadunvalvonnan tilan tarkistamiseksi SonarQubessa.
Valitettavasti sonar-break-maven-plugin-laajennusta ei ole päivitetty pitkään aikaan. Joten kirjoitetaan oma käsikirjoituksemme.
Testaamiseen käytämme arkistoa .
Tuodaan Gitlabiin. Lisää .gitlab-ci.yml-tiedosto:
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-tiedosto ei ole täydellinen. Testattu, päättyivätkö sonarquben skannaustehtävät tilaan: "SUCCESS". Toistaiseksi muita tiloja ei ole ollut. Heti kun on muita tiloja, korjaan .gitlab-ci.yml tässä viestissä.
Lähdekoodin laadunvalvonnan tilan näyttäminen projektin pääsivulla
SonarQube-laajennuksen asentaminen
yum install -y sonarqube-qualinsight-badgesMenemme SonarQubeen klo
Luo tavallinen käyttäjä, esimerkiksi "merkit".
Kirjaudu SonarQubeen tällä käyttäjällä.

Siirry kohtaan "Oma tili", luo uusi tunnus, esimerkiksi nimellä "read_all_repository" ja napsauta "Luo".

Näemme, että merkki on ilmestynyt. Hän ilmestyy vain 1 kerran.
Kirjaudu sisään järjestelmänvalvojana.
Siirry kohtaan Määritykset -> SVG-merkit

Kopioi tämä tunnus "Activity badge token" -kenttään ja napsauta Tallenna-painiketta.

Siirry kohtaan Hallinta -> Suojaus -> Lupamallit -> Oletusmalli (ja muut mallit, joita sinulla on).
Merkkien käyttäjän Selaa-valintaruutu on oltava valittuna.
Testaus.
Otetaan esimerkiksi projekti .
Tuodaan tämä projekti.
Lisää .gitlab-ci.yml-tiedosto projektin juureen seuraavalla sisällöllä.
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:
- dockerSonarQubessa projekti näyttää tältä:

Lisää pussit README.md:hen ja ne näyttävät tältä:

Merkkien näyttökoodi näyttää tältä:

Merkkien näyttömerkkijonon jäsentäminen:
[](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-проекта)Mistä saada/tarkistaa Project Key ja projektitunnus.
Project Key on oikeassa alakulmassa. URL-osoite sisältää projektin tunnuksen.

Vaihtoehtoja mittareiden saamiseksi voivat olla .
Kaikki vetopyynnöt parannuksista, virheenkorjauksista .
Telegram-keskustelu SonarQubesta
Telegram-keskustelu DevSecOpsista - suojattu DevOps
Lähde: will.com
