To see how to deploy a stage on Azure DevOps, you'll need to navigate to the Pipelines section of your project. From there, click on the pipeline that you want to deploy.
In the pipeline settings, click on the "Deploy" tab to view the deployment stages. You can see the stages listed in the "Stages" section. Each stage represents a specific deployment step.
To view the deployment steps in more detail, click on the stage that you're interested in. This will take you to the stage's settings page. From there, you can view the tasks and variables associated with that stage.
Setting Up Azure DevOps
Setting up Azure DevOps is a crucial step in deploying a stage on Azure DevOps. To start, you need to create your Azure DevOps project and variables.
You'll need to set up your Azure DevOps project by going to Pipelines and selecting New pipeline or Create pipeline if creating your first pipeline. Next, you'll select GitHub as the location of your source code and follow the wizard steps.
To define your pipeline, you'll need to include a trigger that runs when there's a code change to a branch, as well as define two variables: buildConfiguration and releaseBranchName. Your pipeline should also include a stage named Build that builds the web application.
Here are the key steps to set up your pipeline:
- Sign in to your Azure DevOps organization and go to your project.
- Go to Pipelines, and then select New pipeline or Create pipeline if creating your first pipeline.
- Select GitHub as the location of your source code.
- Define two variables: buildConfiguration and releaseBranchName.
- Include a stage named Build that builds the web application.
After setting up your pipeline, you can move on to the next step of deploying your stage to Azure DevOps.
Plan the
Planning the deployment stage on Azure DevOps involves breaking down the process into smaller, manageable steps. To start, we need to identify the requirements for the build, such as installing necessary tools and restoring dependencies.
The build process typically includes several stages, which can be grouped into a single stage and job for simplicity. This approach ensures that all steps are executed in the correct order, with each step dependent on the previous one. In our case, the build stage will include the following steps: installing build requirements, restoring dependencies, building, testing, publishing, and creating a build artifact.
Here's a simplified overview of the build stage:
- Install build requirements
- Restore dependencies (in this case, NuGet packages)
- Build
- Test
- Publish (create application packages)
- Create build artifact (to be used in future stages)
By breaking down the build process into these individual steps, we can ensure that each step is executed correctly and that the final build artifact is created successfully.
Configure Environments
To configure environments in Azure DevOps, you'll need to create a new environment under Pipelines in the navigation. This will automatically create a new environment, which you can then customize to suit your needs.
You can add specific users and/or groups to the list of approvers for an environment. For example, you might add a team lead or a QA engineer to ensure that deployments are thoroughly reviewed before they're approved.
In Azure DevOps, environments can be set up to have multiple types of checks, including approvals. To add an approval for a pipeline, select the Approvals option under the environment settings.
Here are the steps to create a new environment:
- From Azure Pipelines, select Environments.
- Select New environment.
- Create a new environment with the name staging and Resource set to None.
You can also add instance variables to your pipeline to refer to your development and staging host names. For example, you might create a variable group with the name "Release" and add two variables: "WebAppNameDev" and "WebAppNameStaging".
Here are the details for creating a variable group:
- In Azure DevOps, go to Pipelines > Library.
- Select + Variable group.
- Under Properties, add Release for the variable group name.
- Create a two variables to refer to your development and staging host names.
Once you've created your environment and added instance variables, you can update your pipeline to promote your build to the Dev stage. This will involve updating the azure-pipelines.yml file to include a Dev stage.
Deploy to Staging
To deploy to staging, you'll need to set up a deployment stage in your Azure DevOps pipeline. This stage will have a few new concepts compared to the build stage, including a deployment job and environment variables.
The deployment job is specially named to allow for additional options, including deployment history and deployment strategies. In this case, we're using the RunOnce strategy, which executes each lifecycle hook once and then runs an on: success or on: failure hook depending on the result.
Here's what the deployment stage should look like:
- The deployment job is named "deployment" and has a few steps to execute.
- Each lifecycle hook has its own set of steps to execute, including extracting files from a zip and deploying them to an Azure App Service.
- The environment variable "environment" is set to "Staging" to indicate that this is the staging environment.
Once you've set up the deployment stage, you can test it out by committing the updates and watching the pipeline run. The pipeline should now show both stages, including the build stage and the deployment stage.
Deploy to Production
Deploying to production is a crucial step in the deployment process. You need to update the stage and job names to indicate they are for production.
Make sure the dependsOn section has been updated to indicate a dependency on the build stage as well as the staging stage. This ensures that production is not released before or at the same time as staging.
The production stage should have all the proper dependencies. If you watched the pipeline run, you would have noticed that the production stage ran immediately after staging. This is not ideal, so you need to set an approval gate.
To set an approval gate, click on the three-dot menu in the top right and select Approvals and checks. This will ensure that the production stage is not released without proper approval.
Pipeline Triggers and Variables
Pipeline Triggers and Variables are crucial components of a multi-stage pipeline in Azure DevOps. They help reduce unnecessary pipeline runs and make the pipeline more flexible.
Specifying triggers in the YAML file allows you to control when the pipeline runs. For example, you can direct Azure DevOps to only run the build on pull requests created for the master branch and on a merge to the master branch.
A unique name for the build can be created using the "name" keyword. By default, it sets the date and the unique build ID in Azure, but you can modify it to the format desired for your team.
Variables are pipeline-specific properties that can be reused throughout the file. They are referenced using $(variableName) syntax, and can be used to store values such as the AgentImage, which can be used in multiple places in the pipeline.
Azure Multi-Stage Pipeline Deployment
Azure Multi-Stage Pipeline Deployment is a powerful feature in Azure DevOps that allows you to deploy your code to multiple environments with ease. You can create a pipeline with multiple stages, each with its own set of jobs and tasks.
A pipeline is comprised of stages, jobs, and steps. Stages can run sequentially or in parallel depending on how you set dependencies up. In the simplest case, you don't need any logical boundaries in your pipeline, but if you organize your pipeline into multiple stages, you use the stages keyword.
To add a stage to your release pipeline, select the release pipeline in the Releases page, select the action to Edit it, and then select the Pipeline tab. You can edit the name of the stage, designate a user or group as the stage owner, delete the stage, change the order of stages, save a copy of the stage as a stage template, and manage the security settings for the stage.
A stage can have multiple jobs, and each job can have multiple tasks. In the Dev stage, your pipeline will change the AzureWebApp@1 task to use your subscription. In the Staging stage, you want to have more control, so you'll add a manual approval.
Here are the key components of a multi-stage pipeline deployment:
- Stages: The top-level component of a pipeline, which can run sequentially or in parallel.
- Jobs: A collection of tasks that run in a stage.
- Tasks: Individual steps that run in a job.
- Steps: The smallest unit of work in a pipeline, which can be a script, a build task, or a deployment task.
In a multi-stage pipeline deployment, you can specify the stages, jobs, and tasks using YAML syntax. You can also use the Azure Pipelines interface to create and manage your pipeline.
Pipeline YAML Setup
Pipeline YAML Setup is a crucial step in deploying a stage on Azure DevOps. You can create a pipeline using the YAML syntax, which is supported by Azure Pipelines.
The pipeline hierarchy consists of Stages, Jobs, and Steps. A stage contains multiple jobs, and a job contains multiple steps. To create a pipeline, you need to define the structure of your pipeline using YAML syntax.
A multistage pipeline has a brief example of the structure, which includes Stages, Jobs, and Steps. The YAML syntax should be carefully formatted with indents and dashes to avoid errors.
Here's a breakdown of the key components of a pipeline:
- Stages: a collection of jobs that run sequentially or in parallel
- Jobs: a collection of tasks that run sequentially
- Steps: individual tasks that make up a job
The Azure DevOps documentation provides a good breakdown of the pipeline hierarchy and supported YAML syntax. You can also use syntax checker add-ons in Visual Studio Code to prevent errors.
In a deployment pipeline, you can have multiple stages with different jobs and steps. For example, the staging instance may have a separate stage with its own jobs and steps.
Here's a comparison of the build stage and the deployment stage:
Prerequisites and Setup
To get started with deploying a stage on Azure DevOps, you'll need to set up a few things first. Create a GitHub account and create a repository for free. You'll also need an Azure account with an active subscription, which you can create for free.
To deploy a stage on Azure DevOps, you'll need an Azure DevOps organization and project, which you can also create for free. You can run pipelines on Microsoft-hosted agents, but you'll need to either purchase a parallel job or request a free tier.
Here are the specific requirements you'll need to meet:
- A GitHub account with a repository
- An Azure account with an active subscription
- An Azure DevOps organization and project
- A way to run pipelines on Microsoft-hosted agents (either purchase a parallel job or request a free tier)
Understanding Azure DevOps Pipelines
Azure DevOps pipelines can seem overwhelming at first, but they're actually a series of steps laid out in a logical order.
A pipeline is comprised of Stages, Jobs, and Steps. A stage contains multiple jobs and jobs contain multiple steps. It's essential to keep an eye on the required indents and dashes when creating a pipeline.
In Azure DevOps, a pipeline is a collection of stages, and stages can run sequentially or in parallel depending on how you set dependencies up. Jobs in a stage all run in parallel and tasks within a job run sequentially.
To create a pipeline, you'll need to set up your Azure DevOps project and variables. This includes defining triggers, variables, and stages. Your build pipeline should include a trigger that runs when there's a code change to branch.
Here's a breakdown of the key components of an Azure DevOps pipeline:
In a deployment stage, you'll need to specify the environment and deployment strategy. The environment is set to 'Staging' or 'Production', depending on the deployment stage. The deployment strategy can be set to RunOnce, which executes each lifecycle hook once and then runs an on: success or on: failure hook.
Manual Trigger and Queuing
You can manually trigger specific stages in your YAML pipeline to have more control over the deployment process. This is especially useful when you want to deploy to production only when you're ready.
To use manual triggering, add the `trigger: manual` property to a stage. This allows you to run all stages automatically except for the production deployment, which you can trigger manually.
Manual triggering is particularly useful when you have multiple releases being created in quick succession. If you don't specify a limit for the number of parallel deployments, all releases will be deployed to the QA stage in parallel. However, if you specify a limit and choose to deploy the latest release and cancel the others, releases will be skipped until the limit has been reached.
Here's a summary of the queuing options:
- Number of parallel deployments: Limits the number of releases deployed in parallel.
- Deploy all in sequence: Releases are deployed one by one, after each approval is completed.
- Deploy latest and cancel the others: The latest release is deployed, while earlier releases are skipped until the limit is reached.
Specify Queuing Policies
YAML pipelines don't support queuing policies, so each run is independent and unaware of other runs. This means two successive commits may trigger two pipelines, and both will execute the same sequence of stages without waiting for each other.
To control the order of execution, you can use manual approvals. This is recommended until queuing policies are available for YAML pipelines.
Queuing policies give you control over how multiple releases are queued into a stage. You can choose from two options: Number of parallel deployments and the two additional options that appear when you specify a maximum number of deployments.
If you don't specify a limit for the number of parallel deployments, all releases will be deployed to the QA stage in parallel. This can happen even if the QA stage has predeployment approvers defined.
If you specify a limit and choose Deploy all in sequence, the predeployment approval for the first release will be sent out first, and the deployment will begin after approval. Then, post-deployment approval will be sent out, and execution of the next release will begin only after that approval is completed.
If you specify a limit and choose Deploy latest and cancel the others, releases will be skipped until the limit is reached. For example, if the limit is 1 and there are 5 releases, releases R2, R3, and R4 will be skipped, and the predeployment approval for R5 will be sent out immediately after the post-deployment approval for release R1 is completed.
Here's a summary of the queuing policy options:
- Number of parallel deployments: limits the number of releases deployed in parallel.
- Deploy all in sequence: deploys releases one by one, after each release's predeployment and post-deployment approvals are completed.
- Deploy latest and cancel the others: deploys only the latest release, skipping all previous releases until the limit is reached.
Manual Trigger
Manual Trigger allows you to have a unified pipeline without always running it to completion.
You can manually trigger specific stages of your pipeline by adding the trigger: manual property.
This feature is useful when you want some stages to run automatically, but others require manual triggering, like the production deployment stage.
For instance, your pipeline might include stages for building, testing, and deploying to a staging environment, which can run automatically.
The production stage, however, requires manual triggering when you're ready to deploy.
This allows you to control which stages run and when, giving you more flexibility in your pipeline.
By manually triggering a stage, you can run a hello world output script, as seen in the example.
Frequently Asked Questions
How do I see deployments in Azure?
To view deployments in Azure, navigate to the Azure portal, select your resource group, and click on the "Deployments" link under it. From there, you can view the deployment history and details of each deployment.
Sources
- https://mercuryworks.com/blog/creating-a-multi-stage-pipeline-in-azure-devops
- https://learn.microsoft.com/en-us/azure/devops/pipelines/process/stages
- https://learn.microsoft.com/en-us/azure/devops/pipelines/process/create-multistage-pipeline
- https://medium.com/@muppedaanvesh/%EF%B8%8F-azure-devops-pipeline-essentials-jobs-stages-tasks-steps-%EF%B8%8F-1757d6366201
- https://devopsjournal.io/blog/2020/12/06/Missing-stages-in-Azure-DevOps
Featured Images: pexels.com