在我们的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