簡體   English   中英

Jenkins pipline 中的 Sonar Qube Quality Gates 插件

[英]Sonar Qube Quality Gates plugin in Jenkins pipline

我已經安裝並配置了一個 SonanarQube Quality Gates 插件,並在非流水線作業中成功配置了它。 但是當你嘗試在 pipline 中配置它時,我會遇到不同的錯誤,當我嘗試像這樣制作 pipline 時:

stage ("SonarQube analysis") {
 dir('source') {
            def scannerHome = tool 'sonscanner';
             withSonarQubeEnv('sonar'){
               timeout(time: 1, unit: 'HOURS');
                 withSonarQubeEnv('sonar'){
                      def qg = waitForQualityGate()
             if (qg.status != 'OK') {
              error "Pipeline aborted due to quality gate failure: ${qg.status}"
      }
          } 
             } 
                } 
                  }         

我看到這個:

java.lang.IllegalStateException: There is no body to invoke
at org.jenkinsci.plugins.workflow.cps.CpsStepContext.newBodyInvoker(CpsStepContext.java:283)
at org.jenkinsci.plugins.workflow.cps.CpsStepContext.newBodyInvoker(CpsStepContext.java:95)
at org.jenkinsci.plugins.workflow.steps.TimeoutStepExecution.start(TimeoutStepExecution.java:46)

當作為 SonarQube 分析之后的單獨步驟時:

stage("Quality Gate"){
        timeout(time: 1, unit: 'HOURS') { // Just in case something goes wrong, pipeline will be killed after a timeout
            def qg = waitForQualityGate() // Reuse taskId previously collected by withSonarQubeEnv
        if (qg.status != 'OK') {error "Pipeline aborted due to quality gate failure: ${qg.status}"

          } else {

                echo 'Quality Gate PASSED'

            }

        }

    }

java.lang.IllegalStateException: Unable to get SonarQube task id and/or server name. Please use the 'withSonarQubeEnv' wrapper to run your analysis.
at org.sonarsource.scanner.jenkins.pipeline.WaitForQualityGateStep$Execution.processStepParameters(WaitForQualityGateStep.java:125)
at org.sonarsource.scanner.jenkins.pipeline.WaitForQualityGateStep$Execution.start(WaitForQualityGateStep.java:107)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:224)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)
at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)

當管道:

     stage ("SonarQube analysis") {

 dir('source') {

            def scannerHome = tool 'sonscanner';

             withSonarQubeEnv('sonar'){

            sh "${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=android -Dsonar.sources='${WORKSPACE}'/source -Dsonar.language=java -Dsonar.projectBaseDir='${WORKSPACE}'/source -Dsonar.java.binaries='${WORKSPACE}'/source/app/build/intermediates/classes/debug -Dsonar.junit.reportsPath='${WORKSPACE}'/sourceapp/build/test-results/testDebugUnitTest"

  }    

     }              

       }



  stage("Quality Gate"){

        timeout(time: 1, unit: 'HOURS') { // Just in case something goes wrong, pipeline will be killed after a timeout

            def qg = waitForQualityGate() // Reuse taskId previously collected by withSonarQubeEnv

            if (qg.status != 'OK') {error "Pipeline aborted due to quality gate failure: ${qg.status}"

            } else {

                echo 'Quality Gate PASSED'

            }

        }

    }

這個:

Caused: java.lang.IllegalStateException: Unable to parse response from https://sonar//api/ce/task?id=AWCYPE3v1VuUrqmUzLyR:

無法解析來自 https://sonar//api/ce/task?id=AWCYPE3v1VuUrqmUzLyR 的響應:

注意 url 中的雙 //。 您可以通過刪除 Jenkins 插件配置中的尾部斜杠輕松解決此問題。

在詹金斯:

  1. 管理詹金斯
  2. 配置系統
  3. SonarQube servers到名為SonarQube servers的部分
  4. Server URL刪除尾隨\\ ;)

它應該是這樣的:

https://sonarcloud.io

不是

https://sonarcloud.io/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM