Het weergeven van de kwaliteitscontrolestatus van de broncode in SonarQube aan ontwikkelaars

SonarQube is een open source codekwaliteitsborgingsplatform dat een breed scala aan programmeertalen ondersteunt en rapportage biedt over statistieken zoals codeduplicatie, naleving van coderingsstandaarden, testdekking, codecomplexiteit, potentiële bugs en meer. SonarQube visualiseert op handige wijze analyseresultaten en stelt u in staat de dynamiek van projectontwikkeling in de loop van de tijd te volgen.

Doel: Ontwikkelaars de status tonen van de kwaliteitscontrole van de broncode in SonarQube.

Er zijn twee oplossingen:

  • Voer een script uit om de kwaliteitscontrolestatus van de broncode in SonarQube te controleren. Als de kwaliteitscontrole van de broncode in SonarQube niet slaagt, mislukt de montage.
  • Toon de kwaliteitscontrolestatus van de broncode op de hoofdprojectpagina.

SonarQube installeren

Om sonarqube vanuit rpm-pakketten te installeren, zullen we de repository gebruiken https://harbottle.gitlab.io/harbottle-main.

Laten we het pakket installeren met de repository voor CentOS 7.

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

We installeren sonarqube zelf.

yum install -y sonarqube

Tijdens de installatie worden de meeste plug-ins geïnstalleerd, maar u moet findbugs en pmd installeren

yum install -y sonarqube-findbugs sonarqube-pmd

Start de service en voeg deze toe aan het opstarten

systemctl start sonarqube
systemctl enable sonarqube

Als het laden lang duurt, voeg dan een generator voor willekeurige getallen /dev/./urandom toe aan het einde van de opties sonar.web.javaOpts

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

Een script uitvoeren om de status van de kwaliteitscontrole van de broncode in SonarQube te controleren.

Helaas is de plug-in sonar-break-maven-plugin al een hele tijd niet meer bijgewerkt. Dus laten we ons eigen script schrijven.

Voor het testen zullen we de repository gebruiken https://github.com/uweplonus/spotbugs-examples.

Importeren in Gitlab. Voeg het .gitlab-ci.yml-bestand toe:

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

Het .gitlab-ci.yml-bestand is niet perfect. Getest of scantaken in sonarqube eindigden met de status: "SUCCESS". Tot nu toe zijn er geen andere statussen geweest. Zodra er andere statussen zijn, zal ik .gitlab-ci.yml in dit bericht corrigeren.

Weergave van de kwaliteitscontrolestatus van de broncode op de hoofdprojectpagina

De plug-in voor SonarQube installeren

yum install -y sonarqube-qualinsight-badges

We gaan naar SonarQube om http://172.26.9.115:9000/
Maak een gewone gebruiker aan, bijvoorbeeld "badges".
Log onder deze gebruiker in op SonarQube.

Het weergeven van de kwaliteitscontrolestatus van de broncode in SonarQube aan ontwikkelaars

Ga naar "Mijn account", maak een nieuw token aan, bijvoorbeeld met de naam "read_all_repository" en klik op "Genereren".

Het weergeven van de kwaliteitscontrolestatus van de broncode in SonarQube aan ontwikkelaars

We zien dat er een token is verschenen. Hij zal slechts 1 keer verschijnen.

Log in als beheerder.

Ga naar Configuratie -> SVG-badges

Het weergeven van de kwaliteitscontrolestatus van de broncode in SonarQube aan ontwikkelaars

Kopieer dit token naar het veld 'Activiteitbadgetoken' en klik op de knop Opslaan.

Het weergeven van de kwaliteitscontrolestatus van de broncode in SonarQube aan ontwikkelaars

Ga naar Beheer -> Beveiliging -> Toestemmingssjablonen -> Standaardsjabloon (en andere sjablonen die u zult hebben).

Voor de badgegebruiker moet het selectievakje 'Bladeren' zijn aangevinkt.

Testing.

Laten we bijvoorbeeld het project nemen https://github.com/jitpack/maven-simple.

Laten we dit project importeren.

Voeg het bestand .gitlab-ci.yml toe aan de projectroot met de volgende inhoud.

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

In SonarQube ziet het project er als volgt uit:

Het weergeven van de kwaliteitscontrolestatus van de broncode in SonarQube aan ontwikkelaars

Voeg tassen toe aan README.md en ze zullen er als volgt uitzien:

Het weergeven van de kwaliteitscontrolestatus van de broncode in SonarQube aan ontwikkelaars

De weergavecode van de badges ziet er als volgt uit:

Het weergeven van de kwaliteitscontrolestatus van de broncode in SonarQube aan ontwikkelaars

De weergavereeks van de badges parseren:

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

Waar u de projectsleutel en project-ID kunt verkrijgen/controleren.

Projectsleutel bevindt zich rechtsonder. De URL bevat de project-ID.

Het weergeven van de kwaliteitscontrolestatus van de broncode in SonarQube aan ontwikkelaars

Opties voor het verkrijgen van statistieken kunnen zijn zie hier.

Alle pull-aanvragen voor verbeteringen en bugfixes indienen bij deze repository.

Telegramchat over SonarQube https://t.me/sonarqube_ru
Telegram-chat over DevSecOps - veilige DevOps https://t.me/sec_devops

Bron: www.habr.com

Voeg een reactie