Menampilkan status kontrol kualitas kode sumber di SonarQube kepada pengembang

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 https://harbottle.gitlab.io/harbottle-main.

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 https://github.com/uweplonus/spotbugs-examples.

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 http://172.26.9.115:9000/
Buat pengguna biasa, misalnya "lencana".
Masuk ke SonarQube dengan pengguna ini.

Menampilkan status kontrol kualitas kode sumber di SonarQube kepada pengembang

Masuk ke “Akun Saya”, buat token baru, misalnya dengan nama “read_all_repository” dan klik “Genereate”.

Menampilkan status kontrol kualitas kode sumber di SonarQube kepada pengembang

Kami melihat bahwa sebuah token telah muncul. Dia hanya akan muncul 1 kali.

Masuk sebagai administrator.

Buka Konfigurasi -> Lencana SVG

Menampilkan status kontrol kualitas kode sumber di SonarQube kepada pengembang

Salin token ini ke kolom "Token lencana aktivitas" dan klik tombol simpan.

Menampilkan status kontrol kualitas kode sumber di SonarQube kepada pengembang

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 https://github.com/jitpack/maven-simple.

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:

Menampilkan status kontrol kualitas kode sumber di SonarQube kepada pengembang

Tambahkan tas ke README.md dan akan terlihat seperti ini:

Menampilkan status kontrol kualitas kode sumber di SonarQube kepada pengembang

Kode tampilan lencana terlihat seperti ini:

Menampilkan status kontrol kualitas kode sumber di SonarQube kepada pengembang

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.

Menampilkan status kontrol kualitas kode sumber di SonarQube kepada pengembang

Opsi untuk mendapatkan metrik bisa jadi lihat di sini.

Semua permintaan tarik untuk perbaikan, perbaikan bug kirimkan ke repositori ini.

Obrolan Telegram tentang SonarQube https://t.me/sonarqube_ru
Obrolan Telegram tentang DevSecOps - DevOps aman https://t.me/sec_devops

Sumber: www.habr.com

Tambah komentar