您如何延迟和安排阶段仅 运行 Azure Devops yaml 管道中的最新版本?

How do you delay and schedule a stage to only run the latest build in an Azure Devops yaml pipeline?

如何在多阶段 azure devops 管道中的特定时间将阶段安排到 运行 但仅针对最新版本?

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

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

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

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

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

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

How do you schedule a stage to run at a particular time of day in a multi stage azure devops pipeline but for only the latest build?

根据您的要求,我建议您可以使用cron parameters(Scheduled triggers)来设置部署。然后它可以在一天中的特定时间安排 运行 的舞台。

How would I ensure it only schedules the latest

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

同时,您可以使用condition来确定到运行的阶段。

这是我的例子:

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 触发时,它将 运行 第二阶段(部署)。

部署阶段将下载最新的 artifacts.It 然后不管那天有多少构建 运行。