1

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

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])
    }
}

两个输入都显示为在不同的执行器上运行,但是当我在两者上单击“继续”时,实际上只有第一个部署开始。部署作为自定义插件运行,该插件是为遗留作业编写的,并且很少转换为工作流。我没有看到任何关于等待执行者的明显消息,部署只是没有开始。第一个完成后,第二个将立即开始。

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

4

1 回答 1

2

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

在可行的情况下,最简单的解决方案是使用sh步骤而不是自定义构建器。这可以在从属断开连接和/或 Jenkins 重新启动后继续存在,并显示增量进度并与parallel. JENKINS-26055将提供一种更方便的方式来定义自定义“持久”步骤。JENKINS-25879将提供一种更方便的方式来定义不持久的步骤,但至少避免阻塞本机线程(因此在parallel增量中表现得更好并记录)。

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

于 2015-07-21T14:08:59.763 回答