Anzeigen des Qualitätskontrollstatus des Quellcodes in SonarQube für Entwickler

SonarQube ist eine Open-Source-Plattform zur Qualitätssicherung von Code, die eine Vielzahl von Programmiersprachen unterstützt und Berichte zu Metriken wie Codeduplizierung, Einhaltung von Codierungsstandards, Testabdeckung, Codekomplexität, potenziellen Fehlern und mehr bereitstellt. SonarQube visualisiert Analyseergebnisse bequem und ermöglicht es Ihnen, die Dynamik der Projektentwicklung im Laufe der Zeit zu verfolgen.

Ziel: Entwicklern den Status der Quellcode-Qualitätskontrolle in SonarQube zeigen.

Es gibt zwei Lösungen:

  • Führen Sie ein Skript aus, um den Status der Quellcode-Qualitätskontrolle in SonarQube zu überprüfen. Wenn die Qualitätskontrolle des Quellcodes in SonarQube nicht bestanden wird, schlägt die Assembly fehl.
  • Zeigen Sie den Status der Quellcode-Qualitätskontrolle auf der Hauptseite des Projekts an.

SonarQube installieren

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

Lassen Sie uns das Paket mit dem Repository für CentOS 7 installieren.

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

Wir installieren Sonarqube selbst.

yum install -y sonarqube

Während der Installation werden die meisten Plugins installiert, Sie müssen jedoch findbugs und pmd installieren

yum install -y sonarqube-findbugs sonarqube-pmd

Starten Sie den Dienst und fügen Sie ihn zum Start hinzu

systemctl start sonarqube
systemctl enable sonarqube

Wenn das Laden lange dauert, fügen Sie am Ende der Optionen sonar.web.javaOpts einen Zufallszahlengenerator /dev/./urandom hinzu

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

Ausführen eines Skripts, um den Status der Quellcode-Qualitätskontrolle in SonarQube zu überprüfen.

Leider wurde das Sonar-Break-Maven-Plugin-Plugin schon lange nicht mehr aktualisiert. Schreiben wir also unser eigenes Drehbuch.

Zum Testen verwenden wir das Repository https://github.com/uweplonus/spotbugs-examples.

Importieren in Gitlab. Fügen Sie die Datei .gitlab-ci.yml 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.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

Die Datei .gitlab-ci.yml ist nicht perfekt. Getestet, ob Scanaufgaben in Sonarqube mit dem Status „ERFOLGREICH“ beendet wurden. Bisher gab es keine weiteren Status. Sobald es andere Stände gibt, werde ich .gitlab-ci.yml in diesem Beitrag korrigieren.

Anzeige des Qualitätskontrollstatus des Quellcodes auf der Hauptseite des Projekts

Installieren des Plugins für SonarQube

yum install -y sonarqube-qualinsight-badges

Wir gehen zu SonarQube unter http://172.26.9.115:9000/
Erstellen Sie einen regulären Benutzer, zum Beispiel „Badges“.
Melden Sie sich unter diesem Benutzer bei SonarQube an.

Anzeigen des Qualitätskontrollstatus des Quellcodes in SonarQube für Entwickler

Gehen Sie zu „Mein Konto“, erstellen Sie ein neues Token, beispielsweise mit dem Namen „read_all_repository“ und klicken Sie auf „Generieren“.

Anzeigen des Qualitätskontrollstatus des Quellcodes in SonarQube für Entwickler

Wir sehen, dass ein Token aufgetaucht ist. Er wird nur 1 Mal erscheinen.

Melden Sie sich als Administrator an.

Gehen Sie zu Konfiguration -> SVG-Abzeichen

Anzeigen des Qualitätskontrollstatus des Quellcodes in SonarQube für Entwickler

Kopieren Sie diesen Token in das Feld „Aktivitäts-Badge-Token“ und klicken Sie auf die Schaltfläche „Speichern“.

Anzeigen des Qualitätskontrollstatus des Quellcodes in SonarQube für Entwickler

Gehen Sie zu Administration -> Sicherheit -> Berechtigungsvorlagen -> Standardvorlage (und andere Vorlagen, die Sie haben werden).

Beim Badge-Benutzer muss das Kontrollkästchen „Durchsuchen“ aktiviert sein.

Testen

Nehmen wir zum Beispiel das Projekt https://github.com/jitpack/maven-simple.

Lassen Sie uns dieses Projekt importieren.

Fügen Sie die Datei .gitlab-ci.yml mit dem folgenden Inhalt zum Projektstamm 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" # логин 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

In SonarQube sieht das Projekt folgendermaßen aus:

Anzeigen des Qualitätskontrollstatus des Quellcodes in SonarQube für Entwickler

Fügen Sie Taschen zu README.md hinzu und sie sehen so aus:

Anzeigen des Qualitätskontrollstatus des Quellcodes in SonarQube für Entwickler

Der Code für die Anzeige der Abzeichen sieht folgendermaßen aus:

Anzeigen des Qualitätskontrollstatus des Quellcodes in SonarQube für Entwickler

Parsen der Abzeichen-Anzeigezeichenfolge:

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

Wo man den Projektschlüssel und die Projekt-ID erhält/überprüft.

Der Projektschlüssel befindet sich unten rechts. Die URL enthält die Projekt-ID.

Anzeigen des Qualitätskontrollstatus des Quellcodes in SonarQube für Entwickler

Optionen zum Erhalten von Metriken können sein siehe hier.

Alle Pull-Requests für Verbesserungen und Fehlerbehebungen an dieses Repository senden.

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

Source: habr.com

Kommentar hinzufügen