Affichage aux développeurs de l'état du contrôle qualité du code source dans SonarQube

SonarQube est une plate-forme ouverte pour le contrôle qualité continu du code source qui prend en charge un grand nombre de langages de programmation et vous permet de recevoir des rapports sur des mesures telles que la duplication de code, la conformité aux normes de codage, la couverture des tests, la complexité du code, les erreurs potentielles, etc. SonarQube visualise facilement les résultats de l'analyse et vous permet de suivre la dynamique du projet au fil du temps.


Tâche: montrer aux développeurs l'état du contrôle de la qualité du code source dans SonarQube.


Il existe deux solutions:


  • Exécutez un script pour vérifier l'état du contrôle qualité du code source dans SonarQube. Si le contrôle qualité du code source dans SonarQube échoue, l'assembly échoue.
  • Afficher l'état du contrôle qualité du code source sur la page principale du projet.

Installer SonarQube


Pour installer sonarqube à partir des packages rpm, nous utilisons le référentiel https://harbottle.gitlab.io/harbottle-main .


Installez le package de référentiel pour CentOS 7.


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

Installez sonarqube lui-même.


yum install -y sonarqube

La plupart des plugins seront installés pendant l'installation, mais findbugs et pmd doivent être installés


yum install -y sonarqube-findbugs sonarqube-pmd

Nous démarrons le service et l'ajoutons au chargement automatique


systemctl start sonarqube
systemctl enable sonarqube

Si le chargement est long, ajoutez le générateur de nombres aléatoires /dev/./urandom à la fin des options sonar.web.javaOpts


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

Exécution d'un script pour vérifier l'état du contrôle qualité du code source dans SonarQube.


, sonar-break-maven-plugin . .


https://github.com/uweplonus/spotbugs-examples.


Gitlab. .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 FAILED\e[0m";
          exit 1 #breaks the build for failure in Step2
      fi
  tags:
    - docker

.gitlab-ci.yml . sonarqube : "SUCCESS". . , .gitlab-ci.yml .



SonarQube


yum install -y sonarqube-qualinsight-badges

SonarQube http://172.26.9.115:9000/
, "badges".
SonarQube.



"My account", , "read_all_repository" "Genereate".



. 1 .


.


Configuration -> SVG Badges



"Activity badge token" save.



Administration -> Security -> Permission Templates -> Default template ( , ).


badges "Browse".


.


https://github.com/jitpack/maven-simple.


.


.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.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

SonarQube :



bages README.md e :



Le code d'affichage des badges ressemble à ceci:



Analyse de la chaîne d'affichage des badges:


[![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-)

Où obtenir / vérifier la clé du projet et l'ID du projet.


La clé de projet est située en bas à droite. L'URL contient l'ID du projet.



Les options pour obtenir des mesures peuvent être trouvées ici .


Toutes les demandes d'amélioration sont tirées, les corrections de bugs sont envoyées à ce référentiel .


Chat télégramme sur SonarQube https://t.me/sonarqube_ru
Chat télégramme sur DevSecOps - DevOps sûr https://t.me/sec_devops

Source: https://habr.com/ru/post/undefined/


All Articles