I have blogged in the past ( here and here) about the complexities and possible areas of confusion with different types of Azure DevOps pipeline variables. I have also seen issues raised over how to access custom variables across jobs and stages. Safe to say, this is an area where it is really easy to get it wrong and end up with a null value.
I have recently come across another edge case to add to the list of gotchas.
It seems you cannot use stagedependencies to access a variable declared in a deployment job i.e. when you are using an environment to get approval for a release.
The workaround is to add a job that is dependent on the deployment and set the custom variable within it. This variable can be accessed by a later stage as shown below
- stage: S1
jobs:
- deployment: D1
strategy:
runOnce:
deploy:
steps:
- checkout: none
- bash: echo "Can't access the variable if set in here"
- job: J1
dependsOn:
D1
steps:
- checkout: none
- bash: echo "##vso[task.setvariable variable=myvar;isOutput=true]True"
name: BashStep
- stage: S2
condition: always()
dependsOn:
- S1
jobs:
- job: Use_Variable
variables: # add an alias for the var
myvar: $[stagedependencies.S1.J1.outputs['BashStep.myvar']]
steps:
- checkout: none
- dash: echo "Script gets run when myvar is true"
condition: eq (variables['myvar'],'True')