SonarQube不会将状态为waitForQualityGate()返回给詹金斯吗?

时间:2019-05-19 15:50:33

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

我在jenkins管道中使用了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}"

              }
          }
      }

我还在sonarqube中配置了webhooks。但是,当我建立工作时,三个阶段的waitForQualityGate()不会将 ok 状态返回给jenkins,而是显示 在服务器“ sonarqube”上检查SonarQube任务“ AWrQj5In7abK9JVZ9”的状态 SonarQube任务“ AWrQj5In7abK9JVZ9”的状态为“ IN_PROGRESS”

,并且它正在继续加载,尚未完成。当我检入sonarqube服务器时,它显示响应:服务器不可达。我不在本地运行sonarqube,而是在 docker 上运行。可能是什么问题?

3 个答案:

答案 0 :(得分:2)

按照官方文档herehere的建议,通过在SonarQube Server上配置Jenkins实例的Webhook,我能够使waitForQualityGate()正常工作。

在SonarQube服务器配置中添加格式为<your-jenkins-instance>/sonarqube-webhook/的Webhook,指向您的Jenkins实例。请注意,斜杠很重要。

答案 1 :(得分:1)

配置SonarQube Webhook进行质量控制

管理>配置> Webhooks>创建

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

这为我解决了。因为我不知道这个钩子。配置完此功能后,一切都会顺利进行。

答案 2 :(得分:0)

尝试在检查前放置 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}"
    }
}  

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