从部署作业中获取输出变量

时间:2019-08-20 22:21:01

标签: azure-pipelines

在以下示例中,我能够访问jobA的输出变量,但不能访问deploymentA的输出变量。主要区别在于jobA是“正常”作业,而deploymentA是部署作业。

jobs:
- deployment: deploymentA
  environment: Test
  strategy:
    runOnce:
      deploy:
        steps:
        - checkout: none
        - pwsh: |
            echo "##vso[task.setvariable variable=someVar;isOutput=true]someValue"
          name: someName

- job: jobA
  steps:
  - checkout: none
  - pwsh: |
      echo "##vso[task.setvariable variable=someVarA;isOutput=true]someValueA"
    name: someNameA

- job: jobB
  dependsOn: 
  - deploymentA
  - jobA

  variables:
    deployJobVar: $[dependencies.deploymentA.outputs['someName.someVar']]
    jobVar: $[dependencies.jobA.outputs['someNameA.someVarA']]

  steps:
  - checkout: none
  - pwsh: |
      echo "$(deployJobVar)"    # will display empty string
      echo "$(jobVar)"          # will display 'someValueA'

我发现的best hint是:

  

如果要从矩阵或切片中设置变量,则要引用该变量,则必须包括作业名称以及从下游作业访问它时的步骤。

并不完全相同,但是我尝试在相似的标识符之前加上前缀,但以下任何一项均无效:

$[dependencies.deploymentA.outputs['runOnce.someName.someVar']]
$[dependencies.deploymentA.outputs['deploy.someName.someVar']]
$[dependencies.deploymentA.outputs['runOnce.deploy.someName.someVar']]

有人知道用于访问从部署作业输出的特定变量的正确语法吗?或者,有人知道如何显示所有输出的变量吗?

2 个答案:

答案 0 :(得分:1)

文档目前尚不完整,但是有了一点想象力,我们可以注意到Set a multi-job output variable的第二部分适用。

您需要做的就是以作业名称作为前缀引用变量:deploymentA.someName.someVar而不是someName.someVar

deployJobVar: $[dependencies.deploymentA.outputs['deploymentA.someName.someVar']]

是的,deploymentA出现了两次。

答案 1 :(得分:0)

  

访问从变量输出的特定变量的正确语法   部署工作?

您使用的语法变量是正确的。出于导致下一个“正常”作业中没有显示值的原因,实际上您之前已经提到过,这是一个部署作业

在您的YAML脚本中,在发布作业中创建部署作业中的变量someVar。即使您设置了isOutput=true,该变量也不能传递到舞台上。(注意:这仅在Release管道中发生)。仅当您使用##vso[task.setvariable]定义它时,它才存在于当前工作中。

在发布管道中,部署作业彼此独立。这意味着,如果您在任务(等效步骤)中定义变量,则无法从作业中访问该变量。您也可以使用经典编辑器对此进行测试。

如果要在其他作业中使用它,解决方法是最好将其存储在Key Vault等存储中。然后在下一个作业中使用它。