Azure DevOps Pipeline YML如何循环遍历参数动态生成发布阶段
解决方案
首先明确:你完全可以用和Job循环相同的${{ each }}模板语法动态生成Stages,以下是满足你所有要求的实现方式:
核心实现逻辑
1. 需求对应实现方案
- 人工审批:直接在Azure DevOps对应环境中配置审批规则即可,不需要修改YAML,配置路径:项目后台 → 管道 → 环境 → 选择对应环境 → 右上角「更多操作」→ 审批和检查 → 添加审批人
- 按顺序执行+上阶段成功才运行:利用你参数中已定义的
dependsOn字段绑定前置阶段,Azure DevOps默认规则为仅当前置所有阶段全部执行成功后,才会运行当前阶段
2. 修改后的完整YAML配置
parameters: - name: 'environments' type: object default: - environment: development variableGroup: strata2-admin-spa-vg dependsOn: 'build' - environment: test variableGroup: strata2-test-admin-spa-vg dependsOn: 'development' - environment: production variableGroup: strata2-development-variables # 若需要按 development→test→production 顺序执行,此处dependsOn改为test即可 dependsOn: 'test' - name: 'buildTemplate' type: string default: buildTemplate.yml - name: 'publishTemplate' type: string default: publishTemplate.yml trigger: - main pool: vmImage: ubuntu-latest stages: - stage: build displayName: Build stage jobs: - ${{each build in parameters.environments}}: - template: ${{parameters.buildTemplate}} parameters: environment: ${{build.environment}} variableGroup: ${{build.variableGroup}} # 动态生成发布阶段 - ${{ each env in parameters.environments }}: - stage: Publish_${{ env.environment }} displayName: Publish ${{ env.environment }} environment # 动态绑定前置阶段 dependsOn: ${{ if eq(env.dependsOn, 'build') }}: build ${{ else }}: Publish_${{ env.dependsOn }} jobs: - template: ${{parameters.publishTemplate}} parameters: environment: ${{ env.environment }}_websites variableGroup: ${{ env.variableGroup }}
注意事项
- Stage名称不允许包含空格、特殊字符,因此统一使用
Publish_环境名的命名格式保证合法性 - 若需要调整发布顺序,仅需修改
parameters.environments中对应条目的dependsOn值即可,无需修改循环逻辑 - 若需要针对某个环境跳过审批,直接删除对应环境的审批配置即可,无需修改YAML文件
内容的提问来源于stack exchange,提问作者user3067684
相关产品推荐
相关产品推荐

