我们正在尝试将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对SonarQube服务器执行HTTP call

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

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

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

10-11 02:34
查看更多