Tərtibatçılara SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu göstərin

SonarQube geniş proqramlaşdırma dillərini dəstəkləyən və kodun təkrarlanması, kodlaşdırma standartlarına uyğunluğu, testin əhatə dairəsi, kodun mürəkkəbliyi, potensial səhvlər və s. kimi göstəricilər üzrə hesabat təqdim edən açıq mənbə kodu keyfiyyətinin təminatı platformasıdır. SonarQube təhlil nəticələrini rahat şəkildə vizuallaşdırır və zamanla layihənin inkişaf dinamikasını izləməyə imkan verir.

Məqsəd: Tərtibatçılara SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu göstərin.

İki həll yolu var:

  • SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu yoxlamaq üçün skript işlədin. SonarQube-də mənbə kodunun keyfiyyətinə nəzarət keçmirsə, montaj uğursuz olur.
  • Əsas layihə səhifəsində mənbə kodu keyfiyyətinə nəzarət statusunu göstərin.

SonarQube quraşdırılır

Sonarqube-ni rpm paketlərindən quraşdırmaq üçün biz depodan istifadə edəcəyik https://harbottle.gitlab.io/harbottle-main.

Gəlin paketi CentOS 7 üçün depo ilə quraşdıraq.

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

Biz sonarqube-nin özünü quraşdırırıq.

yum install -y sonarqube

Quraşdırma zamanı əksər plaginlər quraşdırılacaq, lakin findbugs və pmd quraşdırmalı olacaqsınız

yum install -y sonarqube-findbugs sonarqube-pmd

Xidməti işə salın və onu başlanğıca əlavə edin

systemctl start sonarqube
systemctl enable sonarqube

Yükləmək üçün çox vaxt lazımdırsa, sonar.web.javaOpts seçimlərinin sonuna təsadüfi ədəd generatoru /dev/./urandom əlavə edin.

sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom

SonarQube-də mənbə kodu keyfiyyətinə nəzarətin vəziyyətini yoxlamaq üçün skriptin işlədilməsi.

Təəssüf ki, sonar-break-maven-plugin plagini uzun müddətdir ki, yenilənməyib. Beləliklə, öz ssenarimizi yazaq.

Test üçün biz depodan istifadə edəcəyik https://github.com/uweplonus/spotbugs-examples.

Gitlab-a idxal. .gitlab-ci.yml faylını əlavə edin:

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

.gitlab-ci.yml faylı mükəmməl deyil. Sonarqube-də skanlama tapşırıqlarının "UĞUR" statusu ilə başa çatdığı yoxlanılıb. Hələlik başqa statuslar olmayıb. Başqa statuslar olan kimi bu postda .gitlab-ci.yml-i düzəldəcəm.

Əsas layihə səhifəsində mənbə kodu keyfiyyətinə nəzarət statusunun göstərilməsi

SonarQube üçün plaqinin quraşdırılması

yum install -y sonarqube-qualinsight-badges

SonarQube-ə gedirik http://172.26.9.115:9000/
Daimi istifadəçi yaradın, məsələn, "nişanlar".
Bu istifadəçinin altında SonarQube-ə daxil olun.

Tərtibatçılara SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu göstərin

“Hesabım” bölməsinə keçin, məsələn “read_all_repository” adı ilə yeni nişan yaradın və “Yarat” düyməsini basın.

Tərtibatçılara SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu göstərin

Bir işarənin meydana gəldiyini görürük. O, cəmi 1 dəfə meydana çıxacaq.

Administrator kimi daxil olun.

Konfiqurasiya -> SVG Nişanları bölməsinə keçin

Tərtibatçılara SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu göstərin

Bu nişanı "Fəaliyyət nişanı nişanı" sahəsinə kopyalayın və yadda saxla düyməsini basın.

Tərtibatçılara SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu göstərin

İdarəetmə -> Təhlükəsizlik -> İcazə Şablonları -> Defolt şablona (və sizdə olacaq digər şablonlara) gedin.

Nişanlar istifadəçisi "Gözdən keçir" qutusunu işarələməlidir.

Test.

Məsələn, layihəni götürək https://github.com/jitpack/maven-simple.

Gəlin bu layihəni idxal edək.

Aşağıdakı məzmunla .gitlab-ci.yml faylını layihə kökünə əlavə edin.

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-də layihə belə görünəcək:

Tərtibatçılara SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu göstərin

Çantaları README.md-ə əlavə edin və onlar belə görünəcək:

Tərtibatçılara SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu göstərin

Nişanların ekran kodu belə görünür:

Tərtibatçılara SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu göstərin

Nişanların ekran sətirinin təhlili:

[![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-проекта)

Layihə Açarı və layihə identifikatorunu haradan əldə etmək/yoxlamaq olar.

Layihə Açarı sağ altdadır. URL layihə identifikatorunu ehtiva edir.

Tərtibatçılara SonarQube-də mənbə kodu keyfiyyətinə nəzarət statusunu göstərin

Metrikləri əldə etmək üçün seçimlər ola bilər burada baxın.

Təkmilləşdirmələr, səhv düzəlişləri üçün bütün çəkmə sorğuları bu depoya təqdim edin.

SonarQube haqqında Telegram söhbəti https://t.me/sonarqube_ru
DevSecOps haqqında Telegram söhbəti - təhlükəsiz DevOps https://t.me/sec_devops

Mənbə: www.habr.com

Добавить комментарий