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

Pass values between template jobs in 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']]

有什么想法吗?!谢谢!

Pass values between template jobs in azure pipelines 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

部署-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

作为测试结果:

希望这对您有所帮助。