在 azure 多级管道 (YAML) 中将变量从一项作业传递到另一项作业

Pass variables from one job to an other in an azure multi stage pipeline (YAML)

我有一个非常基本的 YAML 天蓝色管道

jobs:
- job: Foo
  steps:
  - bash: |
      echo "Create variable xyz"
      echo "##vso[task.setvariable variable=xyz;]yes"
    displayName: 'Determine slot name'
  - bash: |
     echo "Var is: $(xyz)"
    displayName: 'Show variable'
- job: Bar
  dependsOn: Foo
  steps:
  - bash: |
      echo "Hello world $(Foo.xyz)"
    displayName: 'Show variable'

在名为 Foo 的第一个 JOB 中,变量 xyz 设置为 yes。这行得通,因为我可以在秒步骤中用

行显示它
echo "Var is: $(xyz)"

但是,我想在下一个作业(名为 Bar)中使用该变量。但无论我做什么,它都不存在。我试过

 echo "Hello world $(xyz)"

 echo "Hello world $(Foo.xyz)"

但是当我 运行 管道

时都出现以下错误
 line 1: Foo.xyz: command not found

如何在作业之间共享该变量?在阶段之间共享也很好!!

所以你实际上有两件事。

可以将变量从作业传递到作业:

你试过了吗multi job output variable:

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

请检查这个question

将变量从一个阶段传递到另一个阶段:目前无法开箱即用。

请检查此 。 Merlin Liang - MSFT 在那里解释了这一点。

解决方法

您可以尝试将您的变量写到某个文件中,publish it as pipelineartifact, download this artifact in another stage and load variables. Please check this link