Lukas K
Lukas K

Reputation: 6389

Execute a stage in DevOps Release pipeline every night on scheduler

I have an Azure DevOps CI Build and Release pipeline in following setup:

I would like to add a 3rd stage (called eg. MONITOR) which would run after the PROD release every night using the same drop as the PROD stage used, with following schema:

[Build Drop] -> [INT] -> manual approval: [PROD] -> nightly scheduler: [MONITOR]

This seems to be impossible to me, do you know how to achieve this goal?

Following is crucial for me:

I tried so far following:

do you have better ideas? many thanks

Upvotes: 1

Views: 2799

Answers (3)

Josh Gust
Josh Gust

Reputation: 4445

What I would do is have 2 separate Release Pipelines.

enter image description here

enter image description here enter image description here

This allows you to schedule the release without producing a new artifact (scheduled build).

Then, I would do some of what @Soccerjoshj07 suggested in that I would invoke the REST api in a task on the MONITOR pipeline/stage.

I would make the REST api call to the Releases endpoint to get the top=1 releases for releasedefinitionid=x. Then use the Release Environment endpoint to get the PROD environment for that latest release id. With the environment in hand, check the status for succeeded. If not, fail the release.

Edit as per new requirement outlined in comment

Given PROD.1 is succeeded and PROD.2 is failed when MONITOR is triggered, then the artifact from PROD.1 should be used for MONITOR.

With this criteria I would change some things. Rather than have the MONITOR go digging for the latest PROD release and fail if the latest is failed, I would make the successful PROD stage tag its build artifact and employ artifact filters on the Monitor pipeline.

The tagging can occur via the REST api or using the Tag Build or Release Task from Colin's ALM Corner Build & Release Tools and might look like this:

enter image description here enter image description here

Upvotes: 1

Hugh Lin
Hugh Lin

Reputation: 19491

Beside setting up two release pipelines, if you want to use scheduled trigger for only one Stage, I am afraid there is no such out of box way to achieve that, scheduled trigger is only for entire pipeline.

As a workaround, you can add a custom condition for the job of MONITOR stage.

For example in yaml:

- stage: MONITOR
   jobs:      
   - job:
     condition: and(always(), eq(variables['Release.Reason'], 'Schedule'))
     steps:

In UI , you can set this in Run this job of agent job:

enter image description here

In this case, the stage only executed when the release triggered by scheduled trigger. If the release is triggered by other reasons, the MONITOR stage will be skipped .

The limitation of this workaround is that when your pipeline is triggered by a scheduled trigger, two other stages are also executed.

Or write a script with powershell task (in INT/PROD stages) to determine whether Release.Reason is Schedule. If yes , skip the current stage.

For how to obtain the latest artifact version of PROD and determine the deployment status of PROD, you can refer to the two answers above.

Upvotes: 0

Josh Johanning
Josh Johanning

Reputation: 1245

Are you using a YAML template, and if so have you played with the cron schedules? https://learn.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure-devops&tabs=yaml#scheduled-triggers

If using classic Release UI, I think you can have the definition trigger be on a schedule but that would queue the entire definition. You might have to get creative with variables and maybe create 'isScheduled=true' and use that to determine if it should skip tasks.

Other ideas: Create a logic app or function app that calls the REST API? Sample app and github link here: https://oshamrai.wordpress.com/2019/04/22/azure-devops-rest-api-19-queue-builds-and-download-build-results/

The Azure-Devops AZ CLI extension might be easier, though: https://learn.microsoft.com/en-us/cli/azure/ext/azure-devops/pipelines/build?view=azure-cli-latest#ext-azure-devops-az-pipelines-build-queue

Upvotes: 1

Related Questions