SonarQube 不将 waitForQualityGate() 的状态返回给 jenkins?

Pra*_*ash 5 jenkins docker sonarqube jenkins-pipeline sonarqube-scan

我在詹金斯管道中使用了sonarQube。我已经在jenkins中安装了与sonarqube相关的所有插件。在jenkins配置系统中,我正确配置了sonarqube服务器,jenkins全局工具配置我正确配置了SonarQube Scanner。

这是詹金斯管道代码..

node{
stage('git checkout process'){
  echo 'started checkout'
  git 'https://github.com/ramkumar/sampleproject'
  echo 'completed sucessfully'
}

stage('compile package'){
  def mvnTool = tool name: 'Maven', type: 'maven'
  sh "${mvnTool}/bin/mvn clean install" 
}

  stage('SonarQube analysis') {
    withSonarQubeEnv('sonarqube') {
      mvnHome = '/opt/apache-maven/bin'
      sh "${mvnHome}/mvn sonar:sonar"

    }
  }

  stage("Quality Gate"){
          timeout(time: 1, unit: 'HOURS') {
              def qg = waitForQualityGate()
              if (qg.status != 'OK') {
                  emailext body: 'Your code was failed due to sonarqube quality gate', subject: 'Jenkins Failed Report', to: 'prakashpp666666@gmail.com'
                  error "Pipeline aborted due to quality gate failure: ${qg.status}"

              }
          }
      }
Run Code Online (Sandbox Code Playgroud)

我还在 sonarqube 中配置了 webhook。但是当我构建作业时,3阶段 waitForQualityGate() 不会将正常状态返回给詹金斯,而是显示 检查服务器“sonarqube”上的 SonarQube 任务“AWrQj5In7abK9JVZ9”的状态 SonarQube 任务“AWrQj5In7abK9JVZ9”状态为“IN_PROGRESS”

并且它正在持续加载,但尚未完成。当我检查 sonarqube 服务器时,它显示Response: Server Unreachable。我没有在本地运行 sonarqube,而是在docker上运行。可能是什么问题?

Sus*_*S N 9

为质量门配置 SonarQube Webhook

管理 > 配置 > Webhook > 创建

URL 应指向您的 Jenkins 服务器http://{JENKINS_HOST}/sonarqube-webhook/

这对我来说已经解决了。因为我不知道这个钩子。一旦我配置了这个,一切都很顺利。


Dav*_*988 3

尝试在检查之前 放置sleep(60)命令:

sleep(60)
timeout(time: 1, unit: 'MINUTES') {
    def qg = waitForQualityGate()
    print "Finished waiting"
    if (qg.status != 'OK') {
        error "Pipeline aborted due to quality gate failure: ${qg.status}"
    }
}  
Run Code Online (Sandbox Code Playgroud)

它为我解决了同样的问题。

  • 这可能是一个有用的解决方法,但并不能真正解决问题。问题是 SonarQube 在扫描完成后无法触发 Jenkins Webhook。通过添加延迟,SonarQube 可能可以在 waitForQualityGate 启动之前完成扫描,以便 waitForQualityGate 可以立即返回,而不是等待 webhook。如果出于某种原因扫描未完成,则 waitForQualityGate 仍会超时,因为 webhook 未被触发。 (2认同)