使用 NSSM (Non-Sucking Service Manager) 将 Allure 报告的 HTTP 服务注册为 Windows 后台服务的详细操作攻略,确保 Jenkins 测试结果可以长期通过 URL 访问。
将 allure generate
生成的报告目录托管为静态网页服务,并作为后台服务运行,实现 Jenkins 测试结果的永久访问。
假设你的工作空间路径如下:
C:\ProgramData\Jenkins\.jenkins\workspace\AndroidSmokePipline\SuuntoTest
Allure 报告输出目录应为:
C:\ProgramData\Jenkins\.jenkins\workspace\AndroidSmokePipline\SuuntoTest\allure-report
生成报告后,该目录下应该包含 [index.html]
python --version
访问 NSSM 官网,下载最新版本(推荐 nssm-2.xx
)。
解压到本地目录,例如:
C:\Program Files\nssm
打开命令提示符,进入该目录并以管理员权限运行安装命令:
cd "C:\Program Files\nssm"
nssm install AllureReportServer
在弹出的窗口中填写以下内容:
Application
python
-m http.server 8081 --bind 0.0.0.0
C:\ProgramData\\allure-report
服务文件目录Details
Allure Report Server
Serves Allure reports via HTTP on port 8081
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 构建后自动重启服务或刷新报告内容,可以在 Jenkinsfile 中添加如下脚本:
bat """
@echo on
taskkill /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,请继续告诉我!