web-dev-qa-db-fra.com

Utilisation de waitForQualityGate dans un pipeline déclaratif Jenkins

L'étape d'analyse SonarQube (6.3) suivante dans un pipeline déclaratif dans Jenkins 2.50 échoue avec cette erreur dans le journal de la console: http://Pastebin.com/t2ja23vC . Plus précisement:

L'installation SonarQube définie dans ce travail (SonarGate) ne correspond à aucune installation configurée. Nombre d'installations pouvant être configurées: 1.

Mise à jour: après avoir remplacé "SonarQube" par "SonarGate" dans les paramètres Jenkins (sous les serveurs SonarQube, il correspondra donc au fichier Jenkins), une erreur différente s’affiche: http: // Pastebin. com/HZZ6fY6V

Java.lang.IllegalStateException: impossible d'obtenir l'ID de la tâche SonarQube et/ou le nom du serveur. Veuillez utiliser l'encapsuleur 'withSonarQubeEnv' pour exécuter votre analyse.


La scène est une modification de l'exemple de la documentation SonarQube: https://docs.sonarqube.org/display/SCAN/Analysing+with+SonarQube+Scanner+for+Jenkins#Analyse avecSonarQubeScannerforJenkins-AnalyzinginaJenkinspipeline

stage ("SonarQube analysis") {
     steps {
        script {
           STAGE_NAME = "SonarQube analysis"

           if (BRANCH_NAME == "develop") {
              echo "In 'develop' branch, don't analyze."
           }
           else { // this is a PR build, run sonar analysis
              withSonarQubeEnv("SonarGate") {
                 sh "../../../sonar-scanner-2.9.0.670/bin/sonar-scanner"   
              }
           }
        }
     }
  }

  stage ("SonarQube Gatekeeper") {
     steps {
        script {
           STAGE_NAME = "SonarQube Gatekeeper"

           if (BRANCH_NAME == "develop") {
              echo "In 'develop' branch, skip."
           }
           else { // this is a PR build, fail on threshold spill
              def qualitygate = waitForQualityGate()
              if (qualitygate.status != "OK") {
                 error "Pipeline aborted due to quality gate coverage failure: ${qualitygate.status}"
              } 
           }
        }
     }
  }     

J'ai également créé un Webhook, sonarqube-webhook, avec l'URL http://****/sonarqube-webhook/. Est-ce que ça devrait être comme ça, ou http://****/sonarqube/sonarqube-webhook? Pour accéder au tableau de bord du serveur, j'utilise http://****/sonarqube.

Dans la section Quality Gates de SonarQube, j'ai créé un nouveau portail de qualité:

enter image description here

Je ne sais pas si le réglage dans SonarGate est correct. J'utilise jenkins-mocha pour générer un fichier lcov.info utilisé dans Sonar pour générer les données de couverture.

Peut-être que le réglage de la qualité est le mauvais réglage? Le résultat final est d’échouer le travail à Jenkins si le pourcentage de couverture n’est pas atteint.

enter image description here

Enfin, je ne suis pas sûr que les configurations suivantes de la configuration du système Jenkins soient requises:

enter image description here

Et

(C’est 9000 et non 900 ... texte coupé dans la capture d’écran) enter image description here

4
Idan Adar

Il a été découvert qu’il s’agissait d’un bogue dans le scanner SonarQube pour Jenkins lors de l’utilisation d’un esclave Jenkins pour les travaux (si le travail est exécuté sur le maître, il fonctionnerait). Vous pouvez en lire plus ici: https://jira.sonarsource.com/browse/SONARJNKNS-282

J'ai testé cela en utilisant une version de test de la v2.61 du plug-in du scanner et j'ai constaté que cela fonctionnait. La solution consiste à mettre à niveau vers la v2.61 une fois publié.

Cette étape fonctionnera alors:

stage ("SonarQube analysis") {
   steps {
      withSonarQubeEnv('SonarQube') {
         sh "../../../sonar-scanner-2.9.0.670/bin/sonar-scanner"   
      }

      def qualitygate = waitForQualityGate()
      if (qualitygate.status != "OK") {
         error "Pipeline aborted due to quality gate coverage failure: ${qualitygate.status}"
      }
   }
}
3
Idan Adar

Le plugin SonarQube Jenkins analyse la sortie de la construction pour deux lignes spécifiques, qu’il utilise pour obtenir les propriétés de la tâche de rapport SonarQube et l’URL du projet. Si votre appel de sonar-scanner ne génère pas ces lignes, l'appel waitForQualityGate() n'aura pas l'ID de tâche pour les rechercher. Vous devrez donc déterminer les paramètres appropriés pour le rendre plus détaillé.

Voir les méthodes extractSonarProjectURLFromLogs et extractReportTask dans la classe SonarUtils du plug-in pour comprendre comment elles fonctionnent:

  • ANALYSIS SUCCESSFUL, you can browse <project URL> est utilisé pour ajouter un lien au badge (dans l'historique de construction)
  • Working dir: <dir with report-task.txt> est utilisé pour passer l'ID de tâche à l'étape waitForQualityGate
5
Jan Fabry

Si vous utilisez SonarQube dans un conteneur de menu fixe, vérifiez que la mémoire n'est pas épuisée. Nous étions au maximum. Ce qui semblait être le problème.

0
Carsten Svendsen