【问题标题】:Require just One Approval for Devops Multistage PipelineDevops Multistage Pipeline 只需要一次批准
【发布时间】:2021-06-11 11:25:41
【问题描述】:

我有一个多阶段 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 阶段配置了使用 TEST 环境的部署作业。这意味着当管道到达Terraform TEST 阶段时,会向TEST 环境的审批者发送一封电子邮件,然后等待。

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

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

我的问题是:这是固定的行为吗?即,每当对环境进行部署并获得批准时,是否需要新的批准?或者有没有办法改变它,使管道只需要一次批准即可部署(根据需要多次)到特定环境?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,我认为你是对的。我使用阶段来帮助强制实施依赖关系,因为实际的管道更复杂(即有任意数量的部署作业都需要在 api 提供阶段之前完成)。
    • 很公平。默认操作是作业相互依赖;但是这个can be overwritten if using multiple agents。如果您需要暂停,另一个选项可能是 Manual Validation
    • 是的,我们似乎在默认情况下在多个代理上设置了并行构建(这对于真正可并行化的步骤很有用),所以我只需要巧妙地在模板文件中命名作业。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2018-09-28
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多