在 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。
我有一个非常基本的 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。
将变量从一个阶段传递到另一个阶段:目前无法开箱即用。
请检查此
解决方法
您可以尝试将您的变量写到某个文件中,publish it as pipelineartifact, download this artifact in another stage and load variables. Please check this link。