1

我正在使用 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

一旦我运行这个,回显的值在作业中是空白的B,但在部署中定义A。为什么是这样?有没有办法把所有东西都放进去,dependencies.A.outputs这样我就可以看到我必须处理什么?

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

4

1 回答 1

2

我已经解决了。问题是这里的文档指定了这个模式来获取runOnce部署的变量:

$[dependencies.<job-name>.outputs['<lifecycle-hookname>.<step-name>.<variable-name>']]

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

$[dependencies.<job-name>.outputs['<job-name>.<step-name>.<variable-name>']]

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

我已经测试和工作的完整示例管道:

trigger: none

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

  - job: B
    dependsOn: A
    pool:
      vmImage: 'ubuntu-16.04'
    variables:
      myVarFromDeploymentJob: $[ dependencies.A.outputs['A.setvarStep.myOutputVar'] ]
    steps:
    - script: "echo $(myVarFromDeploymentJob)"
      name: echovar
于 2020-04-28T09:52:26.480 回答