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

SonarQube est une plate-forme d'assurance qualité du code open source qui prend en charge un large éventail de langages de programmation et fournit 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 bogues potentiels, etc. SonarQube visualise facilement les résultats de l'analyse et vous permet de suivre la dynamique du développement du projet au fil du temps.

Objectif : Montrer aux développeurs l'état du contrôle 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'assemblage échoue.
  • Afficher l'état du contrôle qualité du code source sur la page principale du projet.

Installation de SonarQube

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

Installons le package avec le référentiel pour CentOS 7.

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

Nous installons sonarqube lui-même.

yum install -y sonarqube

Lors de l'installation, la plupart des plugins seront installés, mais vous devrez installer findbugs et pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Lancez le service et ajoutez-le au démarrage

systemctl start sonarqube
systemctl enable sonarqube

Si le chargement prend beaucoup de temps, ajoutez un 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.

Malheureusement, le plugin sonar-break-maven-plugin n'a pas été mis à jour depuis longtemps. Alors écrivons notre propre script.

Pour les tests, nous utiliserons le référentiel https://github.com/uweplonus/spotbugs-examples.

Importation dans Gitlab. Ajoutez le fichier .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 FAILEDe[0m";
          exit 1 #breaks the build for failure in Step2
      fi
  tags:
    - docker

Le fichier .gitlab-ci.yml n'est pas parfait. Testé si les tâches d'analyse dans sonarqube se terminaient par le statut : "SUCCÈS". Jusqu'à présent, il n'y a pas eu d'autres statuts. Dès qu'il y aura d'autres statuts, je corrigerai .gitlab-ci.yml dans ce post.

Affichage de l'état du contrôle qualité du code source sur la page principale du projet

Installation du plugin pour SonarQube

yum install -y sonarqube-qualinsight-badges

Nous allons à SonarQube à http://172.26.9.115:9000/
Créez un utilisateur régulier, par exemple "badges".
Connectez-vous à SonarQube sous cet utilisateur.

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

Allez dans « Mon compte », créez un nouveau token, par exemple avec le nom « read_all_repository » et cliquez sur « Générer ».

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

On voit qu'un jeton est apparu. Il n'apparaîtra qu'une seule fois.

Connectez-vous en tant qu'administrateur.

Allez dans Configuration -> Badges SVG

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

Copiez ce jeton dans le champ « Jeton de badge d'activité » et cliquez sur le bouton Enregistrer.

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

Accédez à Administration -> Sécurité -> Modèles d'autorisation -> Modèle par défaut (et autres modèles dont vous disposerez).

L'utilisateur des badges doit avoir la case "Parcourir" cochée.

Essai.

Par exemple, prenons le projet https://github.com/jitpack/maven-simple.

Importons ce projet.

Ajoutez le fichier .gitlab-ci.yml à la racine du projet avec le contenu suivant.

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

Dans SonarQube, le projet ressemblera à ceci :

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

Ajoutez des sacs au README.md et ils ressembleront à ceci :

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

Le code d'affichage des badges ressemble à ceci :

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

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'identifiant du projet.

La clé du projet se trouve en bas à droite. L'URL contient l'identifiant du projet.

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

Les options pour obtenir des métriques peuvent être voir ici.

Toutes les demandes d'extraction d'améliorations, de corrections de bugs soumettre à ce référentiel.

Discussion par télégramme sur SonarQube https://t.me/sonarqube_ru
Discussion par télégramme sur DevSecOps - DevOps sécurisé https://t.me/sec_devops

Source: habr.com

Ajouter un commentaire