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

标签 jenkins sonarqube jenkins-pipeline sonarqube-scan

我们正在尝试将 Sonarqube 扫描添加为 Jenkins 流水线脚本的一部分。
我们有一个多模块 maven 项目,我们使用 Maven Sonarqube 插件来运行聚合扫描。为了启动扫描,我们按照 Sonarqube 文档中的说明进行操作,如 here 所示。 (向下滚动到页面末尾)。
所以管道脚本看起来像这样:

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}"
        }
    }
}
它按预期工作。但是由于我们在多个文件中使用它,我们希望尽可能少的重复代码,所以我们希望将它放在节点中,如下所示:
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}"
            }
        }
    }
}
但是由于某种原因,这会使质量门停留在 PENDING 状态,直到达到超时。
我试图了解为什么会发生这种情况,以及可以做些什么来避免将质量门检查移到节点之外。
任何帮助将不胜感激!

最佳答案

waitForQualityGate执行 HTTP call到 SonarQube 服务器。

确保您的构建节点对您的 SonarQube 实例具有 HTTP 访问权限(有权访问它的 Jenkins 主节点并不意味着构建节点也拥有它)。

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

关于jenkins - 在 jenkins 管道节点内时,Sonarqube 质量门卡在待处理状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48733217/

相关文章:

java - 从 Jenkins 中的 Jacoco 覆盖范围中排除包

maven - 使用 maven 时覆盖 Sonar projectKey

java - Sonar 包排除以增加代码覆盖率

Jenkins 抛出 java.lang.IllegalArgumentException : Invalid refspec refs/heads/** Error

jenkins - Jenkins Pipeline Artifactory插件错误:无法读取生成的生成信息

jenkins - docker 组成和 Jenkins

git - 如何在 Groovyscript 中导入 Jenkins 插件?

Jenkins 运行并行脚本

java - 什么接口(interface)表示具有插入顺序迭代的 LinkedHashSet

用于 Jenkins 管道的 Android 模拟器