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



我有一个非常基本的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的第一个JOB中,变量xyz被设置为yes。这是有效的,因为我可以用线在秒步中显示它

echo "Var is: $(xyz)"

但是,我希望在下一个作业(名为Bar(中使用该变量。但无论我做什么,它都不存在。我试过之类的东西

echo "Hello world $(xyz)"

echo "Hello world $(Foo.xyz)"

但当我运行管道时,两者都会出现以下错误

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

请检查这个问题。

将变量从一个阶段传递到另一个阶段:这在目前是不可能的

请检查这个问题。梁在那里解释了这一点。

解决方案

您可以尝试将您的变量写入一些文件,将其发布为pipelineartifact,在另一个阶段下载此工件并加载变量。请检查此链接。

相关内容

最新更新