SonarQube'da kaynak kodu kalite kontrol durumunu geliştiricilere görüntüleme

SonarQube, çok çeşitli programlama dillerini destekleyen ve kod çoğaltma, kodlama standartları uyumluluğu, test kapsamı, kod karmaşıklığı, olası hatalar ve daha fazlası gibi ölçümler hakkında raporlama sağlayan açık kaynaklı bir kod kalite güvence platformudur. SonarQube, analiz sonuçlarını rahatlıkla görselleştirir ve zaman içindeki proje geliştirme dinamiklerini izlemenize olanak tanır.

Amaç: Geliştiricilere SonarQube'daki kaynak kodu kalite kontrolünün durumunu gösterin.

İki çözüm var:

  • SonarQube'da kaynak kodu kalite kontrol durumunu kontrol etmek için bir komut dosyası çalıştırın. SonarQube'daki kaynak kodun kalite kontrolü geçemezse derlemede başarısız olun.
  • Kaynak kodu kalite kontrol durumunu ana proje sayfasında gösterin.

SonarQube'u Yükleme

Sonarqube'u rpm paketlerinden kurmak için depoyu kullanacağız https://harbottle.gitlab.io/harbottle-main.

Paketi CentOS 7 deposuyla birlikte yükleyelim.

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

Sonarqube'un kendisini kuruyoruz.

yum install -y sonarqube

Kurulum sırasında çoğu eklenti yüklenecektir, ancak findbugs ve pmd'yi yüklemeniz gerekir.

yum install -y sonarqube-findbugs sonarqube-pmd

Hizmeti başlatın ve başlangıca ekleyin

systemctl start sonarqube
systemctl enable sonarqube

Yüklemesi uzun sürüyorsa sonar.web.javaOpts seçeneklerinin sonuna rastgele sayı üreteci /dev/./urandom ekleyin

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

SonarQube'da kaynak kodu kalite kontrolünün durumunu kontrol etmek için bir komut dosyası çalıştırma.

Maalesef sonar-break-maven-plugin eklentisi uzun süredir güncellenmiyor. O halde kendi senaryomuzu yazalım.

Test için depoyu kullanacağız https://github.com/uweplonus/spotbugs-examples.

Gitlab'a içe aktarma. .gitlab-ci.yml dosyasını ekleyin:

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 dosyası mükemmel değil. Sonarqube'daki tarama görevlerinin şu durumla bitip bitmediği test edildi: "BAŞARI". Şu ana kadar başka bir durum olmadı. Başka durumlar olur olmaz bu yazıda .gitlab-ci.yml dosyasını düzelteceğim.

Kaynak kodu kalite kontrol durumunun ana proje sayfasında görüntülenmesi

SonarQube eklentisini yükleme

yum install -y sonarqube-qualinsight-badges

SonarQube'a gidiyoruz http://172.26.9.115:9000/
Normal bir kullanıcı oluşturun, örneğin "rozetler".
Bu kullanıcı altında SonarQube'da oturum açın.

SonarQube'da kaynak kodu kalite kontrol durumunu geliştiricilere görüntüleme

"Hesabım"a gidin, örneğin "read_all_repository" adında yeni bir jeton oluşturun ve "Oluştur"a tıklayın.

SonarQube'da kaynak kodu kalite kontrol durumunu geliştiricilere görüntüleme

Bir jetonun ortaya çıktığını görüyoruz. Sadece 1 kez görünecek.

Yönetici olarak oturum açın.

Yapılandırmaya Git -> SVG Rozetleri

SonarQube'da kaynak kodu kalite kontrol durumunu geliştiricilere görüntüleme

Bu jetonu "Etkinlik rozeti jetonu" alanına kopyalayın ve kaydet düğmesini tıklayın.

SonarQube'da kaynak kodu kalite kontrol durumunu geliştiricilere görüntüleme

Yönetim -> Güvenlik -> İzin Şablonları -> Varsayılan şablona (ve sahip olacağınız diğer şablonlara) gidin.

Rozet kullanıcısının "Gözat" onay kutusunu işaretlemiş olması gerekir.

Test.

Mesela projeyi ele alalım https://github.com/jitpack/maven-simple.

Bu projeyi import edelim.

.gitlab-ci.yml dosyasını aşağıdaki içeriğe sahip proje köküne ekleyin.

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'da proje şöyle görünecek:

SonarQube'da kaynak kodu kalite kontrol durumunu geliştiricilere görüntüleme

README.md'ye çanta eklediğinizde şöyle görünecekler:

SonarQube'da kaynak kodu kalite kontrol durumunu geliştiricilere görüntüleme

Rozetlerin görüntülenme kodu şöyle görünür:

SonarQube'da kaynak kodu kalite kontrol durumunu geliştiricilere görüntüleme

Rozet görüntüleme dizesinin ayrıştırılması:

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

Proje Anahtarı ve proje kimliği nereden alınır/kontrol edilir.

Proje Anahtarı sağ alttadır. URL proje kimliğini içerir.

SonarQube'da kaynak kodu kalite kontrol durumunu geliştiricilere görüntüleme

Metrik elde etme seçenekleri şunlar olabilir: buraya bak.

İyileştirmeler ve hata düzeltmeleri için tüm çekme istekleri bu depoya gönder.

SonarQube hakkında Telegram sohbeti https://t.me/sonarqube_ru
DevSecOps hakkında Telegram sohbeti - güvenli DevOps https://t.me/sec_devops

Kaynak: habr.com

Yorum ekle