0

我有以下设置,其中第一个模板化作业(deploy-infra.yml)运行一些 terraform 作业,这些作业会产生一些输出,这些输出在以后的模板化作业中需要,我似乎可以做的是将此输出传递给其他模板化作业,这似乎因为模板参数是在编译时而不是运行时确定的。

有没有办法做到这一点?这是我目前拥有的:

- stage: Deploy_Canary
  displayName: Deploy Canary

  jobs:

  - template: deploy-infra.yml

  - template: deploy-software.yml
    parameters:
      dbserver: $[dependencies.DeployInfra.outputs['outputDeployInfra.dbserver']]

deploy-infra.yml 将其作为输出生成,该输出取自 powershell 脚本,该脚本又从 terraform 模块获取输出:

- pwsh: |
    echo "##vso[task.setvariable variable=dbserver]$(db.server)"
  name: outputDeployInfra

如果我parameters.dbserver在 deploy-software.yml 作业中回显,我会得到:

$[dependencies.DeployInfra.outputs['outputDeployInfra.dbserver']]

有任何想法吗?!谢谢!

4

1 回答 1

1

在 azure 管道 yaml 中的模板作业之间传递值

我们需要从 中移动参数azure-pipelines.yaml,然后在deploy-software.ymlwith 变量中解析它:

  variables:
    Parametersdbserver: $[dependencies.DeployInfra.outputs['outputDeployInfra.dbserver']]

作为测试,我创建deploy-infra.yml和:deploy-software.ymlazure-pipelines.yaml

deploy-infra.yml(因为我没有 的值db.server,所以我用带有测试值的变量定义它123456。):

jobs:
- job: DeployInfra
  variables:
    db.server: 123456

  steps:
  - checkout: none
  - pwsh: |
      echo "##vso[task.setvariable variable=dbserver;isOutput=true]$(db.server)"     
    name: outputDeployInfra

部署-software.yml:

jobs:
- job: deploysoftware
  dependsOn: DeployInfra
  variables:
    Parametersdbserver: $[dependencies.DeployInfra.outputs['outputDeployInfra.dbserver']]

  steps:
  - checkout: none
  - pwsh: |
      Write-Host "$(Parametersdbserver)"

天蓝色管道.yaml:

pool:
  vmImage: 'windows-latest'

stages:
  - stage: Deploy_Canary
    jobs:
    - template: deploy-infra.yml

    - template: deploy-software.yml

作为测试结果:

在此处输入图像描述

希望这可以帮助。

于 2020-03-06T06:25:17.977 回答