Quellcode Qualitéitskontrollstatus an SonarQube un Entwéckler ze weisen

SonarQube ass eng Open Source Code Qualitéitssécherungsplattform déi eng breet Palette vu Programméierungssproochen ënnerstëtzt a Bericht iwwer Metriken ubitt wéi Code Duplikatioun, Kodéierungsnormen Konformitéit, Testdeckung, Code Komplexitéit, potenziell Bugs, a méi. SonarQube visualiséiert bequem Analyseresultater an erlaabt Iech d'Dynamik vun der Projetsentwécklung iwwer Zäit ze verfolgen.

Zil: Entwéckler de Status vun der Quellcode Qualitéitskontroll an SonarQube weisen.

Et ginn zwou Léisungen:

  • Run e Skript fir de Quellcode Qualitéitskontrollstatus am SonarQube ze kontrolléieren. Wann d'Qualitéitskontroll vum Quellcode am SonarQube net passéiert, da versoen d'Versammlung.
  • Show Quellcode Qualitéitskontroll Status op der Haaptrei Projet Säit.

SonarQube installéieren

Fir sonarqube aus rpm Packagen z'installéieren, benotze mir de Repository https://harbottle.gitlab.io/harbottle-main.

Loosst eis de Package mat dem Repository fir CentOS 7 installéieren.

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

Mir installéieren sonarqube selwer.

yum install -y sonarqube

Wärend der Installatioun ginn déi meescht Plugins installéiert, awer Dir musst findbugs a pmd installéieren

yum install -y sonarqube-findbugs sonarqube-pmd

Start de Service a füügt et un de Startup

systemctl start sonarqube
systemctl enable sonarqube

Wann et laang dauert fir ze lueden, füügt dann e zoufälleg Zuelengenerator /dev/./urandom un d'Enn vun den Optiounen sonar.web.javaOpts

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

Lafen e Skript fir de Status vun der Quellcode Qualitéitskontroll an SonarQube ze kontrolléieren.

Leider ass de Sonar-break-maven-Plugin Plugin fir eng laang Zäit net aktualiséiert ginn. Also loosst eis eisen eegene Skript schreiwen.

Fir Tester benotze mir de Repository https://github.com/uweplonus/spotbugs-examples.

Import an Gitlab. Füügt d'.gitlab-ci.yml Datei dobäi:

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

D'.gitlab-ci.yml Datei ass net perfekt. Getest ob Scannen Aufgaben an sonarqube mam Status opgehalen hunn: "SUCCESS". Bis elo goufen et keng aner Statuse. Soubal et aner Statuse sinn, korrigéieren ech .gitlab-ci.yml an dësem Post.

Weist de Quellcode Qualitéitskontrollstatus op der Haaptprojet Säit

Installéiert de Plugin fir SonarQube

yum install -y sonarqube-qualinsight-badges

Mir ginn op SonarQube um http://172.26.9.115:9000/
Erstellt e reguläre Benotzer, zum Beispill "Badges".
Mellt Iech bei SonarQube ënner dësem Benotzer un.

Quellcode Qualitéitskontrollstatus an SonarQube un Entwéckler ze weisen

Gitt op "Mäi Kont", erstellt en neien Token, zum Beispill mam Numm "read_all_repository" a klickt op "Genereate".

Quellcode Qualitéitskontrollstatus an SonarQube un Entwéckler ze weisen

Mir gesinn datt en Token opgetaucht ass. Hien wäert erschéngen nëmmen 1 Kéier.

Login als Administrator.

Gitt op Configuratioun -> SVG Badges

Quellcode Qualitéitskontrollstatus an SonarQube un Entwéckler ze weisen

Kopéiert dësen Token an de Feld "Aktivitéit Badge Token" a klickt op de Knäppchen späicheren.

Quellcode Qualitéitskontrollstatus an SonarQube un Entwéckler ze weisen

Gitt op Administratioun -> Sécherheet -> Permis Templates -> Default Template (an aner Templates déi Dir hutt).

De Badge Benotzer muss d'Checkbox "Browsen" markéiert hunn.

Testen.

Zum Beispill, loosst eis de Projet huelen https://github.com/jitpack/maven-simple.

Loosst eis dëse Projet importéieren.

Füügt d'.gitlab-ci.yml Datei op d'Projetwurzel mat dem folgenden Inhalt.

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

Am SonarQube wäert de Projet esou ausgesinn:

Quellcode Qualitéitskontrollstatus an SonarQube un Entwéckler ze weisen

Füügt Poschen op README.md a si wäerte sou ausgesinn:

Quellcode Qualitéitskontrollstatus an SonarQube un Entwéckler ze weisen

D'Badges Display Code gesäit esou aus:

Quellcode Qualitéitskontrollstatus an SonarQube un Entwéckler ze weisen

Parsing de Badges Display String:

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

Wou kritt / iwwerpréift Project Key a Projet ID.

Project Key ass ënnen riets. D'URL enthält de Projet ID.

Quellcode Qualitéitskontrollstatus an SonarQube un Entwéckler ze weisen

Optiounen fir Metriken ze kréien kënne sinn kuckt hei.

All Pull Ufroe fir Verbesserungen, Bugfixes op dëse Repository ofginn.

Telegram Chat iwwer SonarQube https://t.me/sonarqube_ru
Telegram Chat iwwer DevSecOps - sécher DevOps https://t.me/sec_devops

Source: will.com

Setzt e Commentaire