在Jenkins声明性管道

时间:2017-03-20 16:52:15

标签: jenkins sonarqube jenkins-plugins jenkins-pipeline sonarqube-scan

Jenkins 2.50中声明性管道中的以下SonarQube(6.3)分析阶段在控制台日志中失败并显示此错误:http://pastebin.com/t2ja23vC。更具体地说:

  

此作业(SonarGate)中定义的SonarQube安装与任何已配置的安装都不匹配。可配置的安装数量:1。

更改" SonarQube"

更新:到#S; SonarGate"在Jenkins设置中(在SonarQube服务器下,所以它与Jenkins文件匹配),我得到一个不同的错误:http://pastebin.com/HZZ6fY6V

  

java.lang.IllegalStateException:无法获取SonarQube任务ID和/或服务器名称。请使用' withSonarQubeEnv'包装器来运行您的分析。

该阶段是SonarQube文档中示例的修改: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}"
              } 
           }
        }
     }
  }     

我还使用网址sonarqube-webhook创建了一个webhook http://****/sonarqube-webhook/。应该是这样,还是http://****/sonarqube/sonarqube-webhook?要访问服务器仪表板,我使用http://****/sonarqube

在SonarQube的Quality Gates部分,我创建了一个新的质量门:

enter image description here

我不确定SonarGate中的设置是否正确。我使用jenkins-mocha生成一个lcov.info文件,该文件在Sonar中用于生成覆盖数据。

质量门设置可能是错误的设置吗?如果不满足coverage%,最终结果是在Jenkins中失败。

enter image description here

最后,我不确定Jenkins系统配置中是否需要以下配置:

enter image description here

(它的9000不是900 ...在屏幕截图中剪切文字) enter image description here

3 个答案:

答案 0 :(得分:5)

SonarQube Jenkins插件扫描两个特定行的构建输出,用于获取SonarQube报告任务属性和项目URL。如果您sonar-scanner的调用未输出这些行,则waitForQualityGate()调用将没有任务ID来查找它们。因此,您必须找出正确的设置,以使其更加详细。

请参阅插件的SonarUtils课程中的extractSonarProjectURLFromLogsextractReportTask方法,了解它们的工作原理:

  • ANALYSIS SUCCESSFUL, you can browse <project URL>用于添加徽章的链接(在构建历史记录中)
  • Working dir: <dir with report-task.txt>用于将任务ID传递给waitForQualityGate步骤

答案 1 :(得分:3)

这是Jenkins的SonarQube扫描程序中发现的一个错误,当使用Jenkins从属作业时(如果作业在主服务器上运行,它就可以工作)。您可以在此处阅读更多内容: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}"
      }
   }
}

答案 2 :(得分:0)

如果您在Docker容器中运行SonarCube,请检查内存是否耗尽。我们正在竭尽全力。似乎是问题所在。