在Azure管道Yaml中的模板作业之间传递值

时间:2020-03-05 13:47:42

标签: azure-pipelines azure-pipelines-tasks azure-pipelines-yaml

我有以下设置,其中第一个模板化作业(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

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

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

有什么想法吗?!谢谢!

1 个答案:

答案 0 :(得分:1)

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

我们需要从azure-pipelines.yaml中移出参数,然后在deploy-software.yml中使用变量进行解析:

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

作为测试,我创建了deploy-infra.ymldeploy-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

deploy-software.yml:

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

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

azure-pipelines.yaml:

pool:
  vmImage: 'windows-latest'

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

    - template: deploy-software.yml

作为测试结果:

enter image description here

希望这会有所帮助。