2

Die folgende SonarQube (6.3) -Auswertungsphase in einer deklarativen Pipeline in Jenkins 2.50 schlägt mit diesem Fehler im Konsolenprotokoll fehl: http://pastebin.com/t2ja23vC. Insbesondere:Verwenden von "waitForQualityGate" in einer deklarativen Jenkins-Pipeline

SonarQube installation defined in this job (SonarGate) does not match any configured installation. Number of installations that can be configured: 1.

Update: nach "Sonarqube" auf "SonarGate" in den Jenkins Einstellungen zu ändern (unter Sonarqube Servern, so dass es die Jenkinsfile entsprechen werde), erhalte ich einen anderen Fehler: http://pastebin.com/HZZ6fY6V

java.lang.IllegalStateException: Unable to get SonarQube task id and/or server name. Please use the 'withSonarQubeEnv' wrapper to run your analysis.


die Bühne ist eine Abwandlung des Beispiels aus der Sonarqube docs: https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins#AnalyzingwithSonarQubeScannerforJenkins-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}" 
       } 
      } 
     } 
    } 
    }  

Ich habe auch einen Webhook, sonarqube-webhook, mit der URL http://****/sonarqube-webhook/ erstellt. Sollte es so sein, oder http://****/sonarqube/sonarqube-webhook? Um auf das Server-Dashboard zuzugreifen, verwende ich http://****/sonarqube.

In Sonarqube der Quality Gates Abschnitt habe ich eine neue Qualität Tor:

enter image description here

Ich bin nicht sicher, ob die Einstellung in SonarGate korrekt ist. Ich verwende jenkins-mocha, um eine lcov.info-Datei zu generieren, die in Sonar verwendet wird, um die Coverage-Daten zu generieren.

Vielleicht ist die Qualität Gate-Einstellung die falsche Einstellung zu tun? Das Endergebnis besteht darin, dass der Job in Jenkins fehlschlägt, wenn die Abdeckung% nicht erreicht wird.

enter image description here

Schließlich bin ich, wenn die folgenden Konfigurationen in der Jenkins Systemkonfiguration nicht sicher sind, überhaupt erforderlich:

enter image description here

Und

(es ist 9000 nicht 900 .. (Text im Screenshot ausschneiden) enter image description here

Antwort

1

übergeben Dies wurde ein Bug in der SonarQube-Scanner für Jenkins entdeckt, wenn ein Je verwenden nkins-Slave für Jobs (wenn der Job auf dem Master ausgeführt wird, würde es funktionieren).Sie können mehr hier lesen: https://jira.sonarsource.com/browse/SONARJNKNS-282

Ich habe dies mit einem Test Build von v2.61 des Scanner-Plug-Ins getestet und fand es funktioniert. Die Lösung besteht darin, bei der Veröffentlichung auf Version 2.61 zu aktualisieren.

Diese Phase wird dann arbeiten:

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

Das SonarQube Jenkins-Plug-in durchsucht die Build-Ausgabe nach zwei bestimmten Zeilen, mit denen die SonarQube-Berichtsaufgabeneigenschaften und die Projekt-URL abgerufen werden. Wenn Ihr Aufruf von sonar-scanner diese Zeilen nicht ausgibt, wird der Aufruf waitForQualityGate() nicht über die Task-ID verfügen, um sie nachzuschlagen. Sie müssen also die richtigen Einstellungen herausfinden, um es ausführlicher zu machen.

Siehe extractSonarProjectURLFromLogs und extractReportTask Methoden in der SonarUtils Klasse des Plug-in zu verstehen, wie sie funktionieren:

  • ANALYSIS SUCCESSFUL, you can browse <project URL> wird verwendet, um einen Link zu dem Abzeichen (in der Build-Geschichte) hinzufügen
  • Working dir: <dir with report-task.txt> ist verwendet, um die Aufgabe ID an die waitForQualityGate Schritt
+1

Danke, aber all dies nicht in der Dokumentation für diese Funktion erwähnt. Tatsächlich ist das Dokument so leicht, dass es sehr plug & play wirkt. Wenn dies nicht der Fall ist, muss SonarQube die Integration wirklich reibungsloser gestalten als es scheint. –

+0

Das wird nicht erwähnt, weil es Details zur technischen Implementierung sind. Wir wollen es "plug and play" machen und sind zumindest bei Gradle-Projekten gescheitert. Trotzdem sollte es für andere Fälle funktionieren. Wir untersuchen ein Master/Slave-Problem. –

+0

Danke, ich benutze einen Slave in meinem Jenkins-Setup. Derselbe Slave (Erstellungsmaschine) enthält auch den SonarQube-Server. –

Verwandte Themen