核心是将压测能力集成进镜像与CI/CD流程:在Dockerfile中预装hey等工具、COPY压测脚本与配置,用多阶段构建分离test与prod镜像;构建后启动容器执行自动化压测,失败则中断推送,并生成结构化JSON报告、触发告警与归档。

用 Docker 构建带自动化压力测试反馈的持续交付镜像,核心是把压测环节嵌入 CI/CD 流水线中,让每次构建后自动执行、自动判断、自动反馈。不是只打包应用,而是把“验证能力”一起固化进镜像或配套流程里。
压测能力要提前集成到镜像中
单纯在 Jenkins 里跑压测脚本容易环境不一致、依赖缺失。更可靠的做法是:把压测工具(如 hey、vegeta 或定制化 Python 脚本)和测试配置一起打进镜像。
- 在 Dockerfile 中添加安装命令,例如:
RUN apt-get update && apt-get install -y curl gnupg && curl -L https://github.com/rakyll/hey/releases/download/v0.1.4/hey_linux_amd64 -o /usr/local/bin/hey && chmod +x /usr/local/bin/hey - 把压测脚本(如
stress-test.sh)和配置文件(如targets.json)通过COPY指令加入镜像 - 建议将压测逻辑封装为独立入口点,比如设置
ENTRYPOINT ["./stress-test.sh"],便于后续统一调用
构建阶段就触发轻量级压测验证
在 CI 工具(如 GitHub Actions 或 Jenkins)的构建流程末尾,不直接推送镜像,而是先启动容器做快速压测——这叫“构建后验证”(Post-Build Validation)。
- 用
docker build -t myapp:dev .构建临时镜像 - 用
docker run --rm -d --name test-app -p 8080:8080 myapp:dev启动服务 - 等待几秒确保服务就绪后,执行:
hey -n 100 -c 10 http://localhost:8080/health - 检查返回状态码、平均延迟、错误率;任一指标超标(如错误率>2% 或 P95>1s),整个构建失败并中断推送
用多阶段构建分离压测与运行环境
生产镜像不需要压测工具,但 CI 流程需要。Docker 多阶段构建能干净解耦:
- builder 阶段:安装压测工具、编译代码、运行单元测试
-
tester 阶段:基于 builder 阶段产物 + 压测脚本,构建一个专用
myapp:test镜像 -
runtime 阶段:仅含最小运行时依赖(如
FROM alpine:latest),COPY 编译好的二进制或 jar 包,生成myapp:prod - CI 流程使用
myapp:test执行压测;成功后再构建并推送myapp:prod
结果反馈必须可追踪、可告警
压测不是跑完就算,输出要结构化、能接入现有监控体系:
- 压测脚本最后生成 JSON 报告(含请求总数、成功率、TPS、P50/P90/P99),写入
/report.json - CI 步骤中用
cat /report.json | jq '.error_rate'提取关键指标,存为环境变量供后续步骤读取 - 失败时自动发消息到企业微信/钉钉(用 curl 调 webhook),附上构建号、压测日志片段、性能趋势图链接(如果已对接 Grafana)
- 把报告上传到对象存储(如 COS/S3),并在 Jenkins 控制台提供直链,方便回溯


















