Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

SonarQube er en plattform for kvalitetssikring av åpen kildekode som støtter et bredt spekter av programmeringsspråk og gir rapporter om målinger som kodeduplisering, samsvar med kodestandarder, testdekning, kodekompleksitet, potensielle feil og mer. SonarQube visualiserer analyseresultater på en praktisk måte og lar deg spore prosjektutviklingsdynamikk over tid.

Oppgave: Vis utviklerne kvalitetskontrollstatusen til kildekoden deres i SonarQube.

Det finnes to løsninger:

  • Kjør et skript for å sjekke statusen for kildekoden i SonarQube. Hvis SonarQubes kildekodekvalitetssikring mislykkes, må byggingen mislykkes.
  • Vis status for kildekoden på prosjektets hovedside.

Installere SonarQube

For å installere sonarqube fra rpm-pakker, bruker vi repositoryet https://harbottle.gitlab.io/harbottle-main.

La oss installere repositorypakken for CentOS 7.

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

Installerer selve sonarqube.

yum install -y sonarqube

Under installasjonen vil de fleste programtilleggene bli installert, men du må installere findbugs og pmd.

yum install -y sonarqube-findbugs sonarqube-pmd

Start tjenesten og legg den til i oppstarten

systemctl start sonarqube
systemctl enable sonarqube

Hvis det tar lang tid å laste, legg til tilfeldighetstallgeneratoren /dev/./urandom på slutten av sonar.web.javaOpts-alternativene.

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

Kjører statuskontrollskriptet for kildekoden i SonarQube.

Dessverre har ikke sonar-break-maven-plugin-plugin blitt oppdatert på en stund. Så la oss skrive vårt eget skript.

Til testing vil vi bruke repositoriet https://github.com/uweplonus/spotbugs-examples.

Importer 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. Jeg testet om sonarqube sjekket oppgaver fullført med statusen «VELLYKKET». Så langt har det ikke vært noen andre statuser. Når jeg har andre statuser, vil jeg oppdatere .gitlab-ci.yml i dette innlegget.

Viser statusen for kildekoden på prosjektets hovedside

Installere SonarQube-pluginen

yum install -y sonarqube-qualinsight-badges

Gå til SonarQube på adressen http://172.26.9.115:9000/
Opprett en vanlig bruker, for eksempel «merker».
Logg inn på SonarQube med dette brukernavnet.

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Gå til «Min konto», opprett et nytt token, for eksempel kalt «read_all_repository», og klikk på «Generer».

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Vi ser at et token har dukket opp. Det vil bare dukke opp én gang.

Logg inn som administrator.

Gå til Konfigurasjon -> SVG-merker

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Kopier denne tokenen til feltet «Aktivitetsmerketoken» og klikk på lagre-knappen.

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

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

Merkebrukeren må ha merket av i boksen «Bla gjennom».

Testing.

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

La oss importere dette prosjektet.

Legg til .gitlab-ci.yml-filen i 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 pakkene til README.md, så vil de se slik ut:

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Koden for å vise merker ser slik ut:

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Parserer visningsstrengen for merkene:

[![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 man finner/sjekker prosjektnøkkelen og prosjekt-ID-en.

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

Viser kildekodekvalitetskontrollstatus i SonarQube til utviklere

Alternativer for å innhente målinger kan være se her.

Alle pull-forespørsler om forbedringer og feilrettinger send til dette arkivet.

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

Kilde: www.habr.com

Legg til en kommentar