Visning af kildekodekvalitetskontrolstatus i SonarQube til udviklere

SonarQube er en open source-kode kvalitetssikringsplatform, der understøtter en bred vifte af programmeringssprog og giver rapportering om metrics såsom kodeduplikering, overholdelse af kodningsstandarder, testdækning, kodekompleksitet, potentielle fejl og mere. SonarQube visualiserer bekvemt analyseresultater og giver dig mulighed for at spore dynamikken i projektudvikling over tid.

Formål: Vis udviklere status for kildekodekvalitetskontrol i SonarQube.

Der er to løsninger:

  • Kør et script for at kontrollere kildekodens kvalitetskontrolstatus i SonarQube. Hvis kvalitetskontrollen af ​​kildekoden i SonarQube ikke består, så mislykkes samlingen.
  • Vis kildekodekvalitetskontrolstatus på hovedprojektsiden.

Installerer SonarQube

For at installere sonarqube fra rpm-pakker, vil vi bruge repository https://harbottle.gitlab.io/harbottle-main.

Lad os installere pakken med lageret til CentOS 7.

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

Vi installerer selve sonarqube.

yum install -y sonarqube

Under installationen vil de fleste plugins blive installeret, men du skal installere findbugs og pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Start tjenesten og føj den til opstart

systemctl start sonarqube
systemctl enable sonarqube

Hvis det tager lang tid at indlæse, så tilføj en tilfældig talgenerator /dev/./urandom til slutningen af ​​mulighederne sonar.web.javaOpts

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

Kørsel af et script for at kontrollere status for kildekodekvalitetskontrol i SonarQube.

Desværre er sonar-break-maven-plugin plugin ikke blevet opdateret i lang tid. Så lad os skrive vores eget manuskript.

Til test vil vi bruge depotet https://github.com/uweplonus/spotbugs-examples.

Importerer til Gitlab. Tilføj filen .gitlab-ci.yml:

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-filen er ikke perfekt. Testet om scanningsopgaver i sonarqube endte med status: "SUCCES". Indtil videre har der ikke været andre statusser. Så snart der er andre statusser, vil jeg rette .gitlab-ci.yml i dette indlæg.

Visning af kildekodens kvalitetskontrolstatus på hovedprojektsiden

Installation af plugin til SonarQube

yum install -y sonarqube-qualinsight-badges

Vi tager til SonarQube kl http://172.26.9.115:9000/
Opret en almindelig bruger, for eksempel "badges".
Log ind på SonarQube under denne bruger.

Visning af kildekodekvalitetskontrolstatus i SonarQube til udviklere

Gå til "Min konto", opret et nyt token, for eksempel med navnet "read_all_repository", og klik på "Generer".

Visning af kildekodekvalitetskontrolstatus i SonarQube til udviklere

Vi ser, at der er dukket et token op. Han dukker kun op 1 gang.

Log ind som administrator.

Gå til Konfiguration -> SVG Badges

Visning af kildekodekvalitetskontrolstatus i SonarQube til udviklere

Kopier dette token ind i feltet "Aktivitetsmærketoken", og klik på knappen Gem.

Visning af kildekodekvalitetskontrolstatus i SonarQube til udviklere

Gå til Administration -> Sikkerhed -> Tilladelsesskabeloner -> Standardskabelon (og andre skabeloner, du vil have).

Badges-brugeren skal have afkrydsningsfeltet "Gennemse" markeret.

Test.

Lad os for eksempel tage projektet https://github.com/jitpack/maven-simple.

Lad os importere dette projekt.

Tilføj filen .gitlab-ci.yml til projektroden med følgende indhold.

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

I SonarQube vil projektet se sådan ud:

Visning af kildekodekvalitetskontrolstatus i SonarQube til udviklere

Tilføj poser til README.md, og de vil se sådan ud:

Visning af kildekodekvalitetskontrolstatus i SonarQube til udviklere

Badges-visningskoden ser sådan ud:

Visning af kildekodekvalitetskontrolstatus i SonarQube til udviklere

Parsing af badges-visningsstrengen:

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

Hvor kan man få/tjekke projektnøgle og projekt-id.

Projektnøgle er nederst til højre. URL'en indeholder projekt-id'et.

Visning af kildekodekvalitetskontrolstatus i SonarQube til udviklere

Muligheder for at opnå metrics kan være se her.

Alle pull-anmodninger om forbedringer, fejlrettelser indsende til dette lager.

Telegramchat om SonarQube https://t.me/sonarqube_ru
Telegramchat om DevSecOps - sikker DevOps https://t.me/sec_devops

Kilde: www.habr.com

Tilføj en kommentar