Menampilkan kepada pengembang status kontrol kualitas kode sumber di SonarQube

SonarQube adalah platform terbuka untuk kontrol kualitas berkelanjutan dari kode sumber, mendukung sejumlah besar bahasa pemrograman dan memungkinkan Anda untuk menerima laporan tentang metrik seperti duplikasi kode, kepatuhan dengan standar pengkodean, cakupan uji, kompleksitas kode, potensi kesalahan, dll. SonarQube dengan mudah memvisualisasikan hasil analisis dan memungkinkan Anda untuk melacak dinamika proyek dari waktu ke waktu.


Tugas: Tampilkan 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 gagal, maka perakitan gagal.
  • Tampilkan status kontrol kualitas kode sumber di halaman utama proyek.

Instal SonarQube


Untuk menginstal sonarqube dari paket-paket rpm, kami akan menggunakan https://harbottle.gitlab.io/harbottle-main repository .


Instal paket repositori untuk CentOS 7.


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

Instal sonarqube sendiri.


yum install -y sonarqube

Sebagian besar plugin akan diinstal selama instalasi, tetapi findbugs dan pmd perlu diinstal


yum install -y sonarqube-findbugs sonarqube-pmd

Kami memulai layanan dan menambahkannya ke pengisian otomatis


systemctl start sonarqube
systemctl enable sonarqube

Jika perlu waktu lama untuk memuat, tambahkan penghasil angka acak /dev/./urandom ke 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.


, sonar-break-maven-plugin . .


https://github.com/uweplonus/spotbugs-examples.


Gitlab. .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 FAILED\e[0m";
          exit 1 #breaks the build for failure in Step2
      fi
  tags:
    - docker

.gitlab-ci.yml . sonarqube : "SUCCESS". . , .gitlab-ci.yml .



SonarQube


yum install -y sonarqube-qualinsight-badges

SonarQube http://172.26.9.115:9000/
, "badges".
SonarQube.



"My account", , "read_all_repository" "Genereate".



. 1 .


.


Configuration -> SVG Badges



"Activity badge token" save.



Administration -> Security -> Permission Templates -> Default template ( , ).


badges "Browse".


.


https://github.com/jitpack/maven-simple.


.


.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.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

SonarQube :



bages README.md e :



Kode tampilan lencana terlihat seperti ini:



Mem-parsing 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 / periksa Project Key dan id proyek.


Kunci Proyek terletak di kanan bawah. URL berisi id proyek.



Opsi untuk mendapatkan metrik dapat ditemukan di sini .


Semua permintaan tarik untuk perbaikan, perbaikan bug yang dikirim ke repositori ini .


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

Source: https://habr.com/ru/post/undefined/


All Articles