【发布时间】:2018-07-21 20:10:15
【问题描述】:
我们正在尝试将 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 状态,直到达到超时。 我试图了解为什么会发生这种情况,以及可以做些什么来避免将质量门检查移到节点之外。
任何帮助将不胜感激!
【问题讨论】:
-
将等待步骤放入节点不是一个好主意。该构建将不必要地持有一个代理(在等待阶段可能由另一个构建使用)。只需将调用放在
node中,您如何减少重复? -
我们在节点内部有一个函数调用(来自另一个文件)来进行构建,我们希望等待阶段成为函数的一部分,据我所知,我们无法创建在没有节点加载的情况下调用不同文件中的函数。如果我错了,请纠正我,因为我是新手。
-
您可以使用
readTrusted从node之外的CSM 签出中加载任何文件。
标签: jenkins sonarqube jenkins-pipeline sonarqube-scan