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

Azure DevOps Pipeline单代理如何完成当前构建再执行下一个?

单代理环境下实现流水线串行执行的配置方案

针对单代理被新构建抢占中断的问题,不同主流CI平台的配置方案如下:

GitHub Actions

通过concurrency关键字控制构建的并发策略,禁止中断正在运行的任务,让新构建排队等待:

concurrency:
  # 可根据需求调整分组规则,比如所有PR构建共用一个组就设为"pr-builds"
  group: ${{ github.workflow }}-${{ github.ref }}
  # 核心配置:不取消正在进行的构建
  cancel-in-progress: false

配置后,新触发的构建会进入队列,直到当前构建的所有作业完成后才会启动。

GitLab CI

使用resource_group限制同一资源组内的任务串行执行,确保同一时间只有一个构建在代理上运行:

# 全局配置,让整个流水线的所有作业都遵循串行规则
workflow:
  resource_group: single-agent-build-queue

# 也可以针对单个作业单独配置(如果仅部分作业需要串行)
build-job-1:
  script:
    - echo "执行第一个构建作业"
  resource_group: single-agent-build-queue

build-job-2:
  script:
    - echo "执行第二个构建作业"
  resource_group: single-agent-build-queue

同一resource_group下的任务会自动排队,不会中断正在运行的任务。

Azure DevOps

有两种简单的实现方式:

  1. 调整代理池队列并行度:进入Azure DevOps的代理池设置,找到你的代理所在队列,将「最大并行作业数」设为1。这种方式直接限制代理同一时间仅处理一个作业,所有新构建都会排队等待。
  2. 使用资源锁机制:通过自定义能力和任务实现锁,确保作业执行前获取锁,完成后释放:
pool:
  name: Your-Agent-Pool
  demands:
    - build-lock -equals available

steps:
  - script: echo "获取构建锁"
    displayName: "Acquire Build Lock"
    # 这里可以配合脚本更新代理的自定义能力为"locked"
  # 你的构建作业步骤
  - script: echo "释放构建锁"
    displayName: "Release Build Lock"
    # 更新代理的自定义能力为"available"

通用核心思路

所有方案的本质都是两点:

  • 关闭CI工具的「新构建抢占中断正在运行任务」的默认设置;
  • 限制代理同一时间仅能处理一个作业,让新构建进入等待队列而非直接抢占。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:33:21