【问题标题】:Azure DevOps Release Task to deliberately stop the ReleaseAzure DevOps 发布任务故意停止发布
【发布时间】: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


    【解决方案1】:

    很遗憾,没有“Gate”任务来阻止发布。

    或者,如果有一个“门”任务允许发布暂停并需要确认才能继续,这也可能有效。

    我们可以设置部署后条件或部署前条件来添加审批者。

    我们建议您在发布管道中的任务 11 到 50 上使用条件,在 Stage2 到 Stage6 上使用条件来跳过阶段任务。

    另外,我们可以添加任务 power shell tp 调用 REST API 来取消发布。

    【讨论】:

    • 非常感谢您解释这些选项,我正在尝试减少阶段的数量,因为每个阶段在逻辑上代表一个单一的环境,并且大多数与其他阶段无关(除了 PreProd 和生产阶段)。看起来自定义条件或 Powershell“取消”发布选项最适合我的场景。