Share variables across stages in Azure DevOps Pipelines Share variables across stages in Azure DevOps Pipelines azure azure

Share variables across stages in Azure DevOps Pipelines


Updated:

Share variables across stages feature has been released in Sprint 168 now.

Please use below format to access output variables from previous stage:

stageDependencies.{stageName}.{jobName}.outputs['{stepName}.{variableName}'] 

Original:

Share variables across stages in Azure DevOps Pipelines

I'm afraid to say that it does not supported to share the variable which defined in one stage and pass it into another stage.

This is the feature we are plan to add, but until now, it does not supported. You can follow this Github issue, many people has the same demand with you. You can follow track that.

Until now, we only support set a multi-job output variable, but this only support YAML. For Classic Editor, there's no any plan to add this feature in release.

For work around, you can predefined the variables before the stages. But one important thing is if you change its value in one stage. The new value could not be passed to the next stage. The lifetime of variable with new value only exists in stage.


What is important to mention stageDependencies is not available in condition at stage level. It is aviable in jobs, but not in stage directly (at least at the moment).

stages:- stage: A  jobs:  - job: JA    steps:    - script: |        echo "This is job Foo."        echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #The variable doThing is set to true      name: DetermineResult    - script: echo $(DetermineResult.doThing)      name: echovar  - job: JA_2    dependsOn: JA    condition: eq(dependencies.JA.outputs['DetermineResult.doThing'], 'Yes')    steps:    - script: |        echo "This is job Bar."#stage B runs if DetermineResult task set doThing variable n stage A- stage: B  dependsOn: A  jobs:  - job: JB    condition: eq(stageDependencies.A.JA.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check if true    variables:      varFromStageA: $[ stageDependencies.A.JA.outputs['DetermineResult.doThing'] ]    steps:    - bash: echo "Hello world stage B first job"    - script: echo $(varFromStageA)


Jobs can now access variables from previous stages

Output variables are still produced by steps inside of jobs. Instead of referring to dependencies.jobName.outputs['stepName.variableName'], stages refer to stageDependencies.stageName.jobName.outputs['stepName.variableName'].

https://docs.microsoft.com/en-us/azure/devops/release-notes/2020/sprint-168-update#azure-pipelines-1