Configuration des analyses SonarQube

SonarQube offre un aperçu de la qualité et de la santé générale de votre code source et met en évidence les problèmes détectés dans le nouveau code. Les analyseurs de code détectent les bogues sensibles, comme par exemple les déréférences d'un pointeur NULL, les erreurs logiques et les fuites de ressources dans plus de 20 langages de code.

Configurez SonarQube pour analyser et mesurer en continu la qualité de votre code source :

  1. Dans la console " IBM Cloud, cliquez sur l'icône de menu " Icône de hamburger > " Automatisation de la plate-forme > " Chaînes d'outils. Sur la page Chaînes d'outils, cliquez sur la chaîne d'outils afin d'ouvrir sa page Vue d'ensemble. Vous pouvez également, depuis votre page de présentation de l'application, sur la carte Distribution continue, cliquer sur Afficher la chaîne d'outils. Ensuite, cliquez sur Vue d'ensemble.

    a. Cliquez sur Ajouter un outil.

    b. Dans la section Intégrations d'outils, cliquez sur SonarQube.

  2. Saisissez un nom pour cette instance de l'intégration d'outils SonarQube.

  3. Entrez l'URL de l'instance SonarQube que vous souhaitez ouvrir lorsque vous cliquez sur la carte SonarQube depuis votre chaîne d'outils.

  4. Facultatif : Saisissez le nom d'utilisateur que vous utilisez pour vous connecter au serveur SonarQube.

    Vous ne devez spécifier un nom d'utilisateur que si vous utilisez un mot de passe pour vous connecter au serveur SonarQube. Si vous utilisez un jeton d'authentification pour la connexion, laissez cette zone vide.

  5. Entrez le mot de passe ou le jeton d'authentification que vous utilisez pour vous connecter au serveur SonarQube.

  6. Si le serveur ne peut pas être sur l'Internet public, sélectionnez Avancé. IBM Cloud ne peut pas valider les détails de connexion que vous fournissez et certaines fonctions qui nécessitent un accès API à ce serveur sont désactivées. Le pipeline de distribution fonctionne uniquement à l'aide d'un agent privé qui dispose d'un accès réseau à ce serveur.

  7. Cliquez sur Créer une intégration.

  8. Sur la page Présentation de la chaîne d'outils, sur la carte Outils tiers, cliquez sur SonarQube pour afficher le tableau de bord de l'instance SonarQube à laquelle vous vous êtes connecté.

Ajout de Sonarqube au pipeline d'intégration continue

Instance SonarQube par défaut

  • Si sonarqube-config est défini sur default, SonarQube est utilisé par défaut pour l'analyse. Cette analyse s'exécute en tant que Docker-in-Docker.

L'instance utilisée est disponible uniquement lors de l'exécution. Par conséquent, vous ne pouvez pas accéder au tableau de bord.

  • Par défaut, le pipeline utilise l'édition de communauté SonarQube qui ne comporte que des vérifications checks.Many et les problèmes hostspot ne sont pas traités sous Community Edition.

  • Pour vérifier si une vulnérabilité est vérifiée dans l'édition Community, voir thread in Sonarqube community question

Pour télécharger SonarQube, voir SonarQube Downloads

Instance SonarQube sur le cluster de développement

Si sonarqube-config est défini sur cluster, le pipeline crée une instance SonarQube lors de l'exécution du pipeline dans le cluster de développement. Vous pouvez accéder à cette instance une fois que l'étape d'analyse statique a été runs.You pouvez accéder au tableau de bord SonarQube en local par réacheminement de port.

Instance SonarQube existante

Définissez sonarqube-config à custom, pour ajouter votre propre instance SonarQube à votre pipeline existant, ajoutez l'intégration d'outils à votre chaîne d'outils, puis ajoutez le paramètre d'intégration d'outils SonarQube au pipeline. Pour plus d'informations, voir Configuration de SonarQube.

Serveur Sonarqube avec certificat auto-signé

Si sonarqube-config est réglé sur custom pour utiliser un serveur sonarqube existant et que le serveur possède un certificat auto-signé, pour que le scanner sonar puisse se connecter avec succès au serveur sonarqube, le certificat auto-signé doit être ajouté aux certificats de confiance de l'autorité de certification.

En fournissant le certificat dans un format PEM (soit base64 encoded secret value ou PEM formatted plain text) comme valeur de la propriété pipeline/trigger sonarqube-root-certificate, la configuration sera ajoutée en fonction de l'utilisation de SonarScanner pour maven, SonarScanner pour gradle sonar ou SonarScanner invoquée avec Docker.

Paramètres

Pour exécuter l'analyse SonarQube, le pipeline a besoin des paramètres d'intégration continue suivants :

Continuous integration pipeline parameters
Nom Type Description Requise ou facultative
cluster-name Texte Nom du cluster de génération Docker. Obligatoire
dev-region Texte Région IBM Cloud qui héberge le cluster. Obligatoire
opt-in-sonar Texte Option permettant d'activer l'analyse sonarQube. Obligatoire
sonarqube Intégration d'outils Intégration de l'outil Sonarqube. Facultatif
sonarqube-config Texte Exécute une analyse SonarQube dans un conteneur Docker-in-Docker isolé (configuration par défaut) ou dans un cluster Kubernetes de développement existant (configuration de cluster). Vous pouvez également utiliser votre propre instance SonarQube et configurer l'intégration d'outils SonarQube (configuration personnalisée). Options: default, cluster ou custom. La valeur par défaut est default. Pour plus d'informations, voir (Ajout de SonarQube au pipeline d'intégration continue). Obligatoire
opt-in-sonar-points-chauds Texte Le scanner Sonarqube permet de détecter les points d'accès. Facultatif
portes de qualité opt-in-sonar Texte L'analyse Sonarqube permet de détecter les défaillances de la porte de qualité. Facultatif
analyse-sonar-pr-opt-in Texte Permettre à Sonarqube scan de faire l'analyse de la pull request (Cette option ne fonctionnera que si la PR ne provient pas d'un dépôt forké). Ce paramètre n'est valable que pour App-preview PR pipeline. Facultatif
jeton-utilisateur-sonarqube Secret Transmettre le jeton d'utilisateur utilisé pour l'accès à l'API dans le cas où sonarqube-config est défini sur custom Facultatif
certificat racine sonarqube Texte ou secret Si sonarqube-config est défini sur custom, le certificat autosigné est transmis sous la forme d'un texte formaté PEM ou d'un secret codé base64 Facultatif

Pour plus d'informations sur les paramètres des pipelines, voir Paramètres des pipelines.

Si vous ajoutez plusieurs intégrations d'outils SonarQube à votre pipeline, vous pouvez passer de l'une à l'autre en modifiant la valeur du paramètre de pipeline sonarqube, qui est un paramètre d'intégration d'outils.

Plug-in installés dans SonarQube

DevSecOps Pipelines utilise par défaut la version 10.0 de SonarQube.

Pour en savoir plus sur la liste des plug-in préinstallés, voir Plug-in

Problèmes signalés par SonarQube

DevSecOps Pipelines filtre les problèmes signalés lors de l'analyse de SonarQube. Les pipelines créent exclusivement des incidents de conformité pour les problèmes qui ne sont pas de type CODE_SMELL ou BUG. Le pipeline ignore également les problèmes dont le statut est CLOSED.

Activation de l'analyse des Pull Request dans le pipeline App Preview PR

L'option d'analyse PR est fournie dans le site App Preview PR pipeline si le PR provient du même dépôt que le dépôt cible (et non d'un fork). L'instance Sonarqube devrait également soutenir l'analyse des relations publiques. Les instances sonarqube par défaut utilisées en mode cluster et dind ne supportent pas cette fonctionnalité car l'analyse des pull requests est disponible à partir de sonarqube Developer Edition. La variable d'environnement opt-in-sonar-pr-analysis doit être ajoutée au pipeline et sa valeur ne doit pas être vide.

Activation du traitement des résultats du Quality Gate pour un projet SonarQube

Sur le site SonarQube, un Quality Gate est un ensemble de conditions qui déterminent si un projet répond aux normes de qualité requises par le code. Pour en savoir plus sur les Quality Gates, voir SonarQube Documentation.

SonarQube issue parser permet de traiter les résultats de SonarQube Quality Gate et de créer des problèmes en cas d'échec. Afin de permettre le traitement des résultats des portes de qualité, définissez la propriété de l'environnement opt-in-sonar-quality-gates comme étant 1.

Si opt-in-sonar-quality-gates est défini comme 1 et que vous utilisez votre propre instance SonarQube comme intégration (avec sonarqube-config défini comme custom), pour récupérer le nom du Quality Gate, vous pouvez générer un jeton d'utilisateur SonarQube avec l'autorisation requise pour accéder à SonarQube Web API et définir la propriété d'environnement de pipeline sonarqube-user-token avec le jeton comme valeur secrète. Pour plus de détails sur l'autorisation de jeton requise, veuillez consulter SonarQube token permission.

Si vous utilisez l'instance SonarQube créée par le pipeline ou une intégration personnalisée de l'outil SonarQube, suivez ces étapes pour naviguer dans le tableau de bord SonarQube:

  1. Accédez au tableau de bord SonarQube qui a été créé par l'URL à partir des journaux de pipeline dans la tâche static-scan.

    Tableau de bordSonarQube
    Tableaux de bordSonarQube

  2. Par défaut, la porte de qualité Sonar way est associée à tout projet qui n'est pas explicitement associé à une porte de qualité spécifique. Il est également possible de créer de nouvelles portes de qualité avec des conditions métriques personnalisées.

    • Pour consulter la liste des guichets de qualité dans le tableau de bord, cliquez sur Guichet de qualité dans la barre de navigation supérieure.

      SonarQube portail de qualité par défaut Portail de qualité par défaut
      SonarQube

    • Pour créer un nouveau guichet de qualité, cliquez sur Guichet de qualité dans la barre de navigation supérieure, puis sur Créer. Vous pouvez ajouter un nom au Quality Gate et ajouter/supprimer/mettre à jour les métriques de condition.

    • Pour rechercher le guichet de qualité associé au projet, sélectionnez le projet et cliquez sur Paramètres du projet > Guichet de qualité.

      SonarQube projet Quality Gate Quality Gate associé au projet
      SonarQube

    • Pour associer un Quality Gate (autre que celui par défaut) à un projet particulier, sélectionnez le projet et cliquez sur Project Settings > Quality Gate > Always use a specific Quality Gate > Sélectionnez le Quality Gate requis dans la liste déroulante > Save

      caption-side=bottom"
      SonarQube projet Quality Gate Associer le Quality Gate au projet

  3. Les nouvelles analyses sont évaluées en fonction de ce seuil de qualité et la preuve est créée sur la base des résultats du seuil de qualité. Les questions sont créées sur la base des conditions qui ont entraîné l'échec du portail de qualité.

    Exemple de format de résultat de l'état de la porte de qualité qui est la réponse de l'API de Sonarqube : ${SONAR_HOST_URL}/api/qualitygates/project_status?projectKey=${SONAR_PROJECT_KEY}:

    {
       "projectStatus": {
          "status": "ERROR",
          "conditions": [
             {
             "status": "ERROR",
             "metricKey": "new_coverage",
             "comparator": "LT",
             "errorThreshold": "80",
             "actualValue": "0.0"
             },
             {
             "status": "OK",
             "metricKey": "new_duplicated_lines_density",
             "comparator": "GT",
             "errorThreshold": "3",
             "actualValue": "0.0"
             },
             {
             "status": "ERROR",
             "metricKey": "new_security_hotspots_reviewed",
             "comparator": "LT",
             "errorThreshold": "100",
             "actualValue": "0.0"
             },
             {
             "status": "ERROR",
             "metricKey": "new_violations",
             "comparator": "GT",
             "errorThreshold": "0",
             "actualValue": "14"
             }
          ],
          "ignoredConditions": false,
          "period": {
             "mode": "PREVIOUS_VERSION",
             "date": "2025-03-18T09:43:25+0000"
          },
          "caycStatus": "compliant",
          "additional": {
             "qualityGateName": "Sonar way",
             "projectKey": "hello-compliance-app-compliance-check",
             "dashboardUrl": "http://localhost:9001/dashboard?id=hello-compliance-app-compliance-check"
          }
       }
    }
    
    

    Pour en savoir plus sur les API de SonarQube, veuillez vous référer à la documentation de Sonarqube WebAPI

    Une question est créée pour chaque clé métrique dont le statut est ERROR, ce qui permet de s'assurer que chaque métrique défaillante est suivie et traitée individuellement.

    Exemple de problème :

    caption-side=bottom"
    SonarQube issue Problème Sonarqube pour une métrique échouée

    Exemple : SonarQube Preuve échouée en raison d'une défaillance du Quality Gate :

    {
       "id": "abc",
       "evidence_type_id": "com.ibm.static_scan",
       "evidence_type_version": "1.0.0",
       "date": "2025-03-18T11:22:35.086Z",
       "origin": {
       },
       "details": {
          "result": "failure",
          "tool": "sonarqube",
          "failure_reason": "tool_detected_vulnerabilities"
       },
       "issues": [
          "https://github.com/<org-name>/compliance-issues-20250310111628285/issues/14",
          "https://github.com/<org-name>/compliance-issues-20250310111628285/issues/15"
       ],
       "findings": [
          {
             "id": "Metric: new_coverage",
             "due_date": "n/a",
             "severity": "high",
             "first_found": "2025-03-18",
             "url": "https://github.com/<org-name>/compliance-issues-repo/issues/14",
             "found_status": "existing",
             "has_exempt": false,
             "cvss": "n/a",
             "package": []
          },
          {
             "id": "Metric: new_security_hotspots_reviewed",
             "due_date": "n/a",
             "severity": "high",
             "first_found": "2025-03-18",
             "url": "https://github.com/<org-name>/compliance-issues-repo/issues/15",
             "found_status": "existing",
             "has_exempt": false,
             "cvss": "n/a",
             "package": []
          }
       ],
       "attachments": [
          {
             "hash": "d10a1e5d727b4f778a1d70c2ebaa2060251d56dd79",
             "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/d10a1e5d727b4f778a1d70c2e/content",
             "label": "app_issues"
          },
          {
             "hash": "d76d356cc4da1afc942a6259c1222a7b079607ea7e0d64",
             "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/d76d356cc4da1afc942a6259c1222a7b0/content",
             "label": "app_hotspots"
          },
          {
             "hash": "f0f84a2c2210a9c65c8430d577dafdd71bee6df5da",
             "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/f0f84a2c2210a9c65c8430d577dafdd71bee6e/content",
             "label": "app_quality_status_updated"
          }
       ],
       "assets": [
          {
             "hash": "1812f77dfc646c93320794810460acd3e53",
             "uri": "https://github.com/<org-name>/abcd/compliance-app-20250310111628285.git#7a06e70001a59032d1",
             "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/assets/1812f77dfc646c93320794810460acd3e/index.json"
          }
       ]
    }
    
    

Veillez à activer opt-in-sonar-quality-gates dans CC si c'est déjà le cas dans le pipeline CI. Dans le cas contraire, les problèmes de qualité de la porte d'entrée constatés par le CC seront autoclosés. Actuellement, des messages d'avertissement apparaissent dans les journaux concernant cette incohérence.

Pour en savoir plus sur SonarQube,, voir SonarQube Documentation.

Activation du traitement de SonarQube Hotspot

Un hotspot SonarQube met en évidence le code sensible à la sécurité qui nécessite un examen manuel pour déterminer s'il présente un risque réel. Il aide les développeurs à se concentrer sur les vulnérabilités potentielles sans générer de faux positifs. Pour en savoir plus sur la gestion des Hotspots, voir SonarQube Documentation.

Pour permettre le traitement des Hotspots SonarQube, définissez la propriété d'environnement opt-in-sonar-hotspots comme 1.

Si opt-in-sonar-hotspots est défini comme 1, et que vous utilisez votre propre instance SonarQube comme intégration (avec sonarqube-config défini comme custom), afin de récupérer les points chauds détectés par Sonarqube à l'aide de l'API Web, vous pouvez générer un jeton d'utilisateur SonarQube avec l'autorisation requise pour accéder à l'API Web SonarQube et définir la propriété d'environnement de pipeline sonarqube-user-token avec le jeton en tant que valeur secrète. Pour plus de détails sur l'autorisation de jeton requise, veuillez consulter SonarQube token permission.

  • Pour consulter les points sensibles de sécurité détectés par SonarQube pour un projet, sélectionnez le projet, puis cliquez sur Points sensibles de sécurité.

    SonarQube projet Hotspots Hotspots détectés par
    SonarQube

  • Pour examiner les hotspots détectés, sélectionnez le hotspot et cliquez sur Examiner. Une fenêtre modale s'affiche, vous permettant de définir le statut de l'examen comme l'un des suivants : To Review, Acknowledged, Fixed et Safe.

    SonarQube projet Hotspots Revue hotspots
    SonarQube

En activant l'indicateur opt-in-sonar-hotspots, des problèmes seront créés lorsqu'un Hotspot est détecté par SonarQube et que le statut de révision n'est pas défini : Acknowledged, Fixed et Safe.

SonarQube problème de hotspot problème de hotspot
SonarQube

Un exemple de format de résultat de hotspots qui est la réponse de SonarQube API :${SONAR_HOST_URL}/api/hotspots/search?projectKey=${SONAR_PROJECT_KEY}&p=$page&status=TO_REVIEW"

{
   "hotspots": [
      {
         "key": "AYLD_a1_Hqacjdg4wbDR",
         "component": "hello-compliance-app-compliance-check:index.js",
         "project": "hello-compliance-app-compliance-check",
         "securityCategory": "others",
         "vulnerabilityProbability": "LOW",
         "status": "TO_REVIEW",
         "line": 74,
         "message": "Make sure disabling content security policy frame-ancestors directive is safe here.",
         "author": "abc@1.com",
         "creationDate": "2022-04-01T06:29:13+0000",
         "updateDate": "2022-08-22T05:18:31+0000",
         "textRange": {
         "startLine": 74,
         "endLine": 84,
         "startOffset": 0,
         "endOffset": 1
         },
         "flows": [
         {
            "locations": [
               {
               "component": "hello-compliance-app-compliance-check:app.js",
               "textRange": {
                  "startLine": 76,
                  "endLine": 82,
                  "startOffset": 4,
                  "endOffset": 5
               }
               }
            ]
         }
         ],
         "rule": {
         "key": "javascript:S5732"
         }
      }
   ]
}

Si un point chaud d'état To Review est rencontré dans le résultat de l'API précédente, une preuve d'échec est recueillie, comprenant des informations sur le point chaud dans la section findings.

Exemple SonarQube: échec d'une preuve en raison de la détection d'un point chaud :

{
  "id": "62fc60140b2a761a969c6ad4f64d93d9c0f8f2301b1",
  "evidence_type_id": "com.ibm.static_scan",
  "evidence_type_version": "1.0.0",
  "date": "2025-03-18T10:29:00.896Z",
  "origin": {
  },
  "details": {
    "result": "failure",
    "tool": "sonarqube",
    "failure_reason": "tool_detected_vulnerabilities"
  },
  "issues": [
    "https://github.com/<org-name>/compliance-issues-20250310111628285/issues/13"
  ],
  "findings": [
    {
      "id": "javascript:S4426",
      "due_date": "n/a",
      "severity": "high",
      "first_found": "2025-03-18",
      "url": "https://github.com/<org-name>/compliance-issues-20250310111628285/issues/12",
      "found_status": "new",
      "has_exempt": false,
      "cvss": "n/a",
      "package": []
    },
    {
      "id": "Hotspot: javascript:S2068",
      "due_date": "n/a",
      "severity": "high",
      "first_found": "2025-03-18",
      "url": "https://github.com/<org-name>/compliance-issues-20250310111628285/issues/13",
      "found_status": "new",
      "has_exempt": false,
      "cvss": "n/a",
      "package": []
    },
  ],
  "attachments": [
    {
      "hash": "e579a1ab8025d280d5870eb8d4464d6d6a41a22",
      "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/e579a1ab8025d280d5870eb8d4464d6d6a41a/content",
      "label": "app_issues"
    },
    {
      "hash": "6defa891c320ae2b80ae76d03e168edc2379",
      "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/6defa891c320ae2b80ae76d03e168edc2379748d9/content",
      "label": "app_hotspots"
    },
    {
      "hash": "060a60e2d693427cde6064f72743ebb9e1d6",
      "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/attachments/060a60e2d693427cde6064f72743ebb9e1d/content",
      "label": "app_quality_status_updated"
    }
  ],
  "assets": [
    {
      "hash": "d7391b3273e5e52852f293031d62b9",
      "uri": "https://github.com/<org-name>/compliance-app-20250310111628285.git#4eadaaf7454b8cb0edad927",
      "url": "https://s3.us-south.cloud-object-storage.appdomain.cloud/assets/d7391b3273e5e52852f293031d62b9bf0/index.json"
    }
  ]
}

Veillez à activer opt-in-sonar-hotspots dans CC si c'est déjà le cas dans le pipeline CI. Dans le cas contraire, les problèmes de points névralgiques identifiés par le CC seront éliminés par autoclave. Actuellement, des messages d'avertissement apparaissent dans les journaux concernant cette incohérence.

Autorisations pour le jeton SonarQube

Dans le cas de l'utilisation d'une instance SonarQube existante et pour publier avec succès le testrecord dans Devops Insights et récupérer le nom du Quality Gate pour un projet, nous devons créer un User token avec les permissions requises et le définir comme valeur secrète dans la propriété env sonarqube-user-token afin de fournir la permission d'accéder aux enpoints Sonarqube requis.

Pour créer un jeton d'utilisateur, ouvrez SonarQube Dashboard > cliquez sur l'image de votre profil > sélectionnez Mon compte > sélectionnez Sécurité > dans le menu déroulant Type, sélectionnez Jeton d'utilisateur > cliquez sur Générer

SonarQube Jeton d'utilisateur Génération de jetons d'utilisateur
SonarQube

  1. Le plugin Devops Insights effectue les appels API suivants au serveur Sonarqube :

    • GET api/qualitygates/project_status

      Requiert l'une des autorisations suivantes :

      • administrer le système
      • droits d'administration sur le projet spécifié
      • parcourir le projet spécifié
      • exécuter l'analyse" sur le projet spécifié
    • GET api/mesures/composant

      Requiert l'autorisation "Parcourir" sur le(s) projet(s) spécifié(s). composant.

    • GET api/issues/search

      Requiert l'autorisation "Parcourir" pour le(s) projet(s) spécifié(s).

    • GET api/ce/task

      Requiert l'une des autorisations suivantes :

      • administrer" au niveau global ou au niveau du projet
      • exécuter l'analyse" au niveau global ou au niveau du projet
  2. Pour obtenir le nom du Quality Gate, le point final suivant est utilisé : SonarQube:

    • GET api/qualitygates/get_by_project

      Requiert l'une des autorisations suivantes :

      • administrer le système
      • droits d'administration sur le projet spécifié
      • parcourir le projet spécifié
  3. Pour récupérer les points d'accès détectés par SonarQube, le point de terminaison suivant SonarQube est utilisé :

Pour plus d'informations sur les autorisations d'accès à l'API Web SonarQube, veuillez consulter la documentation de l'API Web SonarQube

Utilisation de votre propre fichier de configuration

Vous pouvez modifier la configuration par défaut sans utiliser votre propre instance SonarQube. Créez un fichier sonar-project.properties dans le repo dans lequel vous voulez créer le fichier de configuration. Si notre script détecte un fichier configuration sonar-project.properties existant dans le référentiel, il utilise ce fichier au lieu du fichier par défaut. Pour plus d'informations sur les paramètres d'analyse possibles dans le fichier de configuration, voir Paramètres d'analyse ici.

Si sonar.branch.name est ajouté au fichier sonarqube-project.properties, la propriété sonar-branch-name est définie comme valeur par défaut, sinon le nom de la branche disponible à partir de load_repo <app-name> branch est pris en considération. Pour plus d'informations, reportez-vous à la documentation sur l 'analyse de branche.

Veillez à ajouter les données d'identification de connexion et l'URL d'hôte correctes dans le fichier de configuration.

Utilisation d'une autre implémentation d'analyse statique

Vous pouvez modifier votre fichier .pipeline-config.yaml pour ajouter votre propre script personnalisé à l'étape static-scan afin d'utiliser votre propre implémentation d'analyse statique.

Plus d'informations sur SonarQube

Pour en savoir plus sur SonarQube,, voir SonarQube Documentation.