防止取消PR更改的部署作业



我们有一个Azure DevOps YAML多级管道,在其中构建代码,然后将其部署到一系列环境中。使用Terraform实现部署。

Builds -> Test -> Deploy to DEV -> Deploy to TEST - - ->

此管道既用于CI/CD构建,也用于PR构建。对于PR构建,部署阶段的唯一部分是在TF脚本上运行terraform plan

对于PR,如果更改被推送到该PR,则管道被配置为取消正在进行的构建。

我们看到的问题是,当更改被推送到PR并且正在进行的构建被取消时,有时这种取消会在terraform plan步骤中发生。这偶尔意味着terraform plan占用的blob租约不会释放。从那时起,为了使部署阶段成功运行,需要手动干预(打破blob租约(。

我相信,如果推动更改,我们可以关闭导致正在进行的PR构建被取消的设置。

但我想知道是否有一种方法可以将管道步骤标记为关键步骤,即如果构建被取消,它应该运行到完成

还有其他方法可以取消管道构建,并且必须有其他不应中途取消的任务/步骤。这样的critical-task设置也将覆盖这些情况。

不确定您是否解决了这个问题,但我遇到了完全相同的问题。当DevOps在推送其他更改后取消管道时,将condition: always()添加到我的任务中迫使它完成。

请参阅https://learn.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=azure-devops&tabs=yaml:

jobs:
- job: Foo
steps:
- script: echo Hello!
condition: always() # this step will always run, even if the pipeline is canceled

恐怕仅使用YAML无法实现这一点。你所能做的将需要一些额外的努力(在某些情况下相当大(:

  • 将terraform脚本替换为istance的二头肌-对我来说,语法iq非常相似,这里缺少terraform状态
  • 在你的第一步中,检查你的状态是否被锁定,并在需要时解除租约

我知道你希望听到比这更好的消息,但目前没有办法将任务标记为不可取消。然而,这听起来像是一个很酷的功能和功能请求的候选者。

最新更新