Jenkins能否基于节点CPU使用率向EC2构建执行器调度构建任务?
Jenkins EC2执行器调度问题解决方案
固定Number of Executors配置优化方案
因为构建任务CPU资源消耗差异极大,直接给所有EC2节点配置统一的执行器数必然会出现资源浪费或者节点过载的问题,可先通过标签分组解决基础调度问题:
- 对所有Jenkins作业按CPU消耗打标签:将CPU占用8核以上的作业打
high-cpu标签,CPU占用1核及以下的作业打low-cpu标签 - 对EC2执行器也同步打对应标签,专门承接高CPU消耗作业的EC2节点
Number of Executors配置为2,专门承接低CPU消耗作业的节点配置为1516,混部节点配置为46,可大幅降低固定执行器数带来的调度冲突。
基于CPU利用率的动态调度实现方法
原生Jenkins EC2插件不支持基于实时节点资源利用率调度,可通过以下两种成熟方案实现需求:
方案1:轻量本地脚本 + 节点排除插件(改造成本最低)
- 每台EC2执行器上部署1个每分钟运行的定时采集脚本,采集节点1分钟平均CPU利用率,当利用率超过70%时在节点固定路径下生成
overload.lock标记文件,利用率回落至60%以下时自动删除该文件 - 安装Jenkins
Node Execution Excluder插件,配置规则:若节点存在overload.lock文件,则禁止新的构建任务调度到该节点,直到标记文件被删除 - 该方案不需要调整现有EC2插件配置,阈值可灵活调整,适合快速落地。
方案2:结合CloudWatch监控的自定义调度(准确率更高)
- 给Jenkins控制器配置EC2 CloudWatch指标只读权限,可拉取所有EC2执行器的最近5分钟平均CPU利用率数据
- 使用Jenkins
Scriptler插件托管自定义调度脚本,每次构建任务触发前,脚本自动过滤掉CPU利用率高于70%的EC2节点,仅将任务分配给剩余可用节点 - 该方案不需要在执行器侧部署额外进程,调度逻辑可根据业务需求灵活扩展。
内容的提问来源于stack exchange,提问作者Jeffrey Cai
相关产品推荐
相关产品推荐

