Azure DevOps Multi-Stage Pipelines
Environments
Luckily, there are ways to get around this — the most simple way is to add an Environment and then add an Approval. Adding an Environment is simple enough, just click on Environment in your Pipeline and then add one with None selected under Resource;
Adding an environment {Source: MediaGlasses}
Once you have added the Environment you can then add an approval check, to do this click on the Environment you have just created and click on the three dots in the top right-hand side of the page. From the menu select Approvals and checks;
Adding an approval {Source: MediaGlasses}
Now we have an Environment and the Approval in place we can move onto the Pipeline.
Pipeline
I already had a multi-stage pipeline I have been using to demo a container build, so I decided to adapt that as it made sense to slot in an approval at the stage where our container image is built, tagged and pushed, there are a few stages before that though so lets take a quick look at those.
First up is the stage where the Resource Group is created;
As you can see, I am using the Azure CLI and variables which are defined in the header of the Pipeline.
Once the Resource Group has been created the next stage launches an Azure Container Registry if one doesn’t exist, if there is already one there then nothing happens;
As you can see, rather than defining a job
we are using a deployment
this means we can then use the environment
we created and because the environment
is what our approval is attached to the deployment won’t progress until approved.
One thing to note here is that there are two steps, the first checkout
step downloads a copy of the repo which our azure-pipelines.yml
and Dockerfile
are in, without this step the build would fail.
The second step builds, tags and then pushes the image to the Azure Container Registry launched in the previous stage.
The remaining stage, assuming the previous three stages have all completed, configures and launches an App Service Plan, App Service and then configures automatic deployment of any subsequent images which are pushed to our Azure Container Registry, as you can see the code below the steps are only executed if the App Service Plan has not been configured, if our Application is already running then these steps are skipped;
A full copy of the azure-pipelines.yml
file can be found in the following repo https://github.com/russmckendrick/docker-python-web-app.
Running the Pipeline
Now that we know what the pipeline looks like this what happened when it executed for the first time, first off, you (or whoever your approver is) will get an email;
The approval email {Source: MediaGlasses}
Once you click through to approve the deployment you should see something which looks like the following;
This time, other than checking to see if the application has already been deployed everything else in the fourth stage has been skipped.
Further Insights
Got 2 minutes to spare to watch our Managed DevOps offering?
Do you require a DevOps Managed Service?
How Not to Screw Up Your Move to Azure
Russ McKendrick
Practice Manager (SRE & DevOps)
Russ heads up the SRE & DevOps team here at N4Stack.
He's spent almost 25 years working in IT and related industries and currently works exclusively with Linux.
When he's not out buying way too many records, Russ loves to write and has now published six books.
To find out more about Russ click here!