在蔚蓝的多阶段管道(YAML)中将变量从一项作业传递到另一项作业

时间:2020-04-17 10:12:50

标签: azure-devops yaml azure-pipelines multistage-pipeline

我有一个非常基本的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

如何在工作之间共享该变量?而且阶段之间的共享也将很不错!

1 个答案:

答案 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