Devops 多级管道只需要一项批准

时间:2021-06-11 11:25:41

标签: azure-devops azure-pipelines-yaml azure-devops-pipelines

我有一个多阶段的 YAML 管道:

Build Solution
     |
     ▼
Terraform DEV         \
     |                 |
     ▼                 |
Deploy Function App    |  DEV Environment (No Approval Required)
     |                 |
     ▼                 |
Provision API Mgmt    /
     |
     ▼
Terraform TEST        \
     |                 |
     ▼                 |
Deploy Function App    |  TEST Environment (Approval Required)
     |                 |
     ▼                 |
Provision API Mgmt    /

我配置了两个环境(DEVTEST),在 TEST 环境中配置了 Approval,Terraform TEST 阶段有一个部署作业配置为使用 { {1}} 环境。这意味着,当管道到达 TEST 阶段时,会向 Terraform TEST 环境的审批者发送一封电子邮件并等待。

当该阶段获得批准后,构建将继续。

TEST 阶段还有一个针对管道那部分环境的部署作业。我的问题是,当它到达 Deploy Function App 环境的 Deploy Function App 时,它再次请求批准部署到 TEST 环境。

我的问题是:这是固定行为吗?即,无论何时在获得批准的环境中进行部署时,都需要新的批准吗?或者有没有办法改变它,这样一个管道只需要一个批准就可以部署(根据需要多次)到特定环境?

1 个答案:

答案 0 :(得分:1)

这是设计使然。如果回滚对先前管道运行的更改,则最好在将代码重新部署到环境之前获得批准。至于您有 3 个阶段且每个阶段都需要一个 approval this is by design 的场景:

<块引用>

一个阶段可以包含多个作业,每个作业可以消耗多个资源。在开始执行阶段之前,必须满足对该阶段使用的所有资源的所有检查。 Azure Pipelines 在每个阶段之前暂停管道的执行,并等待所有挂起的检查完成。检查是根据每次检查中指定的重试间隔重新评估。如果在指定的超时之前所有检查都没有成功,则不会执行该阶段。如果任何检查最终失败(例如,如果您拒绝对其中一个资源的批准),则不会执行该阶段。

在您给定的场景中,我可以建议 Terraform、函数应用和 APIM 部署属于同一阶段吗?这些 jobs could also be templatized 中的每一个都可以在您的其他环境中重复使用。这将消除用户错误批准这些内容的可能性(除非您已概述了dependsOn)或 Terraform Apply 是唯一发布的可能性。