构建步骤必须是持久的才能 运行 与 Jenkins 工作流并行?

Must build steps be Durable in order to run in parallel with Jenkins workflow?

我正在试验 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])
    }
}

两个输入在不同的执行器上显示为 运行ning,但是当我在两个上单击 "proceed" 时,只有第一个部署真正开始。部署 运行 作为自定义插件,该插件是为遗留作业编写的,并以最低限度转换为工作流。我没有看到任何关于等待执行者的明显消息,部署只是没有开始。第一期结束后,第二期马上开始

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

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

在可行的情况下,最简单的解决方案是使用 sh 步骤而不是自定义生成器。这在从站断开连接 and/or 后仍然存在 Jenkins 重新启动,并显示增量进度并与 parallel 一起正常工作。 JENKINS-26055 would provide a more convenient way to define custom “durable” steps. JENKINS-25879 将提供一种更方便的方法来定义不持久的步骤,但至少可以避免阻塞本机线程(因此在 parallel 中表现更好并增量记录)。

顺便说一句,在您的示例脚本中,我建议将 input 步骤移到 node 块之外:在等待(可能无限期)用户批准时占用执行程序没有意义.