如何在 post 构建操作中保持当前 Jenkins 作业执行直到依赖作业完成

How to hold the current Jenkins job execution until the dependency job completion in post build action

我有一个场景可以在 POST BUILD ACTION 中触发另一个构建,它需要 1m 才能完成,我只想让当前构建等到依赖作业完成(1m 持续时间)并更新状态(完成、失败、不稳定)。

就像我有一个名为 A 和 B 的作业名称。B 是需要 运行 in POST BUILD ACTION 在作业 A 中的依赖项。一旦作业 B 完成执行 (1M持续时间)我想发布 JOB A 的状态。JOB A 需要暂停,直到 JOB B 在 POST BUILD ACTION 中执行完成。

我怎样才能做到这一点?任何线索...

听起来是个棘手的问题,因为 POST BUILD 意味着作业 B 将在作业 A 完成后触发。

您可以尝试并行触发作业 A 和 B,对于作业 B,您可以将构建步骤添加到 Execute shell,例如 sleep 5m,因此作业 B一开始会睡 5 分钟,然后它会 运行 你想要的实际工作。在作业 A 中,您可以有一个 shell 脚本,该脚本将循环读取作业 B 的控制台输出,并且在作业 B 的控制台产生输出 Finished: 之后循环将完成,然后您可以继续基于作业输出的逻辑。

要读取控制台输出,您可以在循环中执行类似的操作(并为 Finished: 关键字执行 grep):

curl -u ${USERNAME}:${TOKEN} {JENKINS_URL}/job/{JOB_NAME}/lastBuild/consoleText | grep {what you need}

如果你不限制只在 Post Build 部分(例如,当你需要触发其他构建时,仅当 main构建是稳定的,但我认为通过 1 分钟的工作你根本不关心它)。

您只需要安装 Parameterized Trigger 插件,它将允许您在 Build 部分中添加 Trigger/call builds on other projects 部分(而不是 Post 构建)。并且您还需要启用 Block until the triggered projects finish their builds 选项以等待您的作业 B 完成并检查作业 B 的状态:

您需要利用 PostBuildScript plugin together with the Parameterized Trigger 插件。 PostBuildScript 将为您提供一个称为执行脚本的 post-build 步骤,这将使您能够在 post-build 阶段添加一个参数化触发器构建步骤。因此,您可以将其配置为等待触发作业完成。