如何通过Jenkins运行分布在不同机器上的JMeter脚本
Jenkins完全支持跨机器触发任务执行,你这个单节点统一调度多台远程机器运行本地JMeter JMX脚本的需求,有两种成熟可落地的方案,按需选择即可。
方案一:SSH插件直连执行(最轻量,无需额外安装组件)
- 打开Jenkins插件管理,搜索安装
SSH plugin,安装完成后重启Jenkins生效 - 进入系统配置页,找到
SSH remote hosts配置区块,把所有存储JMX脚本的远程机器的SSH连接信息挨个录入:填对应机器的IP、SSH端口、登录凭据(优先用SSH密钥对认证,不建议用明文密码),每台机器录完点测试连接,确认连通正常再保存 - 新建自由风格构建任务,在构建步骤中选择
Execute shell script on remote host using ssh,每台远程机器对应添加一个构建步骤:- 下拉选择之前配置好的对应远程主机
- 命令框直接填写该机器上执行JMeter脚本的命令,和你本地登录机器敲的命令完全一致,参考:
# 进入JMX脚本存放目录 cd /data/jmeter/scripts/ # 非GUI模式启动JMeter执行脚本,结果、报告存在机器本地 /opt/jmeter/bin/jmeter -n -t api_test.jmx -l test_result.jtl -e -o ./result_report/
- 默认配置下构建步骤会串行执行,也就是前一台机器的脚本跑完才会跑下一台;如果要多台机器并行压测,安装对应并行构建插件后修改执行规则即可。
这个方案优势是配置成本极低,只要远程机器开了SSH端口就能用,不需要额外部署服务;缺点是如果执行过程中SSH连接中断,远程运行的JMeter进程可能直接退出,适合执行时长较短的压测任务。
方案二:Jenkins Agent分布式构建(稳定性更高,适合长期/长时压测场景)
这是Jenkins原生提供的分布式构建能力,稳定性比纯SSH执行高很多:
- 先把所有存JMX脚本的远程机器配置为Jenkins Agent节点:
- 进入Jenkins系统管理-节点管理,新建节点,给每台机器设置辨识度高的标签,比如
jmeter-bj-01、jmeter-gz-02,指定节点上的工作目录为机器上空的专用目录即可 - 节点启动方式选择
Launch agent via SSH,填入对应机器的SSH连接信息,保存后节点会自动和Jenkins主节点建立连接,状态显示为在线就配置完成
- 进入Jenkins系统管理-节点管理,新建节点,给每台机器设置辨识度高的标签,比如
- 任务配置有两种可选方式:
- 简单场景:给每台Agent建一个独立的自由风格子任务,子任务绑定对应节点的标签,构建步骤直接填写执行本地JMX脚本的命令;再建一个父任务,配置触发规则为一键触发所有子任务执行,可按需选择串行、并行模式
- 复杂场景:直接建Pipeline流水线任务,通过标签指定每个阶段运行的节点,天然支持并行执行,参考配置:
pipeline { agent none stages { stage('全节点执行JMeter压测') { parallel { stage('北京节点执行') { agent { label 'jmeter-bj-01' } steps { sh ''' cd /data/jmeter/scripts/ /opt/jmeter/bin/jmeter -n -t bj_biz.jmx -l bj_result.jtl ''' } } stage('广州节点执行') { agent { label 'jmeter-gz-02' } steps { sh ''' cd /data/jmeter/scripts/ /opt/jmeter/bin/jmeter -n -t gz_biz.jmx -l gz_result.jtl ''' } } // 其余节点按相同格式追加即可 } } } }
这个方案的优势是稳定性强,网络临时闪断不会中断正在运行的压测任务,所有节点的执行日志会统一回传到Jenkins主节点,还能统一管控各节点的资源占用、任务队列;缺点是首次配置节点需要花少量时间,适合需要频繁跑跨节点压测的场景。
配置前提前确认所有远程机器上的JMeter版本保持一致,脚本依赖的插件、参数化配置、测试数据都提前在对应机器本地调试通过,避免因为环境差异导致执行失败。如果需要汇总所有节点的压测结果,在脚本执行完成后加一步文件传输步骤,把生成的jtl结果、报告文件传回Jenkins主节点统一归档即可,两种方案都自带文件传输能力,不需要额外写脚本传文件。
内容的提问来源于stack exchange,提问作者NOMADIC RiSHI
相关产品推荐
相关产品推荐

