OFQ-00005 Release Pipelines in Digital Services
Last updated: 1 October 2025
This standard defines how developers and infrastructure engineers must set up release pipelines in digital services; release pipelines are used in all deployed services except for static apps, which are controlled via the Build Pipelines
Requirement(s)
- Release pipelines MUST have a Dev stage that deploys automatically
- Release pipelines MUST have a Preprod stage that deploys manually
- Release pipelines MUST have a Prod stage that requires managerial approval
Release pipelines MUST have a Dev stage that deploys automatically
General Steps
Create a new pipeline
- Navigate to our Releases page on Dev Ops - Pipelines -> Releases
- Click on
+ New->New release pipeline
Set up the Release Artifact
- On the main pipeline sceen, click on
Add an artifact. - Choose the Source type of
Build. - Select the relevant build pipeline.
- Click
Add.
Set up the IaC Artifacts for Container Apps
This needs setting up for each environment
Dev:
1 On the main pipeline screen, click on Add an artifact.
2 Choose the source type of Azure Repo.
3 Select Project Ofqual.IM.
4 Select Source(repo) Ofqual.Infrastructure.
5 Select branch feature/deploy_dev_infra.
6 Set the alias _Ofqual.InfrastructureDev.
Pre Prod:
1 On the main pipeline screen, click on Add an artifact.
2 Choose the source type of Azure Repo.
3 Select Project Ofqual.IM.
4 Select Source(repo) Ofqual.Infrastructure.
5 Select branch feature/deploy_pprd_infra.
6 Set the alias _Ofqual.InfrastructurePprd.
Prod:
1 On the main pipeline screen, click on Add an artifact.
2 Choose the source type of Azure Repo.
3 Select Project Ofqual.IM.
4 Select Source(repo) Ofqual.Infrastructure.
5 Select branch feature/deploy_prd_infra.
6 Set the alias _Ofqual.InfrastructurePrd.
Container App
Set up first stage:
You will be prompted to select a template for the initial stage, this can be skipped and completed later.
- On the main pipeline screen in the Stages section select
+ Add->New stage. - Select to start with an empty job.
- Give the stage a name of
Dev.
Configure the task:
- On the Stages section on your
Devstage click on1 job, 0 taskto view in more detail. - On the Agent job tab click the
+button to add a new task. Do a search forcliand add the taskAzure Cli. - Fill in the empty fields
- Give a Display name of
Install container app extension. - Select the relevant Azure Subscription, for this stage it should be
Enterprise Dev/test 2024. - Script Type -
PowerShell. - Script Location -
Inline script. - Inline Script for dev -
az deployment group create ` --resource-group "$(ResourceGroupName)" ` --template-file ` "$(System.DefaultWorkingDirectory)/_Ofqual.InfrastructureDev/bicep/contApps/main_containerApp.bicep" ` --parameters ` "@$(System.DefaultWorkingDirectory)/{repo-name}/drop/Bicep/{name-of-config-file}" ` --parameters "imageTag=$(Build.BuildId)" - Give a Display name of
Set up Pipeline Variables
The scope for the following variables should all be Dev to match the name of the Dev Stage.
- On the tabs at the top of the main pipeline screen click on
Variables. - Under
Pipeline variablesadd in the following:- Name:
AcrUriValue: input the relevant container registry uri e.gofqdevportal.azurecr.io. - Name:
AppNameValue: input the relevant app name e.gofq-dev... - Name:
ImageUriValue: input the relevant uri e.gofqdevportal.azurecr.io/ofq-dev-expertsapply. - Name:
ResourceGroupNameValue: input the relevant resource group e.gRG-DEV-Experts.
- Name:
Function App
Set up first stage:
You will be prompted to select a template for the initial stage, this can be skipped and completed later.
- Select from the list (you may need to search for it)
Deploy a function app to Azure Functionsand click Apply. - Give the Stage a name of
Dev. - The stage will be created, this will be set up with a default Pre-deployment condition - this will be a trigger that will start the deployment to the Dev stage after a release (i.e. after an artifact has been published from the build pipeline and dropped into the release pipeline).
Configure the task:
- On the Stages section on your
Devstage click on1 job, 1 taskto view the task in more detail. - Fill in the empty fields
- Select the relevant Azure Subscription, for this stage it should be
Enterprise Dev/test 2024. - App type
Function App on Linux. - App service name - select the relevant App service. e.g
ofq-dev...
- Select the relevant Azure Subscription, for this stage it should be
- If you click on to the
Deploy Azure Function Apptask you should see the fields have been auto filled based on the fields you completed above.
App Service (DEPRECATED)
This is only to be used on legacy systems; new systems should deploy to container apps or function apps instead
Set up first stage:
You will be prompted to select a template for the initial stage, this can be skipped and completed later.
- Select from the list (you may need to search)
Azure App Service deploymentand click Apply. - Give the Stage a name of
Dev. - The stage will be created, this will be set up with a default Pre-deployment condition - this will be a trigger that will start the deployment to the Dev stage after a release (i.e. after an artifact has been published from the build pipeline and dropped into the release pipeline).
Configure the task:
- On the Stages section on your
Devstage click on1 job, 1 taskto view the task in more detail. - Fill in the empty fields
- Select the relevant Azure Subscription, for this stage it should be
Enterprise Dev/test 2024. - App type
Web App on Linux. - App service name - select the relevant App service. e.g
ofq-dev...
- Select the relevant Azure Subscription, for this stage it should be
- If you click on to the
Deploy Azure App Servicetask you should see the fields have been auto filled based on the fields you completed above.
Release pipelines MUST have a Preprod stage that deploys manually
Container App
Set up stage:
- On the main pipeline screen in the Stages section select
+ Add->New stage. - Select to start with an empty job.
- Give the stage a name of
Preprod.
Configure the first task:
- On the Stages section on your
Preprodstage click on1 job, 0 taskto view in more detail. - On the Agent job tab click the
+button to add a new task. Do a search forcliand add the taskAzure Cli. - Fill in the empty fields
- Give a Display name of
Install container app extension. - Select the relevant Azure Subscription, for this stage it should be
Enterprise Dev/test 2024. - Script Type -
PowerShell. - Script Location -
Inline script. - Inline Script -
az deployment group create--resource-group "$(ResourceGroupName)"
–template-file"$(System.DefaultWorkingDirectory)/_Ofqual.InfrastructurePprd/bicep/contApps/main_containerApp.bicep"
–parameters"@$(System.DefaultWorkingDirectory)/{repo-name}/drop/Bicep/{name-of-config-file}"
–parameters “imageTag=$(Build.BuildId)”
- Give a Display name of
Set up Pipeline Variables
The scope for the following variables should all be Preprod to match the name of the Preprod Stage.
- On the tabs at the top of the main pipeline screen click on
Variables. - Under
Pipeline variablesadd in the following:- Name:
AcrUriValue: input the relevant container registry uri. - Name:
AppNameValue: input the relevant app name e.gofq-preprod... - Name:
ImageUriValue: input the relevant uri. - Name:
ResourceGroupNameValue: input the relevant resource group.
- Name:
Function App
Set up stage:
- On the main pipeline screen in the Stages section select
+ Add->New stage. - Select from the list (you may need to search for it)
Deploy a function app to Azure Functionsand click Apply. - Give the stage a name of
Preprod.
Configure the Pre-deployment trigger:
- On this new stage click on the lighting bolt icon to see the Pre-deployment triggers.
- Change the trigger from
After releasetoManual only.
- Change the trigger from
Configure the task:
- Click on
1 job, 1 taskto view the task in more detail. - Fill in the empty fields.
- Select the relevant Azure Subscription, for this stage it should be
Enterprise Dev/test 2024. - App type
Function App on Linux. - App service name - select the relevant App service. e.g
ofq-preprod..
- Select the relevant Azure Subscription, for this stage it should be
- If you click on to the
Deploy Azure Function Apptask you should see the fields have been auto filled based on the fields you completed above.
App Service (DEPRECATED)
This is only to be used on legacy systems; new systems should deploy to container apps or function apps instead
Set up stage:
- On the main pipeline screen in the Stages section select
+ Add->New stage. - Select the task
Azure App Service deployment. - Give the stage a name of
Preprod.
Configure the Pre-deployment trigger:
- On this new stage click on the lighting bolt icon to see the Pre-deployment triggers.
- Change the trigger from
After releasetoManual only.
- Change the trigger from
Configure the task:
- Click on
1 job, 1 taskto view the task in more detail. - Fill in the empty fields.
- Select the relevant Azure Subscription, for this stage it should be
Enterprise Dev/test 2024. - App type
Web App on Linux. - App service name - select the relevant App service. e.g
ofq-preprod..
- Select the relevant Azure Subscription, for this stage it should be
- If you click on to the
Deploy Azure App Servicetask you should see the fields have been auto filled based on the fields you completed above.
Release pipelines MUST have a Prod stage that requires managerial approval
General Steps
Set up Manager Approval stage
This Stage will have no task applied to it.
Set up stage:
- On the main pipeline screen in the Stages section select
+ Add->New stage. - Select to start with an empty job.
- Give the stage a name of
Production - Manager Approval.
Configure the Pre-deployment trigger:
- On this new stage click on the lighting bolt icon to see the Pre-deployment triggers.
- Change the trigger from
After releasetoManual only. - Enable
Pre-deployment approvalsand select the relevant group as Approvers. - Set the Approval order to be
Any one user.
- Change the trigger from
Set up Production - Deploy stage
Container App
Set up stage:
- On the main pipeline screen in the Stages section select
+ Add->New stage. - Select to start with an empty job.
- Give the stage a name of
Production - Deploy.
Configure the first task:
- On the Stages section on your
Production - Deploystage click on1 job, 0 taskto view in more detail. - On the Agent job tab click the
+button to add a new task. Do a search forcliand add the taskAzure Cli. - Fill in the empty fields
- Give a Display name of
Install container app extension. - Select the relevant Azure Subscription, for this stage it should be
Microsoft Azure Enterprise 2025. - Script Type -
PowerShell. - Script Location -
Inline script. - Inline Script -
az deployment group create ` --resource-group "$(ResourceGroupName)" ` --template-file ` "$(System.DefaultWorkingDirectory)/_Ofqual.InfrastructurePrd/bicep/contApps/main_containerApp.bicep" ` --parameters ` "@$(System.DefaultWorkingDirectory)/{repo-name}/drop/Bicep/{name-of-config-file}" ` --parameters "imageTag=$(Build.BuildId)" - Give a Display name of
Set up Pipeline Variables
The scope for the following variables should all be Production - Deploy to match the name of the Production - Deploy Stage.
- On the tabs at the top of the main pipeline screen click on
Variables. - Under
Pipeline variablesadd in the following:- Name:
AcrUriValue: input the relevant container registry uri. - Name:
AppNameValue: input the relevant app name e.gofq-prod... - Name:
ImageUriValue: input the relevant uri. - Name:
ResourceGroupNameValue: input the relevant resource group.
- Name:
App Service (DEPRECATED)
This is only to be used on legacy systems; new systems should deploy to container apps or function apps instead
Set up stage:
- On the main pipeline screen in the Stages section select
+ Add->New stage. - Select the task
Azure App Service deployment. - Give the stage a name of
Production - Deploy.
Configure the Pre-deployment trigger:
- On this new stage click on the lighting bolt icon to see the Pre-deployment triggers.
- Change the trigger from
After releasetoAfter stage. - From the dropdown list select the stage
Production - Manager Approval. - Enable
Pre-deployment approvalsand select the relevant group as Approvers. - Set the Approval order to be
Any one user.
- Change the trigger from
Configure the task:
- Click on
1 job, 1 taskto view the task in more detail. - Fill in the empty fields.
- Select the relevant Azure Subscription, for this stage it should be
Microsoft Azure Enterprise 2024. - App type
Web App on Linux. - App service name - select the relevant App service. e.g
ofq-prod..
- Select the relevant Azure Subscription, for this stage it should be
- If you click on to the
Deploy Azure App Servicetask you should see the fields have been auto filled based on the fields you completed above.