SonarQube er en plattform for kvalitetssikring av åpen kildekode som støtter et bredt spekter av programmeringsspråk og gir rapporter om målinger som kodeduplisering, samsvar med kodestandarder, testdekning, kodekompleksitet, potensielle feil og mer. SonarQube visualiserer analyseresultater på en praktisk måte og lar deg spore prosjektutviklingsdynamikk over tid.
Oppgave: Vis utviklerne kvalitetskontrollstatusen til kildekoden deres i SonarQube.
Det finnes to løsninger:
- Kjør et skript for å sjekke statusen for kildekoden i SonarQube. Hvis SonarQubes kildekodekvalitetssikring mislykkes, må byggingen mislykkes.
- Vis status for kildekoden på prosjektets hovedside.
Installere SonarQube
For å installere sonarqube fra rpm-pakker, bruker vi repositoryet .
La oss installere repositorypakken for CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpmInstallerer selve sonarqube.
yum install -y sonarqubeUnder installasjonen vil de fleste programtilleggene bli installert, men du må installere findbugs og pmd.
yum install -y sonarqube-findbugs sonarqube-pmdStart tjenesten og legg den til i oppstarten
systemctl start sonarqube
systemctl enable sonarqubeHvis det tar lang tid å laste, legg til tilfeldighetstallgeneratoren /dev/./urandom på slutten av sonar.web.javaOpts-alternativene.
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandomKjører statuskontrollskriptet for kildekoden i SonarQube.
Dessverre har ikke sonar-break-maven-plugin-plugin blitt oppdatert på en stund. Så la oss skrive vårt eget skript.
Til testing vil vi bruke repositoriet .
Importer til Gitlab. Legg til .gitlab-ci.yml-filen:
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-filen er ikke perfekt. Jeg testet om sonarqube sjekket oppgaver fullført med statusen «VELLYKKET». Så langt har det ikke vært noen andre statuser. Når jeg har andre statuser, vil jeg oppdatere .gitlab-ci.yml i dette innlegget.
Viser statusen for kildekoden på prosjektets hovedside
Installere SonarQube-pluginen
yum install -y sonarqube-qualinsight-badgesGå til SonarQube på adressen
Opprett en vanlig bruker, for eksempel «merker».
Logg inn på SonarQube med dette brukernavnet.

Gå til «Min konto», opprett et nytt token, for eksempel kalt «read_all_repository», og klikk på «Generer».

Vi ser at et token har dukket opp. Det vil bare dukke opp én gang.
Logg inn som administrator.
Gå til Konfigurasjon -> SVG-merker

Kopier denne tokenen til feltet «Aktivitetsmerketoken» og klikk på lagre-knappen.

Gå til Administrasjon -> Sikkerhet -> Tillatelsesmaler -> Standardmal (og andre maler du måtte ha).
Merkebrukeren må ha merket av i boksen «Bla gjennom».
Testing.
La oss ta prosjektet som et eksempel .
La oss importere dette prosjektet.
Legg til .gitlab-ci.yml-filen i prosjektroten med følgende innhold.
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:
- dockerI SonarQube vil prosjektet se slik ut:

Legg pakkene til README.md, så vil de se slik ut:

Koden for å vise merker ser slik ut:

Parserer visningsstrengen for merkene:
[](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-проекта)Hvor man finner/sjekker prosjektnøkkelen og prosjekt-ID-en.
Prosjektnøkkelen er plassert nederst til høyre. URL-en inneholder prosjekt-ID-en.

Alternativer for å innhente målinger kan være .
Alle pull-forespørsler om forbedringer og feilrettinger .
Telegram-chat om SonarQube
Telegram-chat om DevSecOps – sikker DevOps
Kilde: www.habr.com
