如何防止在同一节点上同时执行作业,但允许执行几个并行步骤

时间:2019-01-30 12:29:26

标签: jenkins jenkins-pipeline jenkins-plugins

我有多分支工作,整个管道在某些节点上运行。目前,我有一个具有单个执行程序的从站,因此多个作业无法在同一节点上运行。   我想在管道中使用并行步骤,因此我需要增加执行程序的数量。防止并发作业执行的最佳方法是什么?   这种配置对于Jenkins自由式作业和节流插件来说是微不足道的-我简单地使用了“每个节点的最大并发构建数”。   但是在管道中,似乎无法对整个管道使用“油门”,我需要在每个步骤中使用它。   有更优雅的解决方案吗?

TIA, 维塔利

1 个答案:

答案 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