Jenkins+Docker测试部署

 

一、引言

在软件研发流程中,持续集成(CI)与自动化测试是保障代码质量、提升交付效率的核心环节。Jenkins 作为开源领域最流行的 CI/CD 工具,结合 Docker 容器化技术,能够构建出稳定、隔离且可复用的测试环境。

二、安装Docker

1. 虚拟机资源配置

本次用 Mac 的 UTM 虚拟机软件,安装 Ubuntu系统。

  • 网络配置:确保主机与虚拟机网络互通,以便后续通过浏览器访问 Jenkins 服务。
  • 硬件要求:
  • 内存:至少 4GB(建议 8GB)
  • CPU:至少 2 核
  • 磁盘:至少 余量 20GB

UMT中右键->在访达中显示->找到Ubuntu24.utm->显示包内容,打开查看system的CPUCount(2)和MemorySize(4G)。

虚拟机中执行df -h /,查看磁盘容量

image

2. Docker 一键安装

卸载旧版docker

sudo apt-get remove docker docker-engine docker.io containerd runc

下载并执行安装脚本

curl -fsSL https://get.docker.com -o get-docker.sh 

sudo sh get-docker.sh

给当前用户添加docker权限并生效:

sudo usermod -aG docker $USER

启动docker并设置开机自启: 

image

三、Docker部署Jenkins

利用 Docker Volume 实现 Jenkins 数据的持久化,防止容器删除后数据丢失。

创建数据卷:

docker volume create jenkins_home

image

运行容器:

docker run -d -p 8080:8080 --name 容器名 -v /代码路径/code -v /工作空间路径/jenkins-home localhost/jenkins-pytest:1.0.6

四、配置Jenkins定时任务

在日常构建中,若大量任务设置为同一时间点(如周一至周五 9:00)触发,会导致服务器资源瞬间飙升。

问题场景:配置 0 9 * * 1-5 会导致所有任务同时触发,造成 CPU/内存瓶颈。

优化方案:使用 Jenkins 的哈希随机机制 H。

配置表达式:H 9 * * 1-5

效果:Jenkins 会根据任务名称哈希计算出一个固定的分钟数(如 9:07、9:23),将负载均匀分散在 9:00-9:59 之间,有效避免了瞬时高并发压力。

五、测试报告归档与路径配置

1. 问题现象

在配置 "Archive the artifacts" 时,报错 No artifacts found,提示路径不匹配。这是因为直接在宿主机或容器内查看的绝对路径,与 Jenkins 工作空间(Workspace)的逻辑路径存在差异。

2. 解决方法:编写动态代码

可以在 Python 代码(runtest.py)中利用环境变量 WORKSPACE 动态生成路径,确保路径的准确性。

import os

workspace = os.getenv("WORKSPACE", "./")

report_dir = os.path.join(workspace, "testreport", GLOBAL_CURRENT)

os.makedirs(report_dir, exist_ok=True)

运行成功后,在虚拟机容器中查看是否生成测试报告文件夹。

#进入容器空间

docker exec -it pytest /bin/bash

查看目录是否创建成功

ls /项目代码路径/TEST/testreport/

查看报告文件是否生成

ls /项目代码路径/TEST/testreport/20260121023825/

然后在Jenkins归档配置中,填写匹配的路径:

testreport/*/testreport.html  

匹配 testreport 下所有子目录的 testreport.html

再次运行,可以在workspace下查看到测试报告了:

image

六、遇到的问题及解决

  1. Jenkins执行UI测试脚本时没有找到playwright模块:“No module named 'playwright'”

原因:未安装playwright模块。

解决:进入容器或在 Dockerfile 中执行 pip install playwright,执行 playwright install,自动下载浏览器驱动 。

  2.  Jenkins运行UI测试脚本时无法启动chromium

原因:未安装chrome。

解决:

安装依赖

apt update

安装适配新版本的依赖

apt install -y libnss3 libatk-bridge2.0-0t64 libdrm-dev libxkbcommon-dev libgbm-dev libasound2t64 libatspi2.0-0t64 libxshmfence1

确认依赖安装

dpkg -l | grep -E 'libnss3|libatk-bridge|libdrm|libxkbcommon|libgbm|libasound2|libatspi|libxshmfence'

继续安装chrome

apt install -y google-chrome-stable

脚本改为无头模式:

with sync_playwright() as p:

browser = p.chromium.launch(

headless=False,

executable_path=r'安装路径\chrome.exe'

)

七、总结

         在 虚拟机环境下,利用 Docker 搭建 Jenkins 自动化测试平台的实操,我们不仅完成了基础环境的部署,更重要的是解决了一系列典型的“从0到1”落地难题:

环境隔离与持久化:通过 Docker Volume 挂载,实现了配置与数据的持久化,保证了服务的稳定性。

资源调度优化:引入H 符号进行定时任务的负载均衡,体现了在资源有限的虚拟机环境中,精细化运维的重要性。

路径与依赖管理:厘清了 Jenkins 工作空间路径的获取逻辑,并解决了容器内 UI 测试框架(Playwright/Chrome)的依赖缺失问题。

  这套环境架构逻辑与K8s 部署原理一致。未来,我们可以在此基础上进一步扩展,例如集成企业微信/邮件通知、对接 Git 代码仓库实现自动触发,或者引入Allure报告框架生成更美观的测试结果展示。

 

posted @ 2026-05-12 10:57  枫叶151  阅读(23)  评论(0)    收藏  举报