如何在 Azure DevOps Pipelines 中安排阶段部署?

时间:2021-02-26 10:28:19

标签: azure-devops azure-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 部署,那么它也需要进入自己的管道。发布到我们的暂存和生产环境中,我们通过手动批准“关门”,这很好。

虽然这在技术上可行,但如果我们将部署管道拆分为多个管道,那么管理“发布”真的很困难。并不是说如果我们为每个阶段创建一个单独的管道,这有点违反整个多阶段管道原则。

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

2 个答案:

答案 0 :(得分:1)

<块引用>

手动运行 UAT 部署

我们可以在 yaml 构建中添加 Azure DevOps 多阶段管道审批策略。

步骤:

打开标签环境并点击按钮新建环境->点击按钮批准和检查->我的环境名称是TEST

enter image description here

然后在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

结果:

enter image description here

我们还可以配置 schedule Trigger 并在多级管道中使用它们。

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

答案 1 :(得分:0)

对于预定作业:您可以在 YAML 中使用类似的内容:

(复制自微软文档)

schedules:
- cron: string # cron syntax defining a schedule
  displayName: string # friendly name given to a specific schedule
  branches:
    include: [ string ] # which branches the schedule applies to
    exclude: [ string ] # which branches to exclude from the schedule
  always: boolean # whether to always run the pipeline or only if there have been source code changes since the last successful scheduled run. The default is false.

对于手动作业,您可以使用“创建发布”按钮手动创建和部署发布。请注意,有时这会与时间表产生冲突。此外,要“暂停发布”,请为发布设置一个批准者,然后在批准时推迟发布:

Defer

请注意,它采用 UTC,并且默认为明天 - 您可以将其更改为现在之后的任何时间。