2

您如何安排一个阶段在多阶段 azure devops 管道中在一天中的特定时间运行,但只针对最新版本?

例如,假设我有一个组合的构建和发布管道......

  • 那天我做了 4 次签到
  • 创建了 4 个管道,每个管道都有一个构建和发布阶段(每个签入 1 个)。随着代码的合并,构建阶段完成
  • 我不想在每次签入后进行部署,因此我将发布阶段安排为通宵运行

一旦到达预定的发布时间,它是否会为当天创建的每个管道启动 4 个同时部署?我如何确保它只安排最新的?如果我想确保即使没有代码更改,它也能运行该部署阶段怎么办?

我可以通过使用最新的工件安排在特定时间创建和部署的版本来解决这个要求。然后,那天运行了多少构建并不重要。

4

2 回答 2

2

您如何安排一个阶段在多阶段 azure devops 管道中在一天中的特定时间运行,但只针对最新版本?

根据您的要求,我建议您可以使用cron 参数(计划触发器)来设置部署。然后它可以安排一个阶段在一天中的特定时间运行。

我将如何确保它只安排最新的

要使用最新的工件,您可以在部署阶段添加 [下载构建/管道工件任务] 2并将版本设置为最新。

同时,您可以使用条件来确定要运行的阶段。

这是我的例子:

schedules:
- cron: "0 0 * * *"
  displayName: Daily midnight build
  branches:
    include:
    - main
 
pool:
  vmImage: ubuntu-latest

stages:
- stage: A
  condition: eq(variables['Build.Reason'], 'IndividualCI')
  jobs:
  - job: A1
    steps:
      - task: PublishBuildArtifacts@1
        inputs:
          PathtoPublish: '$(Build.Sourcesdirectory)'
          ArtifactName: 'drop'
          publishLocation: 'Container'


- stage: B
  condition: eq(variables['Build.Reason'], 'Schedule')
  jobs:
  - job: B1
    steps:
      - task: DownloadBuildArtifacts@0
        inputs:
          buildType: 'specific'
          project: 'Googletest'
          pipeline: '507'
          buildVersionToDownload: 'latest'
          downloadType: 'single'
          artifactName: 'drop'
          downloadPath: '$(System.ArtifactsDirectory)'

结果:

当您签入更改并触发构建时,它将运行第一阶段(构建)。

当管道由 Schedule 触发时,它将运行第二阶段(部署)。

在此处输入图像描述

部署阶段将下载最新的工件。然后,那天运行了多少构建并不重要。

于 2021-03-18T03:12:21.523 回答
1

我建议将您的管道分成两个不同的过程:

  1. 构建验证:在每次签入时运行此程序以验证代码的完整性。
  2. 每晚部署:每晚按计划运行完整的构建和部署。

这消除了场景的复杂性,同时仍为您在签入时提供构建验证。

于 2021-03-10T19:29:37.870 回答