当jenkins管道节点内部时,Sonarqube质量门卡在待处理状态

Edd*_*die 6 jenkins sonarqube jenkins-pipeline sonarqube-scan

我们正在尝试添加Sonarqube扫描作为Jenkins管道脚本的一部分.我们有一个多模块maven项目,我们正在使用Maven Sonarqube插件来运行聚合扫描.要启动扫描,我们按照此处所示的Sonarqube文档中的说明进行操作(向下滚动到页面末尾).

所以管道脚本看起来像这样:

node {
    stage('SonarQube analysis') {
        withSonarQubeEnv('My SonarQube Server') {
            sh 'mvn clean package sonar:sonar'
        }
    }
}
stage("Quality Gate") {
    timeout(time: 1, unit: 'HOURS') { 
        def qg = waitForQualityGate() 
        if (qg.status != 'OK') {
            error "Pipeline aborted due to quality gate failure: ${qg.status}"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它按预期工作.但是由于我们在多个文件中使用它,我们希望尽可能减少重复代码,因此我们希望将它放在节点中,如下所示:

node {
    stage('SonarQube analysis') {
        withSonarQubeEnv('My SonarQube Server') {
            sh 'mvn clean package sonar:sonar'
        }
    }
    stage("Quality Gate") {
        timeout(time: 1, unit: 'HOURS') { 
            def qg = waitForQualityGate() 
            if (qg.status != 'OK') {
                error "Pipeline aborted due to quality gate failure: ${qg.status}"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,这会使质量门卡在PENDING状态,直到达到超时.我试图理解为什么会发生这种情况,以及如何避免在节点外移动质量检查.

任何帮助将不胜感激!

amu*_*niz 1

waitForQualityGate对 SonarQube 服务器执行HTTP 调用。

确保您的构建节点可以通过 HTTP 访问您的 SonarQube 实例(Jenkins master 可以访问它并不意味着构建节点也可以访问它)。

无论如何,正如我在评论中所说,在 a 中使用等待步骤node通常不是一个好主意。