Windows注册HTTP服务实现Jenkins Allure报告、测试日志永久访问

使用 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

  1. 下载并安装 Python for Windows。
  2. 安装时请勾选 Add to PATH
  3. 验证是否安装成功:
    python --version
    

步骤二:下载并安装 NSSM

  1. 访问 NSSM 官网,下载最新版本(推荐 nssm-2.xx)。

  2. 解压到本地目录,例如:

    C:\Program Files\nssm
    
  3. 打开命令提示符,进入该目录并以管理员权限运行安装命令:

    cd "C:\Program Files\nssm"
    nssm install AllureReportServer
    

步骤三:配置 NSSM 服务

  1. 在弹出的窗口中填写以下内容:

    • Application

      • Path: python
      • Arguments: -m http.server 8081 --bind 0.0.0.0
      • Startup directory: C:\ProgramData\\allure-report 服务文件目录
    • Details

      • Display name: Allure Report Server
      • Description: Serves Allure reports via HTTP on port 8081
    • Log On

      • 推荐选择 This account 并输入当前用户账号,确保服务有足够权限访问文件。
    • Dependencies

      • 默认无需更改。
  2. 点击 Install service 按钮完成安装。


步骤四:启动服务并验证访问

  1. 打开“服务”管理器(Win + R → 输入 services.msc)。

  2. 找到名为 Allure Report Server 的服务。

  3. 右键点击 → Start

  4. 打开浏览器访问:

    http://localhost:8081
    

    如果看到 Allure 报告首页,则说明服务已正常运行。

  5. 如果希望局域网内其他设备访问,请确保防火墙允许 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 报告首页,则说明服务已正常运行。

  1. 如果希望局域网内其他设备访问,请确保防火墙允许 8081 端口入站连接。

Jenkins 自动更新报告服务(可选)

为了确保每次 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,请继续告诉我!

你可能感兴趣的:(Jenkins,windows,http,jenkins)