Azure DevOps Pipeline 在部署中定义变量并在后续作业中重用

Tho*_*mas 2 azure-devops azure-pipelines azure-pipelines-yaml

我正在使用 Azure DevOps 管道来部署我的代码,现在我需要将变量值从部署作业传递到依赖于它的后续作业。我已经阅读了这个例子,但它似乎根本不起作用。

我想做的是运行一个配置 Key Vault 的 Azure ARM 部署。密钥保管库的名称是从 ARM 部署作业输出的,然后我尝试将该名称传递给另一个需要添加特定机密的作业。访问控制已得到处理,但我仍然需要传递名称。

我已将问题归结为将变量从 a 传递deployment到 a的基础知识job这是我完整的测试管道(几乎完全从这里复制):

trigger: none

stages:
  - stage: X
    jobs:
      - deployment: A
        pool:
          vmImage: "ubuntu-16.04"
        environment: test
        strategy:
          runOnce:
            deploy:
              steps:
                - script: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the deployment variable value"
                  name: setvarStep
                - script: echo $(setvarStep.myOutputVar)
                  name: echovar

      - job: B
        dependsOn: A
        pool:
          vmImage: "ubuntu-16.04"
        variables:
          myVarFromDeploymentJob: $[ dependencies.A.outputs['deploy.setvarStep.myOutputVar'] ]
        steps:
          - script: "echo $(myVarFromDeploymentJob)"
            name: echovar
Run Code Online (Sandbox Code Playgroud)

一旦我运行此命令,回显值在 job 中为空白B,但在部署中定义A。为什么是这样?有没有一种方法可以将所有内容都放入其中dependencies.A.outputs,以便我可以看到我必须处理的内容?

如何将变量从runOnce部署作业传递到常规作业?

Tho*_*mas 5

编辑:此问题中提到的文档现已得到纠正和改进。

我已经解决了。问题在于,此处的文档指定了用于获取部署变量的架构runOnce

$[dependencies.<job-name>.outputs['<lifecycle-hookname>.<step-name>.<variable-name>']]
Run Code Online (Sandbox Code Playgroud)

这实际上是错误的。该<lifecycle-hookname>参数应替换为部署的名称,如下所示:

$[dependencies.<job-name>.outputs['<job-name>.<step-name>.<variable-name>']]
Run Code Online (Sandbox Code Playgroud)

本文档中的示例(向下滚动一点)是正确的。

我已经测试过并有效的完整示例管道:

$[dependencies.<job-name>.outputs['<lifecycle-hookname>.<step-name>.<variable-name>']]
Run Code Online (Sandbox Code Playgroud)