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 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,请继续告诉我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/911766.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/911766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从ADI与AMD的专利诉讼,看高端FPGA的巅峰对决

RFSoC,作为FPGA家族中的“贵族”,高端芯片中的尖端代表,技术积累要求高、利润厚,售价贵,主要面向不差钱的军用雷达处理、通信和测试/测量仪器用户。 2019年,模拟芯片龙头ADI公司,发起专利侵权诉讼,而尝到甜头的赛灵思,一边反诉,一边揶揄ADI公司:爱哭的娃未必有奶吃…

性能测试-jmeter实战3

课程:B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战3 负载测试稳定性测试负载测试曲线图其他测试策略并发测试压力测试容量测试 性能指标的介绍响应时间并发用户数…

Maven镜像

在 Maven 中配置多个镜像源,主要是为了解决依赖包在不同地区下载速度不同的问题,或者为了使用特定的私有仓库作为依赖源。Maven 支持在 pom.xml 文件中配置多个镜像源(repositories),也可以在 Maven 的全局配置文件 se…

ArduPilot 教程(2):运行第一个 SITL 无人机仿真

目录 1. MAVLink 通信协议 2. MAVProxy 地面控制站 3. 运行 SITL 无人机仿真 3.1. 使用 MAVProxy 控制无人机 3.2. 使用 SITL 地图界面控制无人机 4. MAVProxy 常用命令 5. 其它地面控制站 5.1. QGroundControl 5.2. MissionPlanner 5.3. 不启用 MAVProxy 6. 本讲小…

开源AI大模型驱动下视频媒介对图文生态的重构与S2B2C商业场景创新——基于AI智能名片与商城小程序源码的实践分析

摘要:数字媒介演进的进程中,视频对图片及文字的媒介侵蚀效应正呈现加速态势,尤其在Z世代及新网民群体中,视频已成为其触网的首要信息载体。本文基于媒介技术迭代与商业场景融合的双重视角,探究开源AI大模型如何通过智能…

Kafka线上集群部署方案:从环境选型到资源规划思考

在分布式消息系统的落地应用中,Kafka集群的线上部署方案直接关系到业务系统的稳定性与性能表现。不同于测试环境的简易搭建,生产级集群需要从操作系统适配、存储介质选型、容量规划到网络资源调度等多维度进行系统性设计。本文将从工程实践角度&#xff…

算法第40天|买卖股票的最佳时机 1 2 3

121. 买卖股票的最佳时机 题目 思路与解法 记录每一天买或不买时的价值 class Solution { public:int maxProfit(vector<int>& prices) {// dp数组含义&#xff1a;// dp[i][0]:第i天&#xff0c;持有股票时的最大价值&#xff0c;dp[i][1]:第i天&#xff0c;不持…

【赵渝强老师】使用select...into outfile语句备份MySQL

MySQL可以使用select…into outfile语句将表的内容导出为一个文本文件。其基本的语法格式如下&#xff1a; select [列名] from 表名 [WHERE 语句] into outfile 目标文件 [其他选项];该语句分为两个部分。前半部分是一个普通的select语句&#xff0c;通过这个select语句来查询…

PHY XGE 自协商AN数据交互过程

在裸机环境下&#xff0c;两个 **支持 10GBASE-T** 的 PHY 芯片通过 Clause 73 协议完成自协商&#xff08;Auto-Negotiation&#xff0c;AN&#xff09;&#xff0c;它们在 **无操作系统控制** 的条件下&#xff0c;完成以下 **完整的点对点数据交互流程**&#xff1a; --- ##…

【算法 day09】LeetCode 232.用栈实现队列 | 225. 用队列实现栈 | 20. 有效的括号 |1047. 删除字符串中的所有相邻重复项

232.用栈实现队列 题目链接 | 文档讲解 |视频讲解 : 链接 1.思路&#xff1a; 使用2个栈去实现队列 先将元素放入栈1中&#xff0c;然后在将栈1中的元素出栈到栈2中&#xff0c;栈2的元素出栈顺序就和队列的出队一样 2.代码&#xff1a; class MyQueue {Stack<Integer…

大模型项目实战:业务场景和解决方案

你的这张图已经涵盖了很多主流的大模型实战项目&#xff0c;非常全面&#xff01;下面我会补充更多市面上常见的AI大模型实战项目&#xff0c;并且简要说明每个项目的核心内容、实现思路和主流技术栈&#xff0c;方便你参考和扩展。 1. 智能问答/知识库系统 核心内容&#xff…

vscode + Jlink 一键调试stm32 单片机程序(windows系统版)

vscode Jlink 一键调试stm32 单片机程序 安装交叉编译工具链安装 x-pack 构建工具安装 JLink 工具gnu-debuger 插件编译一键启动调试 安装交叉编译工具链 stm32采用 交叉编译工具链 arm-none-eabi-xxx, 下载之后解压&#xff0c;压缩包内部结构如下图&#xff1a; 目录下的bi…

Linux线程概念和控制

Linux线程概念 Linux中线程如何理解 线程<执行流<进程 Linux中的线程模拟进程实现&#xff08;线程就是轻量级进程&#xff09; 与独立的进程相比&#xff0c;线程创建和销毁的开销较小&#xff0c;因为它们共享相同的内存空间和资源。 线程是进程内的执行分支&…

服务器出现问题,连接服务器出现3680 并删除数据库出现1192,请查看详细问题(运维)

mysql连接服务器时&#xff0c;出现这个问题&#xff1a;3680 - Failed to create schema directory xxxx (errno: 28 - No space left on device) 第一步&#xff1a;诊断问题类型 检查磁盘空间 运行以下命令&#xff1a; bash df -h # 查看磁盘使用情况 如果输出中 Use% 接…

uniapp:微信小程序胶囊「复制链接」灰色处理

在原生开发的小程序中默认是支持复制的 &#x1f424; 但是在 uniapp 开发的小程序中无法复制&#xff08;体验版与开发版都可以进行复制&#xff0c;但发布后不可&#xff09; 解决方法&#xff1a; methods: {onShareAppMessage: function() {// return custom share data …

差分数组c++

温度波动记录 每天记录温度&#xff0c;支持区间温度调整和单日查询 输入&#xff1a; 第一行&#xff1a;一个整数n表示有n个温度 第二行&#xff1a;n个数表示具体温度 第三行&#xff1a;三个整数&#xff1a;S&#xff0c;e&#xff0c;c&#xff0c;表示从…

Vue.js 列表过滤实现详解(watch和computed实现)

Vue.js 列表过滤实现详解 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthd…

性能测试-jmeter实战4

课程&#xff1a;B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战4 jmeter环境搭建1. 安装Java环境&#xff08;必需&#xff09; JMeter环境搭建完整指南1. 安装Java&#xff0…

GPPT(Graph Pre-training and Prompt Tuning)项目复现

GPPT(Graph Pre-training and Prompt Tuning)项目复现 项目概述 GPPT是一种创新的图神经网络预训练与提示调整框架,由MingChen-Sun等人提出。该项目通过将自然语言处理中的提示学习概念引入图领域,解决了图预训练模型在下游任务中的适应性问题。 环境配置 # 创建Python…

anchor 智能合约 IDL 调用

简介&#xff1a;通过 IDL 生成代码 调用 anchor 智能合约。 全网首发 使用 anchor 可以快速开发 solana 上面的智能合约 &#xff0c; 在本案例中我们 先使用 anchor 创建一个只能合约&#xff08; 多个函数方法&#xff09;。 部署到 dev 链上。 通过 anchor 的 IDL 生成 代码…