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

Azure devops 在azure多级管道(YAML)中将变量从一个作业传递到另一个作业,azure-devops,yaml,azure-pipelines,multistage-pipeline,Azure Devops,Yaml,Azure Pipelines,Multistage Pipeline,我有一个非常基本的YAML azure管道 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 va

我有一个非常基本的YAML azure管道

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
的第一个作业中,变量
xyz
设置为
yes
。这是可行的,因为我可以在第二步显示它

echo "Var is: $(xyz)"
但是,我希望在下一个作业(名为
Bar
)中使用该变量。但无论我做什么,它都不存在。我试过这样的方法

 echo "Hello world $(xyz)"

但是当我运行管道时,两者都给出了以下错误

 line 1: Foo.xyz: command not found

我如何在不同的工作之间共享该变量?在舞台之间分享也很好

这里实际上有两件事

将变量从一个作业传递到另一个作业,这是可能的:

您是否尝试过:

请检查这个

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

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

解决方法

您可以尝试将变量写入一些文件,在另一个阶段下载此工件并加载变量。请检查这个

 line 1: Foo.xyz: command not found
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