SonarQube-də mənbə kodunun keyfiyyətə nəzarət statusunu inkişaf etdiricilərə təqdim edilməsi

SonarQube - bu, bir çox proqramlaşdırma dilini dəstəkləyən açıq mənbə kodu keyfiyyətini davamlı olaraq təmin etməyə imkan verən platformadır. Bu platforma kodun təkrar olması, kodlaşdırma standartlarına uyğunluq, test örtüyü, kod mürəkkəbliyi, potensial səhvlər və s. kimi metriklərə dair hesabatlar təqdim edir. SonarQube, analiz nəticələrini rahatlıqla vizuallaşdırır və layihənin zamanla inkişaf dinamikasını izləməyə imkan tanıyır.

Məqsəd: İnkişaf etdiricilərə SonarQube-dakı kod keyfiyyəti vəziyyətini göstərmək.

Sahənin iki yolu var:

  • SonarQube-da kod keyfiyyətinin statusunu yoxlamaq üçün skripti işə salmaq. Əgər SonarQube-dakı kod keyfiyyəti keçmirsə, kompilasiyanı uğursuz edin.
  • Layihənin əsas səhifəsində kod keyfiyyəti vəziyyətini göstərmək.

SonarQube quraşdırılması

SonarQube-u rpm paketləri ilə quraşdırmaq üçün repositordan istifadə edəcəyik. https://harbottle.gitlab.io/harbottle-main.

CentOS 7 üçün repositoriyanın paketini quraşdıraq.

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

Artıq SonarQube-u quraşdırırıq.

yum install -y sonarqube

Quraşdırma zamanı əksər plaginlər quraşdırılacaq, amma findbugs və pmd plaginlərini əlavə olaraq quraşdırmalıyıq.

yum install -y sonarqube-findbugs sonarqube-pmd

Servisi işə salırıq və avtomatik yükləməyə əlavə edirik.

systemctl start sonarqube
systemctl enable sonarqube

Yüklənmə uzun çəkirsə, sonar.web.javaOpts parametrinin sonuna təsadüfi ədəd generatoru /dev/.urandom əlavə edin.

sonar.web.javaOpts=digər parametrlər -Djava.security.egd=file:/dev/urandom

SonarQube-da kod keyfiyyətinin statusunu yoxlamaq üçün skripti işə salmaq.

Təəssüf ki, sonar-break-maven-plugin plaqini uzun zamandır yenilənməyib. Ona görə, öz skriptimizi yazmalıyıq.

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

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

dəyişənlər:
  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 giriş
  PASSWORD: "admin" # sonarqube şifrə

cache:
  yollar:
    - .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-) # Raportun saxlanıldığı URL
    - echo $URL
    - |
      while : ;do
          curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
          export status=$(cat analysis.txt | jq -r '.task.status') # Status SUCCESS, CANCELED, IN_PROGRESS və ya FAILED
          echo $status
          if [ ${status} == "SUCCESS" ];then
            echo "SONAR ANALİZİ UĞURLU";
            break
          fi
          sleep 5
      done
    - curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
    - export status=$(cat analysis.txt | jq -r '.task.status') # Status SUCCESS, CANCELED və ya FAILED
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') # Analiz ID-sini əldə et
    - |
      if [ "$status" == "SUCCESS" ]; then
        echo -e "SONAR ANALİZİ UĞURLUDUR... NƏTİCƏLƏRİN TƏHLİLİ";
        curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; # Analiz nəticəsi, məsələn, kritik, əsas və kiçik məsələlər
        export result=$(cat result.txt | jq -r '.projectStatus.status');

        if [ "$result" == "ERROR" ];then
          echo -e "91mSONAR NƏTİCƏLƏRİ UĞURLU DEYİL";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; # kritik, əsas və kiçik pozuntuları çap edir
          exit 1 # pozuntular üçün inşaatı dayandırır
        else
          echo -e "SONAR NƏTİCƏLƏRİ UĞURLUDUR";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
          exit 0
        fi
      else
          echo -e "e[91mSONAR ANALİZİ UĞURLU DEYİL e[0m";
          exit 1 # Addım 2-də uğursuzluğa görə inşaatı dayandırır
      fi
  tags:
    - docker

.gitlab-ci.yml faylı mükəmməl deyil. Sonarqube-də yoxlanış tapşırıqlarının "SUCCESS" statusu ilə bitdiyini test etdim. Hələ ki, digər statuslar yoxdur. Digər statuslar olduğunda, bu yazıda .gitlab-ci.yml-ni düzəldəcəyəm.

Layihənin ana səhifəsində kod keyfiyyətini nəzarət etmə statusunun göstərilməsi

SonarQube üçün plagin quraşdırmaq

yum install -y sonarqube-qualinsight-badges

SonarQube-yə daxil olun: http://172.26.9.115:9000/
Sadə istifadəçi yaradın, məsələn, "badges".
Bu istifadəçi adı ilə SonarQube-yə daxil olun.

SonarQube-də mənbə kodunun keyfiyyətə nəzarət statusunu inkişaf etdiricilərə təqdim edilməsi

"My account"-a daxil olun, yeni bir token yaradın, məsələn, "read_all_repository" adı ilə və "Genereate" düyməsini basın.

SonarQube-də mənbə kodunun keyfiyyətə nəzarət statusunu inkişaf etdiricilərə təqdim edilməsi

Tokenin yaradıldığına şahid oluruq. O yalnız bir dəfə görsənəcək.

İdarəçi kimi daxil olun.

Konfiqurasiyaya daxil olun -> SVG Badges

SonarQube-də mənbə kodunun keyfiyyətə nəzarət statusunu inkişaf etdiricilərə təqdim edilməsi

Bu tokeni "Activity badge token" sahəsinə köçürün və saxlama düyməsini basın.

SonarQube-də mənbə kodunun keyfiyyətə nəzarət statusunu inkişaf etdiricilərə təqdim edilməsi

İdarəetmə -> Təhlükəsizlik -> İcazə Şablonları -> Default template (və sizdə olan digər şablonlar) hissəsinə daxil olun.

Badges istifadəçisində "Browse" işarəsini aktivləşdirmək lazımdır.

Test etmə.

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

Bu layihəni idxal edin.

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

deyiklər:
  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 üçün login
  PASSWORD: "admin" # sonarqube üçün parol

kesh:
  yollar:
    - .m2/repository

bina:
  şəkil: maven:3.3.9-jdk-8
  mərhələ: bina
  skript:
    - 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
  etiketlər:
    - docker

SonarQube-da layihə belə görünəcək:

SonarQube-də mənbə kodunun keyfiyyətə nəzarət statusunu inkişaf etdiricilərə təqdim edilməsi

README.md-yə badges əlavə edirik və onlar belə görünəcək:

SonarQube-də mənbə kodunun keyfiyyətə nəzarət statusunu inkişaf etdiricilərə təqdim edilməsi

Badges-in görüntü kodu belədir:

SonarQube-də mənbə kodunun keyfiyyətə nəzarət statusunu inkişaf etdiricilərə təqdim edilməsi

Badges-in görüntü sətirinin analizi:

[![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.jitpackmaven-simple)
[![Ad](http://172.26.9.115:9000/api/badges/gate?key=Project Key)](http://172.26.9.115:9000/dashboard?id=id-layihe)
[![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.jitpackmaven-simple)
[![Metriğin Adı](http://172.26.9.115:9000/api/badges/measure?key=Project Key&metric=METRIKA)](http://172.26.9.115:9000/dashboard?id=id-layihe)

Project Key və id-layihe haradan əldə edilir/görülür.

Project Key sağ altda yerləşir. URL-də id-layihe var.

SonarQube-də mənbə kodunun keyfiyyətə nəzarət statusunu inkişaf etdiricilərə təqdim edilməsi

Metriqləri əldə etmək üçün seçimlər buradan baxa bilərsiniz.

Bütün pull request-ləri təkmilləşdirmə, xətaları düzəltmə bu repositoriyaya göndərin.

SonarQube barədə Telegram çatı https://t.me/sonarqube_ru
DevSecOps — təhlükəsiz DevOps barədə Telegram çatı https://t.me/sec_devops

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster