Navigating Azure Pipelines Output Variables Across Stages
In an advanced Azure Pipeline, managing stage dependencies and output variables is crucial for orchestration. For
instance, when setting up a pipeline that operates on different test environments determined by the targetBranchName
from incoming pull requests (PRs), capturing this information in one stage before proceeding with others can be
beneficial.
Here’s how to refer output variables across stages and use them for branch-specific environmental setups:
Preparation Stage Setup of targetBranchName
Variable
stages:
- stage: PrepareEnvironment
jobs:
- job: CaptureTargetBranch
steps:
- script: echo "Capturing target branch name for environment setup."
continueOnError: true # Ensures the pipeline continues despite possible errors.
- pwsh: Write-Output "[##vso[task.setvariable variable=targetEnvironmentName;isOutput=true]$(System.PullRequest.TargetBranch)]"
In this snippet, we use PowerShell to set an output variable within the CaptureTargetBranch
job under a preparation
stage called PrepareEnvironment
. The $(system.pullRequest.targetBranchName)
is captured and stored as the
environment’s target branch name for subsequent stages using its value in variables defined with
[##vso[task.setvariable]
.
Note: Always ensure to check your pipeline’s documentation or a reliable resource, such as Microsoft DevOps guide on
setting output
variable (https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=batch
),
for precise syntax and usage.
Referencing the Output Variable in Later Stage Conditions & Jobs
stages:
...
- stage: DeployTestEnvironment
dependsOn: PrepareEnvironment
variables:
branchNameVariable: $[stageDependencies.PrepareEnvironment.CaptureTargetBranch.outputs['targetEnvironmentName']]
jobs:
- job: DetermineAndSetVariables
condition: and(not(contains(variables, 'branchNameVariable')), eq(parameters.envType, 'testing')) # Assuming an environment type parameter is provided for conditional testing environments setup
steps:
...
- job: ExecuteTestJobs
dependsOn: DetermineAndSetVariables
In the DeployTestEnvironment
stage, we are setting up a condition and variable (branchNameVariable
) that relies on
output from previous stages. Here you can see how $(stageDependencies)
syntax is used to access variables set in
earlier jobs within your pipeline’s context: specifically retrieving our previously captured target branch name for
environment setup using the stage-specific variables
section under a conditional job named DetermineAndSetVariables
.
Then, we have another dependent step with $(branchNameVariable)
which allows us to further process and deploy tests
specific only when certain environmental conditions are met (e.g., testing branch type parameter is given). The
condition ensures that this stage runs exclusively for the intended test environments defined by envType
parameters or
absent branches, adding an extra layer of logic control within your CI/CD pipeline’dicts
Remember to replace any placeholders with actual variable names and conditions relevant to your workflow. This way, you maintain a clean separation between stage jobs while enabling the flow-dependent data handling necessary for complex deployment scenarios in Azure Pipelines.