Pokazywanie programistom statusu kontroli jakości kodu źródłowego w SonarQube

SonarQube to otwarta platforma do ciągłego monitorowania jakości kodu źródłowego, wspierająca wiele języków programowania i umożliwiająca generowanie raportów na temat takich metryk jak duplikacja kodu, zgodność ze standardami kodowania, pokrycie testami, złożoność kodu, potencjalne błędy itp. SonarQube wygodnie wizualizuje wyniki analizy i pozwala śledzić dynamikę rozwoju projektu w czasie.

Zadanie: Pokazać programistom status monitorowania jakości kodu źródłowego w SonarQube.

Istnieją dwa sposoby rozwiązania:

  • Uruchamiać skrypt sprawdzający status monitorowania jakości kodu źródłowego w SonarQube. Jeśli monitorowanie jakości kodu w SonarQube nie przechodzi, należy zakończyć budowanie.
  • Wyświetlać na głównej stronie projektu status monitorowania jakości kodu źródłowego.

Instalacja SonarQube

Aby zainstalować SonarQube z pakietów rpm, skorzystamy z repozytorium https://harbottle.gitlab.io/harbottle-main.

Zainstalujemy pakiet z repozytorium dla CentOS 7.

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

Instalujemy sam SonarQube.

yum install -y sonarqube

Podczas instalacji zainstalowane zostaną większość wtyczek, ale należy doinstalować findbugs i pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Uruchamiamy usługę i dodajemy do autostartu

systemctl start sonarqube
systemctl enable sonarqube

Jeśli ładowanie trwa długo, dodaj na końcu opcji sonar.web.javaOpts generator liczb losowych /dev/.urandom

sonar.web.javaOpts=innych parametrów -Djava.security.egd=file:/dev/urandom

Uruchamianie skryptu sprawdzającego status monitorowania jakości kodu źródłowego w SonarQube.

Niestety, wtyczka sonar-break-maven-plugin nie była aktualizowana od dłuższego czasu. Dlatego napiszemy własny skrypt.

Do testowania będziemy używać repozytorium https://github.com/uweplonus/spotbugs-examples.

Importujemy do Gitlab. Dodajemy plik .gitlab-ci.yml:

zmienne:
  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" # login do sonarqube
  PASSWORD: "admin" # hasło do 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, gdzie raport jest przechowywany
    - echo $URL
    - |
      while : ;do
          curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
          export status=$(cat analysis.txt | jq -r '.task.status') # Status to SUCCESS, CANCELED, IN_PROGRESS lub 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 to SUCCESS, CANCELED lub FAILED
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') # Pobierz ID analizy
    - |
      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; # Wynik analizy, jak krytyczne, ważne i drobne problemy
        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')"; # drukuje krytyczne, ważne i drobne naruszenia
          exit 1 # przerywa budowę z powodu naruszeń
        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 # przerywa budowę z powodu błędu w Krok 2
      fi
  tags:
    - docker

Plik .gitlab-ci.yml nie jest idealny. Testowano, czy zadania sprawdzające w sonarqube kończą się statusem: "SUCCESS". Na razie nie było innych statusów. Gdy pojawią się inne statusy, poprawię .gitlab-ci.yml w tym poście.

Wyświetlanie statusu kontroli jakości kodu źródłowego na stronie głównej projektu

Instalujemy wtyczkę dla SonarQube

yum install -y sonarqube-qualinsight-badges

Przechodzimy do SonarQube pod tym adresem http://172.26.9.115:9000/
Tworzymy zwykłego użytkownika, na przykład "badges".
Logujemy się tym użytkownikiem do SonarQube.

Pokazywanie programistom statusu kontroli jakości kodu źródłowego w SonarQube

Przechodzimy do "Moje konto", tworzymy nowy token, na przykład o nazwie "read_all_repository" i klikamy "Wygeneruj".

Pokazywanie programistom statusu kontroli jakości kodu źródłowego w SonarQube

Widzimy, że pojawił się token. Pojawi się tylko 1 raz.

Logujemy się jako administrator.

Przechodzimy do Configuration -> SVG Badges

Pokazywanie programistom statusu kontroli jakości kodu źródłowego w SonarQube

Kopiujemy ten token w polu "Activity badge token" i klikamy przycisk zapisz.

Pokazywanie programistom statusu kontroli jakości kodu źródłowego w SonarQube

Przechodzimy do Administracja -> Bezpieczeństwo -> Szablony uprawnień -> Szablon domyślny (i inne szablony, które posiadasz).

U użytkownika badges należy zaznaczyć opcję "Browse".

Testowanie.

Na przykład weźmy projekt https://github.com/jitpack/maven-simple.

Importujemy ten projekt.

Dodajemy plik .gitlab-ci.yml do głównego katalogu projektu z następującą zawartością.

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" # login do sonarqube
  PASSWORD: "admin" # hasło do 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

W SonarQube projekt będzie wyglądał następująco:

Pokazywanie programistom statusu kontroli jakości kodu źródłowego w SonarQube

Dodajemy badges do README.md i będą one wyglądać tak:

Pokazywanie programistom statusu kontroli jakości kodu źródłowego w SonarQube

Kod wyświetlania badges wygląda tak:

Pokazywanie programistom statusu kontroli jakości kodu źródłowego w SonarQube

Analiza ciągu wyświetlania badges:

[![Brama Jakości](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)
[![Nazwa](http://172.26.9.115:9000/api/badges/gate?key=Project Key)](http://172.26.9.115:9000/dashboard?id=id-projektu)
[![Pokrycie](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)
[![Nazwa Metryki](http://172.26.9.115:9000/api/badges/measure?key=Project Key&metric=METRYKA)](http://172.26.9.115:9000/dashboard?id=id-projektu)

Gdzie znaleźć/sprawdzić Project Key i id-projektu.

Project Key znajduje się w dolnym prawym rogu. W URL znajduje się id-projektu.

Pokazywanie programistom statusu kontroli jakości kodu źródłowego w SonarQube

Opcje do uzyskiwania metryk można zobaczyć tutaj.

Wszystkie pull requesty na poprawę, naprawy błędów prześlij do tego repozytorium.

Czat Telegram o SonarQube https://t.me/sonarqube_ru
Czat Telegram o DevSecOps — bezpieczny DevOps https://t.me/sec_devops

Źródło: habr.com

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster