我们正在尝试将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/