针对不同的作业使用不同的计划(YAML)

问题描述 投票:0回答:2

我需要设置一个具有 2 个已定义计划的管道,一个用于在作业 1 中执行脚本 x,一个用于在作业 2 中执行脚本 y。

我会尝试在代码片段中展示我需要的内容:

schedules:
- cron: '0 16 * * *'
  displayName: 'schedule 1'
  branches:
    include:
    - master
  always: True
- cron: '0 4 * * *'
  displayName: 'schedule 2'
  branches:
    include:
    - master
  always: True



jobs:
- job: job x
  condition: eq( variables.schedule, 'schedule 1')
  ...
- job: job y
  condition: eq( variables.schedule, 'schedule 2')

我定义了两个计划,它们运行正确,但是我似乎无法弄清楚如何让作业“条件”符合当前的运行计划。

我找不到任何关于预定义变量的内容来说明有关时间表的任何信息。

azure azure-pipelines devops azure-pipelines-yaml
2个回答
1
投票

似乎应该将其分成两个单独的管道,如果它们必须共享其他作业,您可以将它们导入为模板以避免代码重复。

如果由于某种原因它们必须位于同一管道中,您可以创建一个简单的脚本来检查当前时间是否更接近

schedule 1
schedule 2
并根据 output 跳过其中一项作业:
condition: eq(dependencies.Foo.outputs['CheckTime.skipJob'], 'schedule 1')


0
投票

预定义变量Build.CronSchedule.DisplayName可用于条件决策。链接中还给出了一个示例。

对于给定的情况:

schedules:
- cron: '0 16 * * *'
  displayName: 'schedule 1'
  branches:
  include:
  - master
  always: True
- cron: '0 4 * * *'
  displayName: 'schedule 2'
  branches:
  include:
  - master
  always: True
...

jobs:
- job: job x
  condition: eq(variables['Build.CronSchedule.DisplayName'], 'schedule 1')

...
- job: job y
  condition: eq(variables['Build.CronSchedule.DisplayName'], 'schedule 2')
© www.soinside.com 2019 - 2024. All rights reserved.