大家早上好,
我正在尝试将我的 Jenkins 作业设置为在具有特定标签的节点上运行,但每个节点最多使用一个执行程序。这是因为所有具有相同标签的作业需要在节点上使用相同的工作空间,因此我们需要它们不重叠。尽管如果另一个作业以不同的标签启动,我们希望它仍然可以访问节点上的另一个可执行文件。
我首先尝试使用 Throttle Concurrent Build
插件,但如果我们在选项中设置并发作业属性,则 maxConcurrentPerNode
参数不起作用。这仍将执行管道,但忽略节点限制。
例如:
agent {
node {
label LABEL
customWorkspace LABEL
}
}
// Throttle a declarative pipeline via options
options {
throttleJobProperty(
categories: [LABEL],
limitOneJobWithMatchingParams: false,
maxConcurrentPerNode: 1,
maxConcurrentTotal: 0,
paramsToUseForLimit: '',
throttleEnabled: true,
throttleOption: 'project',
)
}
stages {
stage('sleep') {
steps {
sh "sleep 500"
echo "Done"
}
}
}
}
如果我尝试使用 lock
会发生类似的情况,因为它似乎没有在管道的该步骤中找到 NODE_NAME
环境变量。这会弹出错误并且不执行管道。
pipeline {
agent {
node {
label 'LABEL'
customWorkspace LABEL
}
}
options {
lock("${LABEL}-${NODE_NAME}")
}
stages {
stage('sleep') {
steps {
sh "sleep 500"
echo "Done"
}
}
}
}
您对如何实现这一点有任何想法吗?