Visning af status for kvalitetssikring af kildekoden til udviklerne i SonarQube.

SonarQube er en åben platform til kontinuerlig kvalitetskontrol af kildekode, der understøtter en lang række programmeringssprog og giver mulighed for at få rapporter om målinger som kode-duplikation, overholdelse af kodestandarder, testdækning, kodekompleksitet, potentielle fejl osv. SonarQube visualiserer resultaterne af analysen på en brugervenlig måde og gør det muligt at følge udviklingen af projektet over tid.

Opgaven: At vise udviklerne status for kvalitetskontrol af kildekoden i SonarQube.

Der er to måder at løse det på:

  • Køre et script til kontrol af status for kvalitetskontrol af kildekoden i SonarQube. Hvis kvalitetskontrollen ikke bestås i SonarQube, skal bygningen fejles.
  • Vise status for kvalitetskontrol af kildekoden på hovedsiden af projektet.

Installation af SonarQube

Til installation af SonarQube fra rpm-pakker bruger vi repositoryet https://harbottle.gitlab.io/harbottle-main.

Vi installerer pakken med repositoryet 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

Ved installationen vil de fleste plugins blive installeret, men findbugs og pmd skal installeres separat.

yum install -y sonarqube-findbugs sonarqube-pmd

Vi starter tjenesten og tilføjer den til automatisk opstart.

systemctl start sonarqube
systemctl enable sonarqube

Hvis det tager lang tid at indlæse, så tilføj en tilfældig nummergenerator ved slutningen af indstillingerne sonar.web.javaOpts /dev/.urandom

sonar.web.javaOpts=andre parametre -Djava.security.egd=file:/dev/urandom

Kør scriptet til kontrol af status for kvalitetskontrol af kildekoden i SonarQube.

Desværre har plugin'et sonar-break-maven-plugin ikke været opdateret i lang tid. Derfor vil vi skrive vores eget script.

Til testning vil vi bruge repositoryet https://github.com/uweplonus/spotbugs-examples.

Vi importerer det til GitLab. Tilføj filen .gitlab-ci.yml:

variabler:
  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 til sonarqube
  PASSWORD: "admin" # password til 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 hvor rapporten gemmes
    - echo $URL
    - |
      while : ;do
          curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
          export status=$(cat analysis.txt | jq -r '.task.status') #Status som SUCCESS, CANCELED, IN_PROGRESS eller FAILED
          echo $status
          if [ ${status} == "SUCCESS" ];then
            echo "SONAR ANALYSE 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 som SUCCESS, CANCELED eller FAILED
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Hent analyse Id
    - |
      if [ "$status" == "SUCCESS" ]; then
        echo -e "SONAR ANALYSE SUCCESSFUL...ANALYSERER RESULTATER";
        curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Analyse resultater som kritiske, alvorlige og mindre problemer
        export result=$(cat result.txt | jq -r '.projectStatus.status');

        if [ "$result" == "ERROR" ];then
          echo -e "91mSONAR RESULTATER FEJLEDE";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #udskriver kritiske, alvorlige og mindre overtrædelser
          exit 1 #stopper bygningen for overtrædelser
        else
          echo -e "SONAR RESULTATER SUCCESSFUL";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
          exit 0
        fi
      else
          echo -e "e[91mSONAR ANALYSE FEJLEDEe[0m";
          exit 1 #stopper bygningen for fejl i Step2
      fi
  tags:
    - docker

.gitlab-ci.yml-filen er ikke perfekt. Den er testet, hvis kontrolopgaverne i sonarqube sluttede med status: "SUCCESS". Der har indtil videre ikke været andre statusser. Når der kommer andre statusser, vil jeg rette .gitlab-ci.yml i dette indlæg.

Visning på projektets forside af status for kvalitetskontrol af koden

Installerer plugin til SonarQube

yum install -y sonarqube-qualinsight-badges

Gå ind på SonarQube på adressen http://172.26.9.115:9000/
Opretter en almindelig bruger, for eksempel "badges".
Log ind med denne bruger i SonarQube.

Visning af status for kvalitetssikring af kildekoden til udviklerne i SonarQube.

Gå ind under "Min konto", opret en ny token, for eksempel med navnet "read_all_repository", og klik på "Genereate".

Visning af status for kvalitetssikring af kildekoden til udviklerne i SonarQube.

Ser at tokenet er blevet oprettet. Det vil kun blive vist én gang.

Log ind som administrator.

Gå til Configuration -> SVG Badges

Visning af status for kvalitetssikring af kildekoden til udviklerne i SonarQube.

Vi kopierer denne token ind i feltet "Activity badge token" og trykker på knappen gem.

Visning af status for kvalitetssikring af kildekoden til udviklerne i SonarQube.

Vi går ind i Administration -> Sikkerhed -> Tilladelsesskabeloner -> Standard skabelon (og andre skabeloner, du måtte have).

Brugeren badges skal have markeret "Browse".

Testning.

Lad os tage et projekt som eksempel https://github.com/jitpack/maven-simple.

Vi importerer dette projekt.

Vi tilføjer filen .gitlab-ci.yml til roden af projektet 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" # login sonarqube
  PASSWORD: "admin" # kodeord 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 status for kvalitetssikring af kildekoden til udviklerne i SonarQube.

Vi tilføjer badges i README.md, og de vil se sådan ud:

Visning af status for kvalitetssikring af kildekoden til udviklerne i SonarQube.

Koden til visningen af badges ser sådan ud:

Visning af status for kvalitetssikring af kildekoden til udviklerne i SonarQube.

Analyse af badges visningsstrengen:

[![Kvalitetsgate](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)
[![Navn](http://172.26.9.115:9000/api/badges/gate?key=Project Key)](http://172.26.9.115:9000/dashboard?id=id-projekt)
[![Dækning](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)
[![Metriknavn](http://172.26.9.115:9000/api/badges/measure?key=Project Key&metric=METRIK)](http://172.26.9.115:9000/dashboard?id=id-projekt)

Hvor kan man finde/tjekke Project Key og id-projekt.

Project Key findes nederst til højre. Id-projektet findes i URL'en.

Visning af status for kvalitetssikring af kildekoden til udviklerne i SonarQube.

Muligheder for at hente metrikker kan ses her.

Alle pull requests til forbedringer, fejlrettelser sendes til dette repository.

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

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster