我有多分支工作,整个管道在某些节点上运行。目前,我有一个具有单个执行程序的从站,因此多个作业无法在同一节点上运行。 我想在管道中使用并行步骤,因此我需要增加执行程序的数量。防止并发作业执行的最佳方法是什么? 这种配置对于Jenkins自由式作业和节流插件来说是微不足道的-我简单地使用了“每个节点的最大并发构建数”。 但是在管道中,似乎无法对整个管道使用“油门”,我需要在每个步骤中使用它。 有更优雅的解决方案吗?
TIA, 维塔利
答案 0 :(得分:1)
如果我对您的理解正确,那么您可以为节点增加一些执行程序,并对所有工作(包括管道)使用Do not allow concurrent builds
选项(在工作的General
部分中)。
启用此选项后,您仍将能够在管道内部运行并行步骤(只是无法运行该管道的并发构建)。
如果您仍然希望允许并发构建选项,请尝试配置global throttle category(在Manage Jenkins -> Configure System
页中),然后在管道中使用它,例如插件documentation中的示例(您只需要将并行构建包装到throttle()
部分中即可)
// The script below triggers 6 subtasks in parallel.
// Then tasks will be throttled according to the category settings.
def labels = ['1', '2', '3', '4', '5', '6']
def builders = [:]
for (x in labels) {
def label = x // Need to bind the label variable before the closure
// Create a map to pass in to the 'parallel' step so we can fire all the builds at once
builders[label] = {
node('linux') {
sh "sleep 5"
}
}
}
throttle(['myThrottleCategory1', 'myThrottleCategory2']) {
parallel builders
}
注意:似乎这种可能性仅适用于scripted pipelines。