Azure YAML Pipeline schedule to run on the last Sunday of the month at 4 AM

53 views Asked by At

I want my Azure YAML pipeline to run on every last Sunday of the month at 4 AM. I currently have the following cronjob/schedule in my pipeline: current cron job

But this one runs every Sunday at 4 AM, which is way too often.

I have tried a couple of cronjobs already but none of them seem to do what I want:

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

I used Crontab.guru to check when these jobs will run. For example, 0 4 25-31 1-12/2 Sun, generates the following text: Crontab.guru description

To me it sounds like it will run based on two conditions:

  • At 4 AM every day from the 25th till the 31st
  • And on every Sunday of every 2 months from Jan till Dec, so every Sunday of January, March, May etc.

Is it even possible? Or does it require any scripting to implement this in an Azure YAML Pipeline?

Thank you!

1

There are 1 answers

0
Ziyang Liu-MSFT On BEST ANSWER

Cron syntax does not support “last Sunday of the month” directly. You can add a script at the start of your pipeline that checks if today is the last Sunday of the month. If not, it exits the pipeline early. Here’s an example for your reference:

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'

The pipeline will be triggered every Sunday at 4:00 AM UTC, but the steps you define will only be run on the last Sunday of each month.