我有一个非常基本的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
的第一个作业中,变量xyz
设置为yes
。可行,因为我可以在几秒钟内用
echo "Var is: $(xyz)"
但是,我想在下一个作业(名为Bar
)中使用该变量。但是我所做的一切都不存在。我尝试过类似的事情
echo "Hello world $(xyz)"
或
echo "Hello world $(Foo.xyz)"
但是当我运行管道时,两者都会出现以下错误
line 1: Foo.xyz: command not found
如何在工作之间共享该变量?而且阶段之间的共享也将很不错!
答案 0 :(得分:3)
所以这里实际上有两件事。
可能将变量从一个作业传递到另一个作业
您尝试过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。
在各个阶段之间传递变量:目前尚无法立即使用。
请检查此question。 Merlin Liang-MSFT在此进行了解释。
解决方法
您可以尝试将变量publish it as pipelineartifact写入某些文件,在另一阶段下载此工件并加载变量。请检查此link。