必须构建步骤是持久的,以便与Jenkins工作流程并行运行



我正在试验jenkins工作流中的并行步骤。目前我的流程看起来(本质上)是这样的:

parallel 'Deploy-A-Machine': {
    node {
        input 'Shall we deploy the A machine?'
        step([$class: 'DeployMachineBuilder', deploymentName: aPodName])
    }
}, 'Deploy-B-Machine': {
    node {
        input 'Shall we deploy the B machine?'
        step([$class: 'DeployMachineBuilder', deploymentName: bPodName])
    }
}

两个输入显示为在不同的执行器上运行,但是当我在两个执行器上单击"proceed"时,实际上只有第一个部署开始。部署作为为遗留作业编写的自定义插件运行,并以极低的方式转换为工作流。我没有看到任何关于等待执行器的明显消息,部署只是没有开始。第一个任务完成后,第二个任务将立即开始。

我必须实现DurableTask(或其他东西?)之前并行步骤将允许两者运行?到目前为止,我的转换非常轻,所以也许是时候尝试更真实的转换了。

假设DeployMachineBuilder是您编写的SimpleBuildStep,实际上它的perform方法只会在其持续时间内阻塞Workflow虚拟机:Groovy解释器使用coöperative多任务处理。

在可行的情况下,最简单的解决方案是使用sh步骤而不是自定义构建器。这存活slave断开和/或Jenkins重启,并显示增量进度,并与parallel正常工作。JENKINS-26055将提供一种更方便的方式来定义自定义的"持久"步骤。JENKINS-25879将提供一种更方便的方式来定义不持久的步骤,但至少避免阻塞本机线程(因此在parallel中表现更好,并且增量记录)。

顺便说一下,在您的示例脚本中,我建议将input步骤移出node块:在等待(可能无限期)用户批准时占用执行器是没有意义的。

最新更新