Anzeige des Status der Qualitätskontrolle des Quellcodes in SonarQube

SonarQube ist eine offene Plattform für die kontinuierliche Qualitätskontrolle von Quellcode, die eine Vielzahl von Programmiersprachen unterstützt und Berichte über Metriken wie Code-Duplikate, Einhaltung von Codierungsstandards, Testabdeckung, Komplexität des Codes, potenzielle Fehler usw. ermöglicht. SonarQube visualisiert die Analyseergebnisse übersichtlich und ermöglicht es, die Entwicklung des Projekts im Zeitverlauf zu verfolgen.

Aufgabe: Den Entwicklern den Status der Qualitätskontrolle des Quellcodes in SonarQube anzeigen.

Es gibt zwei Lösungsansätze:

  • Ein Skript zur Überprüfung des Status der Qualitätskontrolle des Quellcodes in SonarQube ausführen. Wenn die Qualitätskontrolle des Quellcodes in SonarQube nicht besteht, den Build fehlschlagen.
  • Den Status der Qualitätskontrolle des Quellcodes auf der Hauptseite des Projekts anzeigen.

Installation von SonarQube

Um SonarQube aus RPM-Paketen zu installieren, verwenden wir das Repository. https://harbottle.gitlab.io/harbottle-main.

Wir installieren das Paket mit dem Repository für CentOS 7.

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

Wir installieren SonarQube selbst.

yum install -y sonarqube

Bei der Installation werden die meisten Plugins installiert, aber findbugs und pmd müssen nachinstalliert werden

yum install -y sonarqube-findbugs sonarqube-pmd

Wir starten den Dienst und fügen ihn zur Autostartliste hinzu.

systemctl start sonarqube
systemctl enable sonarqube

Wenn es lange dauert zu laden, fügen Sie am Ende der Optionen sonar.web.javaOpts den Zufallszahlengenerator /dev/.urandom hinzu.

sonar.web.javaOpts=weitere Parameter -Djava.security.egd=file:/dev/urandom

Ausführung des Skripts zur Überprüfung des Status der Qualitätskontrolle des Quellcodes in SonarQube.

Leider wurde das Plugin sonar-break-maven-plugin seit langem nicht mehr aktualisiert. Daher schreiben wir unser eigenes Skript.

Für die Tests verwenden wir das Repository. https://github.com/uweplonus/spotbugs-examples.

Importieren in GitLab. Fügen Sie die Datei .gitlab-ci.yml hinzu:

Variablen:
  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 SonarQube
  PASSWORD: "admin" # Passwort 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, wohin der Bericht gespeichert wird
    - echo $URL
    - |
      while : ;do
          curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
          export status=$(cat analysis.txt | jq -r '.task.status') #Status als SUCCESS, CANCELED, IN_PROGRESS oder FAILED
          echo $status
          if [ ${status} == "SUCCESS" ];then
            echo "SONAR ANALYSE ERFOLGREICH";
            break
          fi
          sleep 5
      done
    - curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
    - export status=$(cat analysis.txt | jq -r '.task.status') #Status als SUCCESS, CANCELED oder FAILED
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Analyse-ID abrufen
    - |
      if [ "$status" == "SUCCESS" ]; then
        echo -e "SONAR ANALYSE ERFOLGREICH...ERGEBNISSE ANALYSIEREN";
        curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Analyseergebnis wie kritische, wichtige und geringfügige Probleme
        export result=$(cat result.txt | jq -r '.projectStatus.status');

        if [ "$result" == "ERROR" ];then
          echo -e "91mSONAR ERGEBNISSE FEHLGESCHLAGEN";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #Druckt die kritischen, wichtigen und geringfügigen Verstöße
          exit 1 #bricht den Build wegen Verstöße ab
        else
          echo -e "SONAR ERGEBNISSE ERFOLGREICH";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
          exit 0
        fi
      else
          echo -e "e[91mSONAR ANALYSE FEHLGESCHLAGENe[0m";
          exit 1 #bricht den Build ab bei Fehler in Schritt 2
      fi
  tags:
    - docker

Die Datei .gitlab-ci.yml ist nicht perfekt. Es wurde getestet, ob die Überprüfungsaufgaben in SonarQube den Status: "SUCCESS" erreicht haben. Bisher gab es keinen anderen Status. Sobald es andere Status gibt, werde ich die .gitlab-ci.yml in diesem Beitrag anpassen.

Anzeigen des Status der Codequalität auf der Hauptseite des Projekts

Plugin für SonarQube installieren

yum install -y sonarqube-qualinsight-badges

Zugang zu SonarQube unter der Adresse http://172.26.9.115:9000/
Einen normalen Benutzer erstellen, zum Beispiel "badges".
Mit diesem Benutzer in SonarQube einloggen.

Anzeige des Status der Qualitätskontrolle des Quellcodes in SonarQube

In "Mein Konto" gehen, einen neuen Token erstellen, beispielsweise mit dem Namen "read_all_repository", und auf "Generieren" klicken.

Anzeige des Status der Qualitätskontrolle des Quellcodes in SonarQube

Wir sehen, dass der Token erschienen ist. Er wird nur einmal angezeigt.

Als Administrator einloggen.

Gehe zu Konfiguration -> SVG Badges

Anzeige des Status der Qualitätskontrolle des Quellcodes in SonarQube

Wir kopieren dieses Token in das Feld "Activity badge token" und drücken die Schaltfläche Speichern.

Anzeige des Status der Qualitätskontrolle des Quellcodes in SonarQube

Navigieren Sie zu Verwaltung -> Sicherheit -> Berechtigungsvorlagen -> Standardvorlage (und andere Vorlagen, die Sie haben).

Für den Benutzer müssen die Badges das Kästchen "Durchsuchen" aktiviert haben.

Testing.

Zum Beispiel nehmen wir ein Projekt. https://github.com/jitpack/maven-simple.

Wir importieren dieses Projekt.

Fügen Sie die Datei .gitlab-ci.yml in das Hauptverzeichnis des Projekts mit folgendem Inhalt hinzu.

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 sonarqube
  PASSWORD: "admin" # passwort 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

Das Projekt wird in SonarQube so aussehen:

Anzeige des Status der Qualitätskontrolle des Quellcodes in SonarQube

Wir fügen Badges in README.md hinzu und sie werden so aussehen:

Anzeige des Status der Qualitätskontrolle des Quellcodes in SonarQube

Der Code zur Anzeige der Badges sieht so aus:

Anzeige des Status der Qualitätskontrolle des Quellcodes in SonarQube

Analyse der Badge-Anzeigereihe:

[![Qualitätsgate](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)
[![Name](http://172.26.9.115:9000/api/badges/gate?key=Project Key)](http://172.26.9.115:9000/dashboard?id=id-проекта)
[![Abdeckung](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)
[![Metrikname](http://172.26.9.115:9000/api/badges/measure?key=Project Key&metric=МЕТРИКА)](http://172.26.9.115:9000/dashboard?id=id-проекта)

Wo man den Project Key und die id-проекта findet/prüfen kann.

Der Project Key befindet sich rechts unten. Im URL ist die id-проекта zu finden.

Anzeige des Status der Qualitätskontrolle des Quellcodes in SonarQube

Optionen zur Abfrage von Metriken können hier eingesehen werden.

Alle Pull-Requests zur Verbesserung und Fehlerbehebung senden Sie bitte an dieses Repository.

Telegram-Chat über SonarQube https://t.me/sonarqube_ru
Telegram-Chat über DevSecOps — sicheres DevOps https://t.me/sec_devops

Quelle: habr.com

60GB SSD 8Gb DDR4