Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

SonarQube er en kvalitetssikringsplattform for åpen kildekode som støtter et bredt spekter av programmeringsspråk og gir rapportering om beregninger som kodeduplisering, overholdelse av kodestandarder, testdekning, kodekompleksitet, potensielle feil og mer. SonarQube visualiserer enkelt analyseresultater og lar deg spore dynamikken i prosjektutvikling over tid.

Mål: Vis utviklere status for kildekodekvalitetskontroll i SonarQube.

Det er to løsninger:

  • Kjør et skript for å sjekke kildekodens kvalitetskontrollstatus i SonarQube. Hvis kvalitetskontrollen av kildekoden i SonarQube ikke består, mislykkes monteringen.
  • Vis kildekodekvalitetskontrollstatus på hovedprosjektsiden.

Installerer SonarQube

For å installere sonarqube fra rpm-pakker, vil vi bruke depotet https://harbottle.gitlab.io/harbottle-main.

La oss installere pakken med depotet for 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 installasjonen vil de fleste plugins bli installert, men du må installere findbugs og pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Start tjenesten og legg den til oppstart

systemctl start sonarqube
systemctl enable sonarqube

Hvis det tar lang tid å laste, så legg til en tilfeldig tallgenerator /dev/./urandom til slutten av alternativene sonar.web.javaOpts

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

Kjøre et skript for å sjekke statusen for kildekodekvalitetskontroll i SonarQube.

Dessverre har ikke sonar-break-maven-plugin-pluginen blitt oppdatert på lenge. Så la oss skrive vårt eget manus.

For testing vil vi bruke depotet https://github.com/uweplonus/spotbugs-examples.

Importerer til Gitlab. Legg til .gitlab-ci.yml-filen:

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 skanneoppgaver i sonarqube endte med statusen: "SUKSESS". Så langt har det ikke vært andre statuser. Så snart det er andre statuser vil jeg korrigere .gitlab-ci.yml i dette innlegget.

Viser kildekodens kvalitetskontrollstatus på hovedprosjektsiden

Installerer plugin for SonarQube

yum install -y sonarqube-qualinsight-badges

Vi går til SonarQube kl http://172.26.9.115:9000/
Opprett en vanlig bruker, for eksempel "merker".
Logg inn på SonarQube under denne brukeren.

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Gå til "Min konto", opprett en ny token, for eksempel med navnet "read_all_repository" og klikk "Generer".

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Vi ser at en token har dukket opp. Han vil dukke opp bare 1 gang.

Logg inn som administrator.

Gå til Konfigurasjon -> SVG-merker

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Kopier dette tokenet inn i "Aktivitetsmerketoken"-feltet og klikk på lagre-knappen.

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Gå til Administrasjon -> Sikkerhet -> Tillatelsesmaler -> Standardmal (og andre maler du vil ha).

Merkebrukeren må ha merket av for "Bla gjennom".

Testing.

La oss for eksempel ta prosjektet https://github.com/jitpack/maven-simple.

La oss importere dette prosjektet.

Legg til .gitlab-ci.yml-filen til prosjektroten med følgende innhold.

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 prosjektet se slik ut:

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Legg til poser til README.md og de vil se slik ut:

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Merkevisningskoden ser slik ut:

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Parsing av merkenes visningsstreng:

[![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å tak i/sjekke prosjektnøkkel og prosjekt-ID.

Prosjektnøkkel er nederst til høyre. URL-en inneholder prosjekt-ID.

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Alternativer for å innhente beregninger kan være se her.

Alle pull-forespørsler om forbedringer, feilrettinger sende til dette depotet.

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

Kilde: www.habr.com

Legg til en kommentar