我有以下设置,其中第一个模板化作业(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']]
有什么想法吗?!谢谢!
答案 0 :(得分:1)
在Yazure管道yaml中的模板作业之间传递值
我们需要从azure-pipelines.yaml
中移出参数,然后在deploy-software.yml
中使用变量进行解析:
variables:
Parametersdbserver: $[dependencies.DeployInfra.outputs['outputDeployInfra.dbserver']]
作为测试,我创建了deploy-infra.yml
,deploy-software.yml
和azure-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
作为测试结果:
希望这会有所帮助。