web-dev-qa-db-ja.com

Jenkins宣言型パイプラインでwaitForQualityGateを使用する

Jenkins 2.50の宣言パイプラインの次のSonarQube(6.3)分析ステージは、コンソールログのこのエラーで失敗します: http://Pastebin.com/t2ja23vC 。すなわち:

このジョブ(SonarGate)で定義されたSonarQubeインストールは、設定されたインストールと一致しません。構成可能なインストールの数:1。

更新:Jenkins設定で「SonarQube」を「SonarGate」に変更した後(SonarQubeサーバーの下、Jenkinsfileと一致します)、異なるエラー: http://Pastebin.com/HZZ6fY6V

Java.lang.IllegalStateException:SonarQubeタスクIDまたはサーバー名、あるいはその両方を取得できません。 'withSonarQubeEnv'ラッパーを使用して分析を実行してください。


このステージは、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}"
              } 
           }
        }
     }
  }     

また、webhook、sonarqube-webhook、URL http://****/sonarqube-webhook/。それがそのようなものであるか、http://****/sonarqube/sonarqube-webhook?サーバーダッシュボードにアクセスするには、http://****/sonarqube

SonarQubeのQuality Gatesセクションで、新しい品質ゲートを作成しました。

enter image description here

SonarGateの設定が正しいかどうかわかりません。 jenkins-mochaを使用してlcov.infoファイルを生成し、Sonarでカバレッジデータを生成するために使用します。

おそらく品質ゲートの設定は間違った設定ですか?最終結果は、カバレッジ%が満たされない場合、Jenkinsでジョブが失敗することです。

enter image description here

最後に、Jenkinsシステム構成の次の構成が必要かどうかはわかりません。

enter image description here

そして

(900ではなく9000です...スクリーンショットでテキストをカットします) enter image description here

8
Idan Adar

これは、Jenkinsスレーブをジョブに使用しているときに、JenkinsのSonarQubeスキャナーのバグであることが発見されました(ジョブがマスターで実行されている場合、動作します)。詳しくはこちらをご覧ください: https://jira.sonarsource.com/browse/SONARJNKNS-282

スキャナープラグインのv2.61のテストビルドを使用してこれをテストし、動作することを確認しました。解決策は、リリース時にv2.61にアップグレードすることです。

この段階で機能します:

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}"
      }
   }
}
4
Idan Adar

SonarQube Jenkinsプラグインは、SonarQubeレポートタスクプロパティとプロジェクトURLを取得するために使用する2つの特定の行のビルド出力をスキャンします。 _sonar-scanner_の呼び出しがこれらの行を出力しない場合、waitForQualityGate()呼び出しはそれらを検索するタスクIDを持ちません。そのため、より詳細にするために正しい設定を把握する必要があります。

プラグインの SonarUtils クラスのextractSonarProjectURLFromLogsおよびextractReportTaskメソッドを参照して、それらの動作を理解してください。

  • _ANALYSIS SUCCESSFUL, you can browse <project URL>_は、(ビルド履歴で)バッジへのリンクを追加するために使用されます
  • _Working dir: <dir with report-task.txt>_は、タスクIDをwaitForQualityGateステップに渡すために使用されます
6
Jan Fabry

DockerコンテナでSonarQubeを実行している場合は、メモリが使い果たされていないことを確認してください。限界に達していました。これが問題のようです。

0