Memaparkan status kawalan kualiti kod sumber dalam SonarQube kepada pembangun

SonarQube ialah platform jaminan kualiti kod sumber terbuka yang menyokong pelbagai bahasa pengaturcaraan dan menyediakan pelaporan tentang metrik seperti pertindihan kod, pematuhan piawaian pengekodan, liputan ujian, kerumitan kod, potensi pepijat dan banyak lagi. SonarQube memvisualisasikan hasil analisis dengan mudah dan membolehkan anda menjejaki dinamik pembangunan projek dari semasa ke semasa.

Objektif: Tunjukkan kepada pembangun status kawalan kualiti kod sumber dalam SonarQube.

Terdapat dua penyelesaian:

  • Jalankan skrip untuk menyemak status kawalan kualiti kod sumber dalam SonarQube. Jika kawalan kualiti kod sumber dalam SonarQube tidak lulus, maka gagalkan pemasangan.
  • Tunjukkan status kawalan kualiti kod sumber pada halaman projek utama.

Memasang SonarQube

Untuk memasang sonarqube daripada pakej rpm, kami akan menggunakan repositori https://harbottle.gitlab.io/harbottle-main.

Mari pasang pakej dengan repositori untuk CentOS 7.

yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm

Kami memasang sonarqube sendiri.

yum install -y sonarqube

Semasa pemasangan, kebanyakan pemalam akan dipasang, tetapi anda perlu memasang findbugs dan pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Lancarkan perkhidmatan dan tambahkannya pada permulaan

systemctl start sonarqube
systemctl enable sonarqube

Jika ia mengambil masa yang lama untuk dimuatkan, kemudian tambahkan penjana nombor rawak /dev/./urandom ke penghujung pilihan sonar.web.javaOpts

sonar.web.javaOpts=Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -Djava.security.egd=file:/dev/urandom

Menjalankan skrip untuk menyemak status kawalan kualiti kod sumber dalam SonarQube.

Malangnya, pemalam sonar-break-maven-plugin telah lama tidak dikemas kini. Jadi mari kita menulis skrip kita sendiri.

Untuk ujian kami akan menggunakan repositori https://github.com/uweplonus/spotbugs-examples.

Mengimport ke Gitlab. Tambahkan fail .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

Fail .gitlab-ci.yml tidak sempurna. Diuji jika tugas mengimbas dalam sonarqube berakhir dengan status: "BERJAYA". Setakat ini belum ada status lain. Sebaik sahaja terdapat status lain, saya akan membetulkan .gitlab-ci.yml dalam siaran ini.

Memaparkan status kawalan kualiti kod sumber pada halaman projek utama

Memasang pemalam untuk SonarQube

yum install -y sonarqube-qualinsight-badges

Kami pergi ke SonarQube di http://172.26.9.115:9000/
Buat pengguna biasa, contohnya "lencana".
Log masuk ke SonarQube di bawah pengguna ini.

Memaparkan status kawalan kualiti kod sumber dalam SonarQube kepada pembangun

Pergi ke "Akaun saya", buat token baharu, contohnya dengan nama "read_all_repository" dan klik "Jana".

Memaparkan status kawalan kualiti kod sumber dalam SonarQube kepada pembangun

Kami melihat bahawa token telah muncul. Dia akan muncul hanya 1 kali.

Log masuk sebagai pentadbir.

Pergi ke Konfigurasi -> Lencana SVG

Memaparkan status kawalan kualiti kod sumber dalam SonarQube kepada pembangun

Salin token ini ke dalam medan "Token lencana aktiviti" dan klik butang simpan.

Memaparkan status kawalan kualiti kod sumber dalam SonarQube kepada pembangun

Pergi ke Pentadbiran -> Keselamatan -> Templat Kebenaran -> Templat lalai (dan templat lain yang akan anda miliki).

Pengguna lencana mesti mempunyai kotak semak "Semak imbas" ditandakan.

Ujian.

Sebagai contoh, mari kita ambil projek itu https://github.com/jitpack/maven-simple.

Mari kita import projek ini.

Tambahkan fail .gitlab-ci.yml pada akar projek dengan kandungan 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

Dalam SonarQube projek akan kelihatan seperti ini:

Memaparkan status kawalan kualiti kod sumber dalam SonarQube kepada pembangun

Tambahkan beg pada README.md dan ia akan kelihatan seperti ini:

Memaparkan status kawalan kualiti kod sumber dalam SonarQube kepada pembangun

Kod paparan lencana kelihatan seperti ini:

Memaparkan status kawalan kualiti kod sumber dalam SonarQube kepada pembangun

Menghuraikan rentetan paparan 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 untuk mendapatkan/menyemak Kunci Projek dan id projek.

Project Key berada di bahagian bawah sebelah kanan. URL mengandungi id projek.

Memaparkan status kawalan kualiti kod sumber dalam SonarQube kepada pembangun

Pilihan untuk mendapatkan metrik boleh lihat di sini.

Semua permintaan tarik untuk penambahbaikan, pembetulan pepijat hantar ke repositori ini.

Sembang telegram tentang SonarQube https://t.me/sonarqube_ru
Sembang telegram tentang DevSecOps - DevOps selamat https://t.me/sec_devops

Sumber: www.habr.com

Tambah komen