Jenkins:基于机器工作空间可用性的并发构建限流需求
解决方案:基于机器工作空间的Jenkins构建限流与固定工作空间配置
核心配置思路
要实现同一机器的W1工作空间同一时间仅允许一个任务执行,同时避免Jenkins自动创建新工作空间,需要从「固定工作空间路径」和「基于节点+工作空间的互斥锁」两个维度配置。
1. 强制固定工作空间,禁用自动创建新空间
在所有任务的配置页面中:
- 找到高级项目选项,勾选「Use custom workspace」;
- 在「Directory」输入框中填写固定路径:
${JENKINS_HOME}/workspace/W1; - 保存配置。
这样所有任务都会复用指定的W1工作空间,不会因任务名不同自动生成W2、W3等新工作空间。
2. 用Lockable Resources插件实现节点级工作空间互斥
通过Lockable Resources Plugin为每台机器的W1工作空间创建独立锁资源,确保同一节点上的任务串行执行:
步骤1:安装插件
在Jenkins的「Manage Jenkins -> Plugins」中搜索并安装Lockable Resources Plugin,重启Jenkins生效。
步骤2:定义锁资源
进入「Manage Jenkins -> Configure System -> Lockable Resources」:
- 点击「Add Lockable Resource」,为每台机器创建对应的锁:
- 名称:
B1-W1(对应机器B1的W1工作空间,以此类推创建B2-W1、B3-W1); - 描述:可填写「B1节点W1工作空间互斥锁」便于识别;
- 名称:
- 保存配置。
步骤3:任务中配置锁
在每个任务的配置页面:
- 找到Build Environment,勾选「Lock resources」;
- 在「Resources to lock」输入框中填写:
${NODE_NAME}-W1;- 这里
${NODE_NAME}是Jenkins节点的内置变量,会自动匹配任务运行的机器名(B1/B2/B3),无需为每个任务单独指定锁名称;
- 这里
- 保存配置。
3. 效果验证
- J1在B1触发:正常运行,
B1-W1锁被占用; - J2在B2触发:正常运行,
B2-W1锁可用; - J1在B3触发:正常运行,
B3-W1锁可用; - J2在B1触发:进入等待队列,直到B1上的J1执行完成、
B1-W1锁释放后才会启动。
注意事项
- 所有任务必须统一配置自定义工作空间路径,避免遗漏导致自动创建新空间;
- 新增机器时,只需在Lockable Resources中添加对应
新机器名-W1的锁资源,任务配置无需修改; - 如果需要批量配置任务,可使用Jenkins的批量配置工具或脚本简化操作。
内容的提问来源于stack exchange,提问作者Ioana Coman
相关产品推荐
相关产品推荐

