Azure DevOps 服务器 - YAML 管道条件重试作业

Azure DevOps Server - YAML Pipeline condition retried jobs

我们正在使用 Azure DevOps Server 2020 和 YAML 管道。

由于 ADS 2020 中缺少自动重试功能,我自己构建了一个。 我在管道的末尾添加了一个阶段,该阶段具有 failed() 条件。因此,每当作业失败时,重试阶段就会启动,这将触发重试构建,尝试提供的 buildId 的失败作业。 到目前为止这是有效的。

一个很好的增强是我可以从构建列表中看到哪些构建已经通过了这个自动重试。 发生的情况是,当自动重试为 运行 时,失败的作业将重试,但由于最后的重试阶段取决于失败的作业,它也会重试。 假设失败的作业第二次成功,重试作业将不会再次 运行,最终状态为已跳过。

我想要实现的是重试作业将在 2 个条件下 运行。 失败()和类似“已重试”的东西。

有人知道如何实现吗? 我想过在构建中添加一个标签并以此为条件,但我认为这是不可能的。我可以在重试阶段第一次向管道添加变量,但我认为该变量在第二轮不可用。

是否有任何价值可以帮助我确定管道中的一项工作是否有第二次尝试?

解法: 感谢 Bright 的评论,我在最后阶段配置了以下条件

condition: or(failed(), gt(variables['System.StageAttempt'], 1)) 

有一个预定义的变量'System.JobAttempt'用来记录一个作业有运行/重试的次数。

同理,预定义变量'System.StageAttempt'用于记录一个阶段运行/重试的次数。

您可以在重试阶段的条件下使用这两个预定义变量之一。应该可以满足你的要求。

关于预定义变量的更多详细信息,您可以查看文档“Use predefined variables”。

并参考以下文档了解如何在条件下使用变量。