Jenkins管道:动态并行执行步骤

问题描述 投票:1回答:1

在我们的Jenkins管道中,我们使用以下函数以并行块的形式执行一组部署任务:

def runParallel(tasks, count) {
    while (tasks.size() > 0) {
        parallel tasks.take(count)
        tasks = tasks.drop(count)
    }
}

使用count参数,我们控制并行执行多少任务,因此网络不会因太多并行部署而淹没。

这很好,但是缺点是,如果一个块中的一个任务花费很长时间,则下一个块必须等待,直到前一个块完全完成为止。即使当前仅执行一项任务,并且有足够的资源来启动count - 1新任务。

因此,我们实际需要的不是用tasks任务将count分成固定大小的块,而是使用滑动窗口方法,以tasks的窗口大小遍历count并移至下一个窗口中的第一个任务完成后立即执行任务。这样,我们就没有基于块的方法所具有的等待时间。

AFAIK,启动后无法向parallel步骤添加更多任务。但是也许有解决方法?

理想情况下,parallel将采用控制并行度的参数。然后我们可以做:

parallel tasks, count
jenkins jenkins-pipeline jenkins-groovy
1个回答
1
投票
[您似乎很幸运,因为几周前发布了一个插件,您可以使用该插件进行存档:Jenkins Concurrent Step Plugin
© www.soinside.com 2019 - 2024. All rights reserved.