我如何在Jenkinsfile';s";平行;块
我对Jenkins和配置它的脚本还不熟悉,所以如果我说了什么愚蠢的话,请原谅我 我有一个脚本化的Jenkins管道,它将代码库的构建重新分配给多个节点,使用我如何在Jenkinsfile';s";平行;块,jenkins,groovy,parallel-processing,jenkins-pipeline,Jenkins,Groovy,Parallel Processing,Jenkins Pipeline,我对Jenkins和配置它的脚本还不熟悉,所以如果我说了什么愚蠢的话,请原谅我 我有一个脚本化的Jenkins管道,它将代码库的构建重新分配给多个节点,使用节点块实现,该块用并行块包装。现在,关键是在构建之后,我想对刚刚构建的文件执行特定操作,在构建代码的一个节点上,但只有在所有节点都完成之后。本质上,我想要的是类似于Jenkins节点的东西,但是在Jenkins节点之间 简而言之,我的Jenkins文件如下所示: def buildConf = ["debug", "release"] pa
节点
块实现,该块用并行
块包装。现在,关键是在构建之后,我想对刚刚构建的文件执行特定操作,在构建代码的一个节点上,但只有在所有节点都完成之后。本质上,我想要的是类似于Jenkins节点的东西,但是在Jenkins节点之间
简而言之,我的Jenkins文件如下所示:
def buildConf = ["debug", "release"]
parallel buildConf.collectEntries { conf ->
[ conf, {
node {
sh "./checkout_and_build.sh"
// and here I need a barrier
if (conf == "debug") {
// I cannot do this outside this node block,
// because execution may be redirected to a node
// that doesn't have my files checked out and built
sh "./post_build.sh"
}
}
}]
}
有什么办法可以做到这一点吗?您可以添加一个全局计数器,用于计算已完成任务的数量,您需要指示具有post job的每个任务等待,直到计数器等于任务总数,然后才能执行post task部分。像这样:
def buildConf = ["debug", "release"]
def doneCounter = 0
parallel buildConf.collectEntries { conf ->
[ conf, {
node {
sh "./checkout_and_build.sh"
doneCounter++
// and here I need a barrier
if (conf == "debug") {
waitUntil { doneCounter == buildConf.size() }
// I cannot do this outside this node block,
// because execution may be redirected to a node
// that doesn't have my files checked out and built
sh "./post_build.sh"
}
}
}]
}
请注意,每个具有post任务部分的任务都将阻止执行器,直到所有其他并行任务完成并且post部分可以执行为止。如果您有大量的执行者或者任务相当短,那么这可能不是问题。但如果你的遗嘱执行人很少,这可能会导致拥挤。如果您的执行者数量少于或等于需要后期工作的并行任务总数,那么您可能会陷入死锁