Azure YAML Pipeline 计划在每月最后一个星期日凌晨 4 点运行

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

我希望我的 Azure YAML 管道在每月最后一个星期日的凌晨 4 点运行。目前我的管道中有以下 cronjob/schedule: current cron job

但是这个每周日凌晨 4 点运行,这太频繁了。

我已经尝试了几个 cronjobs,但它们似乎都没有达到我想要的效果:

  • 0 4 25-31/1 * 周日
  • 0 4 * 1-12/2 0
  • 0 4 23-31/2 * 周日
  • 0 4 25-31 1-12/2 0

我使用 Crontab.guru 来检查这些作业何时运行。例如,0 4 25-31 1-12/2 Sun,生成以下文本: Crontab.guru description

对我来说,听起来它会根据两个条件运行:

  • 25日至31日每天凌晨4点
  • 从一月到十二月,每两个月的每个星期日,一月,三月,五月等的每个星期日。

这可能吗?或者是否需要任何脚本来在 Azure YAML 管道中实现此目的?

谢谢!

azure-devops cron continuous-integration continuous-deployment azure-pipelines-yaml
1个回答
0
投票

Cron 语法不直接支持“该月的最后一个星期日”。您可以在管道的开头添加一个脚本来检查今天是否是该月的最后一个星期日。如果没有,它就会提前退出管道。这是一个例子供您参考:

trigger:
- none

schedules:
- cron: "0 4 * * Sun"
  displayName: Monthly Pipeline Run
  branches:
    include:
    - main
  always: true

pool:
  vmImage: ubuntu-latest

steps:
- script: |
    # Get the last day of the month
    last_day=$(date -d "$(date +'%Y%m01') +1 month -1 day" "+%d")
    # Get today's date
    today=$(date +'%d')
    # Check if today is the last Sunday of the month
    if [ $((10#$today + 7)) -gt $((10#$last_day)) ]; then
      echo "Today is the last Sunday of the month. Continue with the pipeline."
      exit 0
    else
      echo "Today is not the last Sunday of the month. Stop the pipeline."
      exit 1
    fi
  displayName: 'Check if today is the last Sunday of the month'

管道将在每周日凌晨 4:00 UTC 触发,但您定义的步骤将仅在每月的最后一个周日运行。

© www.soinside.com 2019 - 2024. All rights reserved.