【发布时间】:2024-01-11 08:20:01
【问题描述】:
我正在尝试找到一个发布任务,我可以将其放置在发布管道阶段的工作流程中,以有意停止发布。
我有一个大型配置管道,每个阶段有 50 个任务(和 6 个阶段)。除了少数例外,任务中的阶段是相同的,只是变量不同。
在第 10 个任务之后,如果某个变量为真,那么我想停止发布。这不是一个失败的发布(所以我不想将发布标记为失败),这只是意味着在第 10 个任务之后没有更多的事情可做。
我看到很多信息说在现有任务上创建条件,以便任务仅在条件评估为真时运行。
此 Microsoft 文档向我建议,在任务 11 到 50 上,我需要一个自定义条件,即“仅在变量 = true 时运行”。我可能误解了这种行为,可能还有其他方法可以达到相同的结果。
为什么我需要任务而不是条件?
条件似乎适合前置条件,而不是后置条件场景。如果它必须是一个条件,我宁愿说,“在第 10 个任务成功完成并且变量 = XYZ 后成功停止发布”,使用 后置条件,例如:
eq(variables['RunTasks11To50'], 'True')
对于一个前置条件(从第 11 个任务开始)执行 40 次是很痛苦的,而且它也容易出错,因为如果不深入研究任务就没有明显设置条件(不像禁用的任务是灰色的) .
- 如果有一个“停止发布”任务允许发布合法停止,那么我不需要在任务 11 到 50 上添加条件。
- 或者,如果有一个“门”任务允许发布暂停并需要确认才能继续,这也可能有效。
我担心的是,我需要在 40 个任务乘以 6 个阶段(6 个环境)上编写条件 eq(variables['RunTasks11To50'], 'True')。
我考虑了什么?
- 编写一个 Powershell 任务来调用 DevOps Rest API 来取消我自己的发布
- 以某种方式在运行时禁用 Tasks 11 到 50(同样可能需要 Powershell Task DevOps Rest API 调用)
- 当我错过了一些明显而简单的事情时,我想知道我是否正在寻找一个复杂的答案。
感谢您的建议。
【问题讨论】:
标签: azure azure-devops azure-pipelines-release-pipeline