How to use output variables across agent jobs in azure release pipeline

Vatan Soni picture Vatan Soni · Jun 9, 2019 · Viewed 10.5k times · Source

In my azure release pipeline I have 2 agent jobs, one is for sql deployment using power-shell and other is for kubernetes using power-shell. How to set an output variable in 1st agent job and use that in second agent job using power-shell.

enter image description here

Answer

jessehouwing picture jessehouwing · Jun 9, 2019

Use

Write-Output "##vso[task.setvariable variable=testvar;isOutput=true;]testvalue"

Then reference the output variable as if it exists from a future task.

$(taskreference.testvariable)

The task reference name can be set on the output section of the powershell script task:

enter image description here

But it looks like cross-job references aren't available yet, when I read the docs:

TODO

I am not sure how are we going to generate Job ref name, since we don’t have job chaining at this point.

It should be something like:

{DefinitionName}_{JobName}

See: Azure-Pipelines-Agent/docs/Outputvariable.md

So for now the variable will only work within the same Job.

It does look like YAML build do already support cross-phase output variable references.

jobs:

# Set an output variable from job A
- job: A
  pool:
    vmImage: 'vs2017-win2016'
  steps:
  - powershell: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the value"
    name: setvarStep
  - script: echo $(setvarStep.myOutputVar)
    name: echovar

# Map the variable into job B
- job: B
  dependsOn: A
  pool:
    vmImage: 'ubuntu-16.04'
  variables:
    myVarFromJobA: $[ dependencies.A.outputs['setvarStep.myOutputVar'] ]  # map in the variable
                                                                          # remember, expressions require single quotes
  steps:
  - script: echo $(myVarFromJobA)
    name: echovar