Azure DevOps YAML:修改模板兼容注入preDeploy至含/无该步骤的部署作业
解决方案
修改后的execute-deployment-jobs.yaml
# File: execute-deployment-jobs.yaml parameters: - name: deployJobs type: jobList jobs: - ${{ each job in parameters.deployJobs }}: - ${{ each deployJobProperty in job }}: ${{ if and(ne(deployJobProperty.key, 'dependsOn'), ne(deployJobProperty.key,'strategy')) }}: ${{ deployJobProperty.key }}: ${{ deployJobProperty.value }} ${{ if eq(deployJobProperty.key, 'strategy')}}: strategy: # 遍历所有部署策略类型(runOnce/canary/rolling) ${{each strategyType in deployJobProperty.value}}: ${{strategyType.key}}: # 保留当前策略下除preDeploy外的所有属性 ${{each strategyProp in strategyType.value}}: ${{ if ne(strategyProp.key, 'preDeploy') }}: ${{strategyProp.key}}: ${{strategyProp.value}} # 统一注入并合并preDeploy步骤 preDeploy: steps: # 先添加通用注入步骤 - powershell: | Write-Host "Inside injected preDeploy step" displayName: Injected preDeploy step # 若原有存在preDeploy步骤,追加原有内容 ${{ if strategyType.value.preDeploy }}: - ${{ each step in strategyType.value.preDeploy.steps }}: - ${{ step }}
关键改动说明
- 全策略兼容:不再硬编码
runOnce,通过遍历策略类型的方式,一次性适配runOnce/canary/rolling所有部署策略,避免重复编写多策略的处理逻辑。 - 无冲突步骤合并:
- 先跳过原有策略中的
preDeploy属性,规避重复定义的编译错误 - 重新构建
preDeploy时,先注入通用步骤,再通过条件判断追加原有preDeploy的步骤,实现新旧步骤的无缝合并
- 先跳过原有策略中的
- 保留原有配置完整性:除指定需要处理的属性外,完整保留部署作业的所有原有配置,不影响业务逻辑。
验证效果
使用修改后的模板后:
- 当
includePredeployStep: false时,自动为部署作业添加注入的preDeploy步骤 - 当
includePredeployStep: true时,合并注入步骤与原有preDeploy步骤,不再触发'preDeploy' is already defined错误
内容的提问来源于stack exchange,提问作者SimonAx
相关产品推荐
相关产品推荐

