我如何在Jenkinsfile';s";平行;块

我如何在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节点的东西,但是在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部分可以执行为止。如果您有大量的执行者或者任务相当短,那么这可能不是问题。但如果你的遗嘱执行人很少,这可能会导致拥挤。如果您的执行者数量少于或等于需要后期工作的并行任务总数,那么您可能会陷入死锁