node {
stage('Parallel Demo') {
// 并行的运行步骤
// 用于存储步骤的映射
def stepsToRun = [:]
for(int i = 1;i < 5;i++){
stepsToRun["Step${i}"] = {
node{
echo "start"
sleep 5
echo "done"
}
}
}
// 这里才是真正并行地运行步骤
// 以一个映射作为参数
parallel stepsToRun
}
}
在这个示例当中,stepsToRun = [:]是groovy语法,用来声明一个映射。循环开始迭代代码,设置映射的键为Step<循环计数器>以及映射的值为一个node代码块,在这个代码块当中,回显start,睡眠5s,然后回显done、传统的parallel流水线步骤接收一个映射作为参数,对于这个结构,映射的值通常是由一些pipe步骤构成的闭包,把这些步骤封装在不同的节点中就可以实现最佳的并行性。如果没有明确指定节点,Jenkins会在空闲的节点上运行这些parallel步骤。在上面的代码中,最后执行一个parallel步骤,该步骤以stepsToRun这个映射作为参数。
最后执行的效果如上图所示。请注意,既然我们没有明确指定节点,那么每个步骤都可以在任何一个可用节点上运行。如果仔细观察,就可以发现这些并行步骤时交替输出的,这一点和并行任务的运行一样。



