暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Jenkins部署实现jmeter定时压测

IT那活儿 2026-01-19
91

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!

一

环境准备

1.1 安装Jenkins
访问 Jenkins官网 下载适合操作系统的版本。
按照官方文档完成安装并启动服务。
1.2 配置Java环境
# Ubuntu/Debian
sudo apt-getupdate
sudo apt-get install openjdk-11-jdk

# 验证安装
java -version

1.3 安装JMeter
下载最新版JMeter:Apache JMeter Releases
解压后配置环境变量:
export JMETER_HOME=/path/to/jmeter
export PATH=$PATH:$JMETER_HOME/bin

二

Jenkins插件配置

2.1 安装必要插件
  • JMeter Plugin
    在Jenkins管理后台 → 系统管理 → 插件管理 → 搜索"JMeter" → 安装。
  • Performance Plugin
    用于结果可视化和阈值报警。
  • Email Extension Plugin
    测试失败时发送通知邮件。
2.2 验证插件安装
创建新流水线作业时可见JMeter构建步骤。
系统仪表盘显示性能指标图表。
三

Jenkins作业布置

3.1 新建流水线作业
选择"流水线" → 新建。
命名建议:stress-test-${环境}_repeat。
3.2 编写Jenkinsfile
pipeline {
    agent any
    tools {
        jmeter = 'JMeter 5.4.1' // 指定JMeter版本
    }
    stages {
        stage('Prepare') {
            steps {
                清理旧结果
                sh"rm -rf ${WORKSPACE}/results"
                
                动态参数示例(可选)
                env.USER_COUNT = "${params.user_count || 100}"
                env.TEST_DURATION = "${params.test_duration || 600}"
            }
        }
        stage('Run JMeter') {
            steps {
                jmeter(
                    testPlan: 'path/to/testplan.jmx',
                    jmeterHome: toolName: 'jmeter',
                    resultsFile: '**/results/*.jtl',
                    properties: [
                        'threads.count=${env.USER_COUNT}',
                        'test.duration.sec=${env.TEST_DURATION}',
                        'output.path=${WORKSPACE}/results'
                    ],
                    并行执行设置(可选)
                    serverRampUp: 60,
                    concurrency: 200
                )
            }
        }
        stage('Generate Reports') {
            steps {
                performanceReport(
                    junit:'**/*.jtl',
                    csv:'**/*.csv',
                    html: true,
                    enabledModels: ['Errors', 'Latency'],
                    thresholdPassingRate: 90
                )
            }
        }
    }
    post {
        always {
            清理构建产物(保留最近3次)
            cleanWs(patterns:'**/*', maxDays:3)
        }
        success {
            成功邮件通知
            emailext(
                subject:"JMeter Stress Test Passed: ${BUILD_NUMBER}",
                body: "Test completed successfully. View results at ${BUILD_URL}",
                to: 'team@example.com'
            )
        }
        failure {
            失败报警
            emailext(
                subject:"JMeter Stress Test FAILED: ${BUILD_NUMBER}",
                body: "Test failed! Check console output: ${BUILD_URL}/console",
                to: 'devops@example.com',
                mimeType: 'text/html'
            )
        }
    }
}

3.3 关键配置说明
  • 并行执行
    使用concurrency参数控制同时运行的测试线程数。
  • 动态参数
    通过params实现测试参数化(需在Job配置中启用参数)。
  • 结果存储
    自动清理旧结果保留最新3次构建。
  • 阈值报警
    当成功率低于90%时触发失败通知。
四

高级调度策略

4.1 定时触发
在Job配置页 → 构建触发器 → 勾选定时构建。
示例:CRON表达式
# 每日凌晨2点执行
0 2 * * *

# 每小时执行一次压力测试
0 * ** *

# 每周五下午5点执行全链路测试
0 17 * * 5

4.2 基于条件的重复
在流水线中添加条件判断:
stage('Retry on Failure') {
    when { expression { currentBuild.result == 'FAILURE' } }
    steps {
        input"Proceed with retry?"
        jmeter(...)
    }
}

4.3 多环境轮询
使用环境变量区分测试环境:
env.TEST_ENV = "${params.env || 'staging'}"
jmeter(
    properties: [
        'env.url=http://${env.TEST_ENV}.example.com'
    ]
)

五

结果分析与优化

5.1 可视化监控
  • 访问Jenkins仪表盘查看;
  • 平均响应时间趋势图;
  • 错误率热力图;
  • TPS波动曲线。
5.2 关键指标阈值设置
在Performance Plugin中配置:
- threshold:
    type: "RESPONSE_TIME"
    metric: "average"
    value: 2000
    operator: "<="
- threshold:
    type: "ERROR_RATE"
    metric: "percentage"
    value: 5
    operator: "<="

5.3 性能优化建议
如果发现瓶颈:
1)增加JMeter服务器节点(分布式测试)
2)调整JVM内存参数
# 在Jenkins启动脚本中配置
JAVA_ARGS="-Xms4096m -Xmx8192m -server"

3)优化测试脚本
  • 使用CSV文件参数化;
  • 启用HTTP缓存;
  • 减少不必要的JSR223脚本。
六

常见排查问题

6.1 权限问题
确保Jenkins有权限访问:
  • JMeter安装目录;
  • 测试结果存储路径;
  • 被测系统资源。
6.2 性能瓶颈
检查Jenkins服务器资源使用情况:
# 监控CPU和内存
top -m
vmstat 1 5

分布式测试配置示例:
jmeter(
    distributed: true,
    serverHosts: 'jmeter-master, jmeter-slave1, jmeter-slave2',
    rmiPort: 4444
)

6.3 版本兼容性
保持Jenkins插件与JMeter版本匹配;
定期更新插件和工具链。
6.4 日志管理
配置Rotating File Appender限制日志大小:
# jmeter.properties
log_file=jmeter.log
log_level=INFO
server.log_file=server.log
server.log_level=DEBUG


END


本文作者:宋振宝(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论