SonarQube este o platformă de asigurare a calității codului sursă deschisă, care acceptă o gamă largă de limbaje de programare și oferă raportare asupra unor metrici precum duplicarea codului, conformitatea cu standardele de codare, acoperirea testelor, complexitatea codului, erori potențiale și multe altele. SonarQube vizualizează în mod convenabil rezultatele analizei și vă permite să urmăriți dinamica dezvoltării proiectelor în timp.
Obiectiv: Arătați dezvoltatorilor starea controlului calității codului sursă în SonarQube.
Există două soluții:
- Rulați un script pentru a verifica starea controlului calității codului sursă în SonarQube. Dacă controlul de calitate al codului sursă în SonarQube nu trece, atunci eșuează asamblarea.
- Afișați starea controlului calității codului sursă pe pagina principală a proiectului.
Instalarea SonarQube
Pentru a instala sonarqube din pachetele rpm, vom folosi depozitul
Să instalăm pachetul cu depozitul pentru CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
Instalăm sonarqube în sine.
yum install -y sonarqube
În timpul instalării, majoritatea pluginurilor vor fi instalate, dar trebuie să instalați findbugs și pmd
yum install -y sonarqube-findbugs sonarqube-pmd
Lansați serviciul și adăugați-l la pornire
systemctl start sonarqube
systemctl enable sonarqube
Dacă încărcarea durează mult, adăugați un generator de numere aleatorii /dev/./urandom la sfârșitul opțiunilor sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom
Rularea unui script pentru a verifica starea controlului calității codului sursă în SonarQube.
Din păcate, pluginul sonar-break-maven-plugin nu a fost actualizat de mult. Deci, să scriem propriul nostru scenariu.
Pentru testare vom folosi depozitul
Import în Gitlab. Adăugați fișierul .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
Fișierul .gitlab-ci.yml nu este perfect. Testat dacă sarcinile de scanare în sonarqube s-au încheiat cu starea: „SUCCES”. Până acum nu au existat alte stări. De îndată ce există alte stări, voi corecta .gitlab-ci.yml în această postare.
Afișarea stării controlului calității codului sursă pe pagina principală a proiectului
Instalarea pluginului pentru SonarQube
yum install -y sonarqube-qualinsight-badges
Mergem la SonarQube la
Creați un utilizator obișnuit, de exemplu „insigne”.
Conectați-vă la SonarQube sub acest utilizator.
Accesați „Contul meu”, creați un nou token, de exemplu cu numele „read_all_repository” și faceți clic pe „Generați”.
Vedem că a apărut un simbol. Va apărea o singură dată.
Conectați-vă ca administrator.
Accesați Configurare -> Insigne SVG
Copiați acest simbol în câmpul „Insignă de activitate” și faceți clic pe butonul de salvare.
Accesați Administrare -> Securitate -> Șabloane de permisiuni -> Șablon implicit (și alte șabloane pe care le veți avea).
Utilizatorul de insigne trebuie să aibă bifată caseta „Răsfoiți”.
Testare.
De exemplu, să luăm proiectul
Să importăm acest proiect.
Adăugați fișierul .gitlab-ci.yml la rădăcina proiectului cu următorul conținut.
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
În SonarQube, proiectul va arăta astfel:
Adăugați bagaje pe README.md și vor arăta astfel:
Codul de afișare a insignelor arată astfel:
Analizând șirul de afișare a insignelor:
[![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-проекта)
De unde să obțineți/verificați Cheia proiectului și ID-ul proiectului.
Cheia de proiect este în dreapta jos. URL-ul conține ID-ul proiectului.
Opțiunile pentru obținerea de valori pot fi
Toate solicitările de extragere pentru îmbunătățiri, remedieri de erori
Chat Telegram despre SonarQube
Chat Telegram despre DevSecOps - DevOps securizat
Sursa: www.habr.com