首页 > 解决方案 > 如何在 Azure DevOps Pipelines 中安排阶段部署?

问题描述

使用经典的 Azure DevOps 发布管道,我们的发布流程非常容易设置。我们有一个构建管道在白天运行了很多次。成功后,它将部署到我们的开发环境中。每天晚上,在部署到 UAT 之前,最新成功的 dev 部署都会发布到我们的测试环境(运行几个小时的自动化测试)。但是通常我们还需要在白天进行部署测试,如果我们有新的更改需要直接进入测试或 UAT。经典管道允许我们跳过一个阶段,或者在前一个阶段仅部分成功的情况下进行部署。

1) Development - automatic
2) Test - nightly or manually
3) UAT - nightly or manually
4) Staging - manual approval
5) Production - manual approval

对于多级管道,相同的流程似乎很难做到。至少在将其作为单个部署管道时。第一部分很好。我们可以让我们的构建触发开发部署。但是,我们如何才能将测试环境的发布推迟到凌晨 0:30,同时仍然保留手动发布的能力呢?如果我创建了一个单独的测试环境管道,那么它可以在没有触发器但有时间表的情况下工作。与 UAT 相同,因为我们还需要手动运行 UAT 部署的灵活性,所以它也需要进入自己的管道。发布到我们的登台和生产环境,我们通过手动批准“门禁”,这很好。

虽然这在技术上可行,但如果我们将部署管道拆分为多个管道,则管理“发布”确实变得困难。并不是说如果我们为每个阶段创建一个单独的流水线,它就违背了整个多阶段流水线的原则。

但是,由于在经典管道中如此容易设置,所以我无法真正想象其他公司没有遇到同样的限制。是我一个人看不到光,还是真的不能用多级管道做到这一点?

标签: azure-devopsazure-pipelines

解决方案


手动运行 UAT 部署

我们可以在 yaml 构建中添加 Azure DevOps Multi-Stage Pipelines Approval Strategies。

脚步:

打开选项卡环境并单击按钮新环境-> 单击按钮批准和检查-> 我的环境名称是TEST

在此处输入图像描述

然后在 yaml 管道中使用它(只是一个示例):

trigger: none
 
pool:
  vmImage: 'ubuntu-latest'
 
stages:
- stage: A
  jobs:
  - deployment: 'MyDeployment'
    displayName: MyDeployment
    environment: 'TEST'
  - job: A1
    steps:
     - script: echo "##vso[task.setvariable variable=skipsubsequent;isOutput=true]false"
       name: printvar
 
- stage: B
  condition: and(succeeded(), ne(stageDependencies.A.A1.outputs['printvar.skipsubsequent'], 'true'))
  dependsOn: A
  jobs:
  - job: B1
    steps:
    - script: echo hello from Stage B

结果:

在此处输入图像描述

schedule Trigger我们还可以在多阶段管道中配置和使用它们。

注意:schedule triggerApproval Strategies在舞台级别中使用。


推荐阅读