Azure Pipelines如何实现同一时间仅运行一个构建任务?
Azure DevOps 流水线单实例运行的内置解决方案
问题说明
你使用的batch: true是针对CI触发器的配置,作用是合并同一分支的多次提交,等当前构建完成后再运行一次包含所有新提交的构建,并非用于限制流水线的并发运行次数。所以手动启动两次流水线时,这个配置不会生效。
内置解决方案:作业级并发控制
Azure DevOps提供了内置的作业并发限制能力,具体配置方式如下:
1. 基础单实例限制
在流水线的作业定义中添加concurrency字段,将parallel设为1,即可限制同一时间仅运行一个该作业实例。如果需要让新启动的流水线直接取消正在运行的旧实例,可开启cancelInProgress(可选):
trigger: batch: true branches: include: - master - release/* resources: pipelines: - pipeline: Build project: <project-name> source: <source-pipeline-name> trigger: true jobs: - job: BuildJob concurrency: parallel: 1 # 可选:取消正在运行的旧实例,让新实例立即执行 # cancelInProgress: true steps: # 替换为你的实际构建步骤 - script: echo "执行构建任务"
2. 精细化并发控制
如果需要按分支、流水线实例等维度独立限制并发,可使用concurrency的key属性:
jobs: - job: BuildJob concurrency: key: '$(Build.SourceBranchName)' # 按分支名设置独立并发键,不同分支互不影响 parallel: 1 steps: - script: echo "执行构建任务"
补充:batch: true的适用场景
再明确下这个配置的作用:仅对分支提交触发的CI流水线生效,当同一分支短时间内有多次提交时,它会等待当前构建完成后,将所有新提交合并为一次构建运行,避免重复构建。但手动触发、资源触发(如你配置的pipeline资源触发)的流水线不受该配置影响。
另一种内置方案:环境并发限制
如果你的流水线涉及部署环节,也可以通过环境资源实现限制:
- 进入项目的「环境」页面,创建或选择目标环境
- 编辑环境设置,找到「并发限制」并设为1
- 在流水线作业中指定使用该环境:
jobs: - job: BuildJob environment: '你的环境名称' steps: - script: echo "执行构建任务"
内容的提问来源于stack exchange,提问作者Sunflame
相关产品推荐
相关产品推荐

