SonarQube adalah platform jaminan kualitas kode sumber terbuka yang mendukung berbagai bahasa pemrograman dan menyediakan pelaporan metrik seperti duplikasi kode, kepatuhan standar pengkodean, cakupan pengujian, kompleksitas kode, potensi bug, dan banyak lagi. SonarQube dengan mudah memvisualisasikan hasil analisis dan memungkinkan Anda melacak dinamika pengembangan proyek dari waktu ke waktu.
Tujuan: Menunjukkan kepada pengembang status kontrol kualitas kode sumber di SonarQube.
Ada dua solusi:
- Jalankan skrip untuk memeriksa status kontrol kualitas kode sumber di SonarQube. Jika kontrol kualitas kode sumber di SonarQube tidak lolos, maka perakitan gagal.
- Tampilkan status kontrol kualitas kode sumber di halaman proyek utama.
Menginstal SonarQube
Untuk menginstal sonarqube dari paket rpm, kita akan menggunakan repositori
Mari kita instal paket dengan repositori untuk CentOS 7.
yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm
Kami menginstal sonarqube itu sendiri.
yum install -y sonarqube
Selama instalasi, sebagian besar plugin akan diinstal, tetapi Anda perlu menginstal findbugs dan pmd
yum install -y sonarqube-findbugs sonarqube-pmd
Luncurkan layanan dan tambahkan ke startup
systemctl start sonarqube
systemctl enable sonarqube
Jika memerlukan waktu lama untuk memuat, tambahkan generator nomor acak /dev/./urandom di akhir opsi sonar.web.javaOpts
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom
Menjalankan skrip untuk memeriksa status kontrol kualitas kode sumber di SonarQube.
Sayangnya plugin sonar-break-maven-plugin sudah lama tidak diupdate. Jadi mari kita menulis naskah kita sendiri.
Untuk pengujian kami akan menggunakan repositori
Mengimpor ke Gitlab. Tambahkan file .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
File .gitlab-ci.yml tidak sempurna. Diuji jika tugas pemindaian di sonarqube diakhiri dengan status: "SUCCESS". Sejauh ini belum ada status lain. Begitu ada status lain, saya akan memperbaiki .gitlab-ci.yml pada postingan ini.
Menampilkan status kendali mutu kode sumber pada halaman proyek utama
Menginstal plugin untuk SonarQube
yum install -y sonarqube-qualinsight-badges
Kami pergi ke SonarQube di
Buat pengguna biasa, misalnya "lencana".
Masuk ke SonarQube dengan pengguna ini.
Masuk ke “Akun Saya”, buat token baru, misalnya dengan nama “read_all_repository” dan klik “Genereate”.
Kami melihat bahwa sebuah token telah muncul. Dia hanya akan muncul 1 kali.
Masuk sebagai administrator.
Buka Konfigurasi -> Lencana SVG
Salin token ini ke kolom "Token lencana aktivitas" dan klik tombol simpan.
Buka Administrasi -> Keamanan -> Templat Izin -> Templat default (dan templat lain yang akan Anda miliki).
Pengguna lencana harus mencentang kotak "Jelajahi".
Pengujian.
Sebagai contoh, mari kita ambil proyek ini
Ayo impor proyek ini.
Tambahkan file .gitlab-ci.yml ke root proyek dengan konten berikut.
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
Di SonarQube proyeknya akan terlihat seperti ini:
Tambahkan tas ke README.md dan akan terlihat seperti ini:
Kode tampilan lencana terlihat seperti ini:
Mengurai string tampilan lencana:
[![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-проекта)
Di mana mendapatkan/memeriksa Kunci Proyek dan id proyek.
Kunci Proyek ada di kanan bawah. URL berisi id proyek.
Opsi untuk mendapatkan metrik bisa jadi
Semua permintaan tarik untuk perbaikan, perbaikan bug
Obrolan Telegram tentang SonarQube
Obrolan Telegram tentang DevSecOps - DevOps aman
Sumber: www.habr.com