如何从排队的Azure DevOps流水线获取队列编号并实现EC2实例伸缩
实现ADO队列驱动的EC2代理扩缩容方案
一、获取ADO排队流水线的队列编号
- 调用ADO的REST API查询排队任务:执行
GET https://dev.azure.com/{组织名}/{项目名}/_apis/build/builds?statusFilter=notStarted&api-version=7.1-preview.7,返回的JSON数据中,每个排队任务的queue.id字段就是目标队列编号。 - 身份验证需使用ADO个人访问令牌(PAT),将PAT做Base64编码后,在请求头中添加
Authorization: Basic {编码后的PAT}。
二、两种扩缩容落地方案
1. 单EC2代理直接启停(适合小规模场景)
- 编写Python/Shell脚本,检测到目标队列存在排队任务时,调用AWS SDK启动指定EC2实例:
import boto3 ec2 = boto3.client('ec2') ec2.start_instances(InstanceIds=['i-你的实例ID']) - 当队列任务全部完成后,执行脚本停止实例以节省成本:
ec2.stop_instances(InstanceIds=['i-你的实例ID'])
2. EC2自动伸缩组动态调参(适合多代理场景)
- 通过脚本调用AWS SDK调整自动伸缩组的期望容量,根据排队任务数量灵活增减实例:
autoscaling = boto3.client('autoscaling') autoscaling.update_auto_scaling_group( AutoScalingGroupName='你的伸缩组名称', DesiredCapacity=3 # 可根据排队任务数动态计算该值 ) - 可设置简单映射规则,比如每3个排队任务对应新增1个代理实例,实现智能扩缩容。
三、自动化联动配置
- 用CloudWatch Events或ADO定时流水线,周期性执行脚本查询ADO队列状态,自动触发扩缩容操作。
- 给EC2代理实例添加专属标签(如
ADO_Agent: True),确保脚本仅操作ADO代理实例,避免误触其他资源。 - 提前配置EC2实例启动脚本,确保实例启动后自动注册到目标ADO队列,无需手动配置。
内容的提问来源于stack exchange,提问作者Sushma Reddy
相关产品推荐
相关产品推荐

