azure-devops - 如何在 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 部署的灵活性,所以它也需要进入自己的管道。发布到我们的登台和生产环境,我们通过手动批准“门禁”,这很好。
虽然这在技术上可行,但如果我们将部署管道拆分为多个管道,则管理“发布”确实变得困难。并不是说如果我们为每个阶段创建一个单独的流水线,它就违背了整个多阶段流水线的原则。
但是,由于在经典管道中如此容易设置,所以我无法真正想象其他公司没有遇到同样的限制。是我一个人看不到光,还是真的不能用多级管道做到这一点?
解决方案
手动运行 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 trigger
和Approval Strategies
在舞台级别中使用。
推荐阅读
- java - 我不断收到这个 java.lang.illegatStateException
- d3.js - 如何使用缩放行为和变换移动 d3 地图?
- python - 如何在 cython 中包含 C++ 所需的路径?
- python - pandas:从第二个数据框的索引创建列
- installshield - 如何将文件安装到系统驱动器的文件夹中
- java - 插入具有重复唯一键的记录时如何获取主键
- r - 闪亮的反应性基础 - 需要反应性包装器吗?如果是这样,哪个和在哪里?
- javascript - 将值作为 js 字典返回,某些值未定义?
- python - Pip install qiskit:命令出错,退出状态为 255:
- sql - 用于连接两个按连接逻辑排序的表的最佳 SQL 查询