I have a yaml pipeline with 2 stages, each one job and multiple steps.
I based my approach on what is documented on this page : https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#use-outputs-in-a-different-stage
stages:
- stage: ExportSolutionStage
displayName: 'Export solution to git'
jobs:
- template: ../Templates/Jobs/export-solution-job.yml
parameters:
SolutionName: ${{parameters.Solution}}
ServiceConnectionName: ${{variables.serviceConnectionName}}
Repo: 'VAB.PowerPlatform.ReleaseSolutions'
GitUserName: ${{parameters.GitUserName}}
GitUserEmail: ${{parameters.GitUserEmail}}
Branch: $(branch)
PublishCustomizations: ${{parameters.PublishCustomizations}}
- stage: build_stage
displayName: 'Build solution'
dependsOn : ExportSolutionStage
jobs:
- template: ../Templates/Jobs/build-release-solution-job.yml
parameters:
SolutionName: ${{parameters.Solution}}
Branch: $(branch)
The underlying template for the job in the first stage is this
jobs:
- deployment: ExportSolutionJob
timeoutInMinutes: 360
displayName: 'Export solution'
environment: ${{parameters.ServiceConnectionName}}
pool:
name: 'Azure Pipelines'
vmImage: 'windows-latest'
strategy:
runOnce:
deploy:
steps:
# Checkout Pipelines
- template: ../Steps/checkout-pipelines.yml
- checkout: ${{ parameters.Repo }}
displayName: 'Checkout Target Branch'
- template: ../Steps/install-tools.yml
- template: ../Base/export-solution-base.yml
parameters:
SolutionName: ${{parameters.SolutionName}}
ServiceConnectionName: ${{parameters.ServiceConnectionName}}
Repo: ${{parameters.Repo}}
GitUserName: ${{parameters.GitUserName}}
GitUserEmail: ${{parameters.GitUserEmail}}
Branch: ${{parameters.Branch}}
PublishCustomizations: ${{parameters.PublishCustomizations}}
Included in one of the step templates is this template
# Set Version
- template: ../Steps/set-version.yml
parameters:
SolutionName: ${{ parameters.SolutionName }}
Which contains this step
steps:
- task: PowerShell@2
displayName: 'Get Solution Version and Set as Build'
name: SolutionVersion
inputs:
targetType: 'inline'
script: |
Write-Host "Fetch current solution version for solution ${{parameters.SolutionName}}"
... obscured logic
$newVersion = $versionToday + $newVersion
Write-Host "##vso[task.setvariable variable=NewVersion;isOutput=true]$newVersion"
In the job of the second stage, I try to get that NewVersion variable via this part
variables:
NewVersion: $[stageDependencies.ExportSolutionStage.ExportSolutionJob.outputs['SolutionVersion.NewVersion']]
However when I run the pipeline, it cannot resolve this variable.
Variables:
NewVersion:
Parsing expression: <stageDependencies.ExportSolutionStage.ExportSolutionJob.outputs['SolutionVersion.NewVersion']>
Evaluating: stageDependencies['ExportSolutionStage']['ExportSolutionJob']['outputs']['SolutionVersion.NewVersion']
Expanded: Null
Result: ''
Any help would be greatly appreciated
Regards,
Sven
Based on your YAML sample, you are defining the variable in the deployment job and set runOnce strategy.
In this case, when you use the cross stage variables, you need to follow the following format:
$[stageDependencies.{stagename}.{jobname}.outputs['{jobname}.{stepname}.variablename']]
Here is an example:
variables:
NewVersion: $[stageDependencies.ExportSolutionStage.ExportSolutionJob.outputs['ExportSolutionJob.SolutionVersion.NewVersion']]
Result:
For more detailed info, you can refer to this doc: Support for output variables