You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个Azure DevOps YAML构建中按顺序同步不同测试作业?

解决方案

核心思路

利用Azure DevOps Server 2020支持的YAML模板表达式循环+阶段串行控制能力,不需要硬编码16个作业的依赖关系,仅需少量通用配置即可实现要求的同步逻辑:

  • 按MaxDOP降序拆分独立阶段,阶段间串行执行,天然保证不同MaxDOP的作业不会并发
  • 每个MaxDOP阶段内用矩阵并行跑对应所有AgentCount的测试作业,自动满足同AgentCount下高MaxDOP作业先完成的要求
  • 首尾单独配置Prepare和Cleanup阶段,统一管控依赖

完整YAML示例

trigger: none

# 定义测试维度变量
variables:
  - name: maxDopList
    value: 4,3,2,1
  - name: agentCountList
    value: 3,4,5,6

stages:
# 首个Prepare阶段
- stage: Prepare
  jobs:
  - job: PrepareJob
    pool: 你的驱动构建代理池
    steps:
    - pwsh: |
        # 这里写你的准备逻辑,比如SUT环境重置、测试参数初始化等
        Write-Host "测试环境准备完成"
      displayName: 执行准备操作

# 循环生成每个MaxDOP对应的测试阶段
- ${{ each maxDop in split(variables.maxDopList, ',') }}:
  - stage: Test_MaxDOP_${{ maxDop }}
    # 第一个MaxDOP阶段依赖Prepare,其余依赖前一个更高MaxDOP的阶段
    dependsOn: ${{ if eq(maxDop, 4) }}: Prepare
              ${{ else }}: Test_MaxDOP_${{ add(int(maxDop), 1) }}
    jobs:
    # 每个阶段内用矩阵并行跑所有AgentCount的作业
    - job: Test_Job
      strategy:
        matrix:
          ${{ each agentCount in split(variables.agentCountList, ',') }}:
            Agent_${{ agentCount }}:
              AgentCount: ${{ agentCount }}
              MaxDOP: ${{ maxDop }}
      pool: 你的驱动构建代理池
      steps:
      - pwsh: |
          # 这里写你的构建触发逻辑,调用REST API给SUT队列对应参数的PR构建
          Write-Host "启动测试:MaxDOP=$(MaxDOP), AgentCount=$(AgentCount)"
          # 轮询等待SUT上$(AgentCount)个并发构建全部完成再结束当前作业
        displayName: 执行测试(MaxDOP: $(MaxDOP), 代理数: $(AgentCount))

# 最终Cleanup阶段,依赖最后一个MaxDOP=1的测试阶段
- stage: Cleanup
  dependsOn: Test_MaxDOP_1
  jobs:
  - job: CleanupJob
    pool: 你的驱动构建代理池
    steps:
    - pwsh: |
        # 这里写清理逻辑,比如SUT环境重置、测试结果汇总等
        Write-Host "所有测试完成,执行清理操作"
      displayName: 执行清理操作

逻辑说明

  • 阶段执行顺序固定为Prepare → MaxDOP4 → MaxDOP3 → MaxDOP2 → MaxDOP1 → Cleanup,完全满足不同MaxDOP作业不并发的要求
  • 同AgentCount的测试作业按MaxDOP从高到低依次执行,天然满足同AgentCount下高MaxDOP作业的前置依赖要求
  • 每个MaxDOP阶段内4个AgentCount作业并行执行,符合并发控制逻辑
  • 无需硬编码16个作业的依赖关系,后续调整测试矩阵仅需修改maxDopList和agentCountList变量即可

内容的提问来源于stack exchange,提问作者mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:27:05