使用 NSSM (Non-Sucking Service Manager) 将 Allure 报告的 HTTP 服务注册为 Windows 后台服务的详细操作攻略,确保 Jenkins 测试结果可以长期通过 URL 访问。
✅ 目标
将 allure generate
生成的报告目录托管为静态网页服务,并作为后台服务运行,实现 Jenkins 测试结果的永久访问。
🧰 所需工具
- Python(3.x)
- NSSM(用于创建 Windows 服务)
- Jenkins(可选)
📁 确保目录结构正确
假设你的工作空间路径如下:
C:\ProgramData\Jenkins\.jenkins\workspace\AndroidSmokePipline\SuuntoTest
Allure 报告输出目录应为:
C:\ProgramData\Jenkins\.jenkins\workspace\AndroidSmokePipline\SuuntoTest\allure-report
生成报告后,该目录下应该包含 [index.html]
🛠 步骤一:安装 Python
- 下载并安装 Python for Windows。
- 安装时请勾选 Add to PATH。
- 验证是否安装成功:
python --version
🛠 步骤二:下载并安装 NSSM
-
访问 NSSM 官网,下载最新版本(推荐
nssm-2.xx
)。 -
解压到本地目录,例如:
C:\Program Files\nssm
-
打开命令提示符,进入该目录并以管理员权限运行安装命令:
cd "C:\Program Files\nssm" nssm install AllureReportServer
🛠 步骤三:配置 NSSM 服务
-
在弹出的窗口中填写以下内容:
-
Application
- Path:
python
- Arguments:
-m http.server 8081 --bind 0.0.0.0
- Startup directory:
C:\ProgramData\\allure-report
服务文件目录
- Path:
-
Details
- Display name:
Allure Report Server
- Description:
Serves Allure reports via HTTP on port 8081
- Display name:
-
Log On
- 推荐选择
This account
并输入当前用户账号,确保服务有足够权限访问文件。
- 推荐选择
-
Dependencies
- 默认无需更改。
-
-
点击 Install service 按钮完成安装。
🚀 步骤四:启动服务并验证访问
-
打开“服务”管理器(Win + R → 输入
services.msc
)。 -
找到名为
Allure Report Server
的服务。 -
右键点击 → Start。
-
打开浏览器访问:
http://localhost:8081
如果看到 Allure 报告首页,则说明服务已正常运行。
-
如果希望局域网内其他设备访问,请确保防火墙允许
8081
端口入站连接。
🚀 步骤五:每次报告生成后拷贝最新的报告到文件服务目录
def copy_log_file_to_http_server(log_dir):"""将 log_dir 下的最新子文件夹复制到 D:\auto_test_log\allure-report"""# 获取 log_dir 下的所有子文件夹sub_dirs = [d for d in os.listdir(log_dir) if os.path.isdir(os.path.join(log_dir, d))]if not sub_dirs:print("没有找到子文件夹。")return# 找出最新的子文件夹latest_sub_dir = max(sub_dirs, key=lambda x: os.path.getctime(os.path.join(log_dir, x)))source_path = os.path.join(log_dir, latest_sub_dir)# 定义目标路径target_base_path = r"D:\auto_test_log\allure-report"target_path = os.path.join(target_base_path, latest_sub_dir)# 如果目标路径已存在,则删除旧目录if os.path.exists(target_path):shutil.rmtree(target_path)# 复制文件夹try:shutil.copytree(source_path, target_path)print(f"成功将 {latest_sub_dir} 复制到 {target_path}")except Exception as e:print(f"复制失败: {e}")
如果看到 Allure 报告首页,则说明服务已正常运行。
- 如果希望局域网内其他设备访问,请确保防火墙允许
8081
端口入站连接。
🔁 Jenkins 自动更新报告服务(可选)
为了确保每次 Jenkins 构建后自动重启服务或刷新报告内容,可以在 Jenkinsfile 中添加如下脚本:
bat """@echo ontaskkill /F /PID $(type allure_report.pid 2>nul) >nul 2>&1 || echo No running server to kill.start /B python -m http.server 8080 > allure_report.log 2>&1 & echo !^!PID! > allure_report.pid
"""
⚠️ 注意:该脚本依赖于批处理环境变量和
allure_report.pid
文件来记录进程 ID,便于下次终止旧服务。
📝 补充建议
- 日志查看:所有服务输出会被写入
allure_report.log
,方便排查问题。 - 端口冲突:如果
8080
被占用,可以修改为其他端口如8000
。 - 权限问题:确保服务使用的账户对
allure-report
目录有读取权限。
🎯 总结
通过上述步骤,您已经成功地将 Allure 报告部署为一个 Windows 后台服务,即使关闭终端也不会中断服务。这样可以让 Jenkins 测试结果长期对外提供访问能力。
如需我帮您编写完整的服务脚本或集成到 Jenkins Pipeline,请继续告诉我!