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

如何确保Azure自托管代理一次仅运行一个流水线阶段或作业?

确保Azure DevOps自托管代理一次仅运行一个作业/阶段

你已实现阶段并发执行,但多个阶段被分配到同一代理引发资源冲突,且此前的故障实际源于遗留Docker容器未清理。要确保每个代理一次仅处理一个作业/阶段,可通过以下方式实现:

1. 修改自托管代理启动参数

自托管代理默认根据CPU核心数设置并行作业数,你可在启动时指定--maxparallel 1参数,强制代理单次仅运行一个作业:

  • Linux/macOS:启动时执行
    ./run.sh --maxparallel 1
    
  • Windows:启动时执行
    run.cmd --maxparallel 1
    

若代理以系统服务运行,需修改服务配置:

  • Windows:在服务属性的「可执行文件路径」末尾追加 --maxparallel 1
  • Linux(systemd):修改代理service文件,在ExecStart行末尾添加--maxparallel 1,之后重新加载服务配置

2. 配置代理池全局并行限制

在Azure DevOps组织设置中,直接限制池内每个代理的最大并行作业数:

  1. 进入组织设置 → 代理池 → 选择你的自托管代理池
  2. 打开「池设置」,找到「最大并行作业数」选项
  3. 选择「每个代理1个作业」并保存

此方式对池内所有代理生效,无需逐个修改代理配置。

3. 作业级独占代理配置(灵活场景)

若仅需特定作业独占代理,可结合代理标签与作业需求实现:

  1. 给每个自托管代理添加唯一标签(如agent-01、agent-02)
  2. 在流水线作业中指定需求,确保每个作业分配到对应标签的代理:
    jobs:
    - job: Job1
      demands:
        - agent.name -equals agent-01
      steps:
        # 作业步骤...
    - job: Job2
      demands:
        - agent.name -equals agent-02
      steps:
        # 作业步骤...
    

额外提醒:环境清理

结合你此前排查的遗留Docker容器问题,建议在每个作业末尾添加清理步骤,避免残留资源影响后续作业:

steps:
  # 业务步骤...
- task: Bash@3
  displayName: 清理Docker环境
  inputs:
    targetType: 'inline'
    script: |
      # 停止所有运行中容器(忽略错误)
      docker stop $(docker ps -q) || true
      # 删除所有已停止容器(忽略错误)
      docker rm $(docker ps -aq) || true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:33:21