当前位置: 首页 > article >正文

告别手动统计!用Python+飞书机器人自动推送Jira Bug日报(附完整代码)

告别手动统计用Python飞书机器人自动推送Jira Bug日报附完整代码每天下午5点测试团队的张工都会准时打开Jira开始他雷打不动的数据搬运工作查询各类Bug状态、复制到Excel、整理格式、截图发群。这个看似简单的流程往往要耗费他30分钟宝贵时间。直到他发现原来这些重复劳动可以用一个Python脚本飞书机器人Jenkins定时任务的组合完全自动化。本文将手把手教你构建一个完整的自动化Bug日报系统从环境准备到代码实现再到Jenkins部署每个环节都提供可直接复用的代码片段和配置截图。不同于简单的功能演示我们更关注如何让这套系统真正融入你的日常工作流实现一次配置永久解放。1. 系统架构与核心组件这套自动化日报系统的核心由三个部分组成Python数据处理层负责连接Jira API获取数据并进行统计计算飞书机器人通知层将统计结果格式化为富文本消息推送到群聊Jenkins调度层实现定时触发和参数化配置graph LR A[Jenkins定时任务] -- B[执行Python脚本] B -- C[Jira API查询数据] C -- D[数据处理与分析] D -- E[飞书机器人推送]表系统各组件交互关系提示整个系统设计遵循低耦合原则每个模块都可以独立替换。例如飞书机器人可以轻松替换为企业微信或钉钉机器人。2. 环境准备与基础配置2.1 Python环境搭建建议使用Python 3.8版本主要依赖库包括pip install jira3.4.1 # Jira官方Python SDK pip install requests2.31.0 # 飞书API调用 pip install python-dotenv1.0.0 # 环境变量管理创建项目目录结构/jira-automation ├── configs │ └── settings.ini # 配置文件 ├── libs │ └── feishu.py # 飞书机器人封装 ├── main.py # 主程序 └── requirements.txt # 依赖列表2.2 Jira API权限申请需要提前准备以下Jira访问凭证Jira实例URL如https://your-company.atlassian.netAPI Token在Atlassian账户设置中生成项目KEY如PROJ注意建议创建一个专用服务账号而非使用个人账号避免因人员变动导致服务中断。3. 核心代码实现3.1 Jira数据统计类我们封装一个BugReporter类来处理所有Jira交互from jira import JIRA from datetime import datetime, timedelta class BugReporter: def __init__(self, jira_url, jira_user, jira_token, project_key): self.jira JIRA( serverjira_url, basic_auth(jira_user, jira_token) ) self.project project_key def get_today_bugs(self): 获取今日新增未解决Bug jql fproject {self.project} AND status NOT IN (Done, Closed) AND created -24h return self.jira.search_issues(jql, maxResults1000) def get_unresolved_bugs(self): 获取当前版本未解决Bug jql fproject {self.project} AND status NOT IN (Done, Closed) return self.jira.search_issues(jql, maxResults1000) def generate_report(self): 生成完整统计报告 today_bugs self.get_today_bugs() unresolved_bugs self.get_unresolved_bugs() return { today_new: len(today_bugs), unresolved: len(unresolved_bugs), today_ratio: f{(len(today_bugs)/len(unresolved_bugs))*100:.1f}% if unresolved_bugs else N/A }3.2 飞书机器人消息封装飞书机器人支持丰富的消息格式我们实现一个消息构造器import requests import json class FeishuBot: def __init__(self, webhook_url): self.webhook webhook_url def send_report(self, report_data, versionNone): title f{report_data[project]} Bug日报 if version: title f - {version} message { msg_type: interactive, card: { header: { title: {tag: plain_text, content: title}, template: wathet # 蓝色主题 }, elements: [ { tag: div, text: { tag: lark_md, content: f⏰ 统计时间{report_data[time]}\n\n f 今日新增**{report_data[today_new]}**个\n f 未解决总数**{report_data[unresolved]}**个\n f 新增占比{report_data[today_ratio]} } }, { tag: action, actions: [ { tag: button, text: {tag: plain_text, content: 查看详情}, type: primary, url: report_data[jira_url] } ] } ] } } response requests.post( self.webhook, headers{Content-Type: application/json}, datajson.dumps(message) ) return response.json()4. Jenkins自动化部署4.1 参数化构建配置在Jenkins中创建自由风格项目配置以下构建参数参数名类型默认值描述PROJECT_KEY字符串PROJJira项目KeyVERSION字符串None指定版本号(可选)ENV选项prod运行环境(dev/test/prod)4.2 定时触发设置在构建触发器部分配置Cron表达式# 工作日每天17:30执行 30 17 * * 1-54.3 执行脚本配置在构建部分添加Execute Shell步骤#!/bin/bash cd /opt/scripts/jira-automation python3 main.py --project $PROJECT_KEY --version $VERSION --env $ENV5. 进阶优化与故障排查5.1 性能优化技巧JQL缓存对不变的数据设置本地缓存from cachetools import TTLCache cache TTLCache(maxsize100, ttl3600) # 1小时缓存 cache def get_unresolved_bugs(self): # 原有实现批量查询减少API调用次数issues self.jira.search_issues( project PROJ AND updated -24h, fields[summary, status], maxResults0 # 只获取总数 )5.2 常见问题解决问题1飞书消息发送失败解决方案检查webhook地址是否过期飞书机器人每半年需要续期验证消息体是否符合飞书消息规范问题2Jira API速率限制解决方案jira JIRA( serverurl, basic_auth(user, token), options{max_retries: 3} # 自动重试 )6. 扩展应用场景这套框架不仅适用于Bug统计稍作修改即可用于每日代码提交统计集成GitLab API测试用例执行报告集成TestRail项目进度周报集成Confluence例如要改造为代码提交统计只需替换Jira相关代码def get_commits(self): 获取GitLab提交数据 url f{self.gitlab_url}/api/v4/projects/{self.project_id}/repository/commits params {since: 2023-01-01, per_page: 100} return requests.get(url, headersself.headers, paramsparams).json()实际部署时发现配置正确的环境变量是关键。有次因为变量名大小写不一致脚本静默失败却没有任何错误提示。后来增加了详细的日志记录才快速定位问题import logging logging.basicConfig( levellogging.INFO, format%(asctime)s - %(name)s - %(levelname)s - %(message)s, handlers[ logging.FileHandler(debug.log), logging.StreamHandler() ] )

相关文章:

告别手动统计!用Python+飞书机器人自动推送Jira Bug日报(附完整代码)

告别手动统计!用Python飞书机器人自动推送Jira Bug日报(附完整代码) 每天下午5点,测试团队的张工都会准时打开Jira,开始他雷打不动的"数据搬运"工作:查询各类Bug状态、复制到Excel、整理格式、截…...

Vue3.0 简单商城—路由和index页面编写

上一个章节&#xff0c;简单编写了header组件&#xff1a;Vue3.0 简单商城—Header组件的编写 这篇文章简单介绍一下路由和index页面编写 1.index页面编写 我们创建一个index文件&#xff0c;代码参考下面 <template><div>这是index文件</div> </temp…...

基于Vue 3与TypeScript构建私有化ChatGPT Web客户端:从部署到二次开发全指南

1. 项目概述与核心价值最近在折腾一个基于Web的ChatGPT对话界面项目&#xff0c;叫“Akuma1tko/ChatGPTwebV15”。这名字听起来有点二次元&#xff0c;但本质上是一个开源的、可以让你自己部署的ChatGPT网页客户端。简单来说&#xff0c;它就是一个“壳子”&#xff0c;让你能通…...

Llama-3.2V-11B-cot实操手册:浏览器端响应式布局适配要点

Llama-3.2V-11B-cot实操手册&#xff1a;浏览器端响应式布局适配要点 1. 工具概览 Llama-3.2V-11B-cot是基于Meta多模态大模型开发的高性能视觉推理工具&#xff0c;专为双卡4090环境优化。该工具通过Streamlit构建了现代化的交互界面&#xff0c;支持Chain of Thought(CoT)逻…...

MoviePilot TMDB连接异常:3层技术诊断与架构优化方案

MoviePilot TMDB连接异常&#xff1a;3层技术诊断与架构优化方案 【免费下载链接】MoviePilot NAS媒体库自动化管理工具 项目地址: https://gitcode.com/gh_mirrors/mo/MoviePilot MoviePilot作为NAS媒体库自动化管理工具&#xff0c;在v2.3.6至v2.3.8版本中出现了TheMo…...

SHL英文测试-Verbal Reasoning (言语推理)

SHL英文测试-Verbal Reasoning &#xff08;言语推理&#xff09;...

基于RPA与ChatGPT的智能求职自动化系统设计与实现

1. 项目概述与核心价值最近在技术社区里&#xff0c;看到不少朋友在讨论一个叫auto_job__find__chatgpt__rpa的项目。光看这个标题&#xff0c;就挺有意思的&#xff0c;它把“找工作”、“ChatGPT”和“RPA”这三个看似不搭界的东西拧在了一起。作为一个在自动化领域摸爬滚打多…...

CANoe项目里DBC文件多了怎么办?一个CAPL函数教你轻松管理和遍历

CANoe多DBC文件管理实战&#xff1a;用CAPL实现智能遍历与动态配置 在车载网络测试领域&#xff0c;随着ECU数量增加和网络拓扑复杂化&#xff0c;单个CANoe工程往往需要加载多个DBC文件已成为常态。当项目规模扩大到包含数十个ECU、跨CAN/LIN/Ethernet多种总线时&#xff0c;D…...

Python-docx处理图片的3个隐藏坑和解决方案(附提取图片完整代码)

Python-docx图片处理实战&#xff1a;避开3个隐藏陷阱与高效解决方案 当你第一次用python-docx插入图片时&#xff0c;可能觉得这简直简单得不可思议——直到你的项目文档里出现比例失调的图表、打印模糊的产品图片&#xff0c;或是从客户发来的复杂Word中提取图片时突然报错。…...

FLUX.1-Krea-Extracted-LoRA效果展示:工业零件图中金属拉丝与氧化痕迹

FLUX.1-Krea-Extracted-LoRA效果展示&#xff1a;工业零件图中金属拉丝与氧化痕迹 1. 真实感工业图像生成新标杆 在工业设计和产品展示领域&#xff0c;如何快速生成具有真实质感的零件图像一直是个挑战。传统3D建模需要耗费大量时间&#xff0c;而普通AI生成的图像又常常带有…...

在Node.js后端服务中接入Taotoken并实现异步聊天补全调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Node.js后端服务中接入Taotoken并实现异步聊天补全调用 对于需要在Node.js后端服务中集成大模型能力的开发者而言&#xff0c;直…...

AI编程任务交接技能:高效上下文转移与团队协作实践

1. 项目概述&#xff1a;为什么我们需要“任务交接”这个技能在AI辅助编程的日常里&#xff0c;我们常常陷入一种困境&#xff1a;一个调试会话&#xff08;Session&#xff09;越拉越长&#xff0c;对话历史里混杂着尝试过的命令、失败的日志、临时的假设、以及最终找到的那一…...

GodotEnv:声明式配置实现Godot跨平台开发环境一致性

1. 项目概述&#xff1a;一个为Godot游戏引擎量身打造的自动化环境如果你和我一样&#xff0c;长期在Godot引擎中进行游戏开发&#xff0c;那么一定对“环境配置”这件事又爱又恨。爱的是&#xff0c;Godot本身已经足够轻量和跨平台&#xff1b;恨的是&#xff0c;当项目需要引…...

5分钟掌握KMS智能激活:Windows与Office全版本激活终极方案

5分钟掌握KMS智能激活&#xff1a;Windows与Office全版本激活终极方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统弹出激活提示而烦恼&#xff1f;Office突然变成只读模式…...

FLUX.1-Krea-Extracted-LoRA快速上手:3个核心参数(步数/CFG/LoRA)联动调优

FLUX.1-Krea-Extracted-LoRA快速上手&#xff1a;3个核心参数&#xff08;步数/CFG/LoRA&#xff09;联动调优 1. 模型简介 FLUX.1-Krea-Extracted-LoRA 是一款专注于真实感图像生成的AI模型&#xff0c;基于FLUX.1-dev基础模型开发。这个模型通过特殊的LoRA&#xff08;低秩…...

从SIM卡密钥泄露事件看移动通信安全:供应链攻击与纵深防御

1. 事件背景与核心问题剖析2015年初&#xff0c;一则来自《The Intercept》的报道在信息安全领域投下了一颗重磅炸弹。报道基于爱德华斯诺登提供的文件披露&#xff0c;美国国家安全局&#xff08;NSA&#xff09;和英国政府通信总部&#xff08;GCHQ&#xff09;曾联合执行了一…...

Windows Server 2022域控环境下,MDT部署工具包的保姆级安装与初始配置指南

Windows Server 2022域控环境下MDT部署工具包实战指南 在现代化企业IT运维中&#xff0c;系统部署效率直接关系到业务连续性。传统U盘安装方式在面对数十台甚至上百台设备部署时显得力不从心&#xff0c;而基于Microsoft Deployment Toolkit&#xff08;MDT&#xff09;的自动化…...

SWE-AF:三层控制环驱动的AI软件工程工厂实战解析

1. 项目概述&#xff1a;从单智能体到工程工厂的范式跃迁 如果你和我一样&#xff0c;在过去一年里尝试过各种AI编程助手&#xff0c;从Copilot到Claude Code&#xff0c;再到各种开源的代码生成模型&#xff0c;你可能会有一个共同的感受&#xff1a;它们很聪明&#xff0c;但…...

easy-notion-mcp:用Markdown无缝连接AI与Notion的MCP服务器

1. 项目概述&#xff1a;当AI助手遇上Notion&#xff0c;一个Markdown优先的桥梁如果你和我一样&#xff0c;日常重度依赖Notion来管理项目、记录想法、整理知识库&#xff0c;同时又希望AI助手&#xff08;比如Claude、Cursor的AI功能&#xff09;能直接帮你读写Notion内容&am…...

Java 项目教程《尚庭公寓》MybatisPlus、MybatisX 01 - 07

Java 项目教程《尚庭公寓》MybatisPlus、MybatisX 01 - 07 一、参考资料 【Java项目教程《尚庭公寓》java项目从开发到部署&#xff0c;适合新手其含金量高的Java项目实战】 https://www.bilibili.com/video/BV1At421K7gP/?p55&share_sourcecopy_web&vd_source8558918…...

告别默认蓝天!用Cesium SkyBox打造沉浸式游戏场景天空(附6张图资源包)

用Cesium SkyBox重构游戏世界的天空美学 在虚拟世界的构建中&#xff0c;天空从来不只是背景——它是氛围的塑造者、情绪的传导器&#xff0c;更是玩家第一眼看到的世界边界。当大多数开发者还在使用Cesium默认的蓝天白云时&#xff0c;聪明的创作者已经开始用自定义天空盒(Sky…...

Noobot智能体工作站:私有化部署与工具调用实战指南

1. 项目概述&#xff1a;一个可私有化部署的智能体工作站最近在折腾AI智能体&#xff08;Agent&#xff09;的本地化部署&#xff0c;发现很多开源项目要么太重&#xff0c;要么太轻&#xff0c;要么就是部署起来一堆坑。后来在GitHub上看到了xiayu1987的Noobot项目&#xff0c…...

Fast-Trade:声明式配置与向量化计算驱动的量化回测引擎实践

1. 项目概述&#xff1a;Fast-Trade&#xff0c;一个为量化交易者打造的“快”速回测引擎如果你在量化交易领域摸爬滚打过一阵子&#xff0c;肯定对回测这件事又爱又恨。爱的是&#xff0c;它能让你在真金白银投入市场前&#xff0c;验证策略的有效性&#xff1b;恨的是&#x…...

阿里云试用存储步骤批量导出url步骤

目前Microsoft Edge下载不了&#xff0c;夸克网页可以...

ComfyUI-Impact-Pack深度解析:突破AI图像增强的三大技术革命

ComfyUI-Impact-Pack深度解析&#xff1a;突破AI图像增强的三大技术革命 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: ht…...

中文BERT全词掩码技术:5分钟掌握核心优势与实战应用

中文BERT全词掩码技术&#xff1a;5分钟掌握核心优势与实战应用 【免费下载链接】Chinese-BERT-wwm Pre-Training with Whole Word Masking for Chinese BERT&#xff08;中文BERT-wwm系列模型&#xff09; 项目地址: https://gitcode.com/gh_mirrors/ch/Chinese-BERT-wwm …...

5分钟快速检测微信单向好友:WechatRealFriends免费工具终极指南

5分钟快速检测微信单向好友&#xff1a;WechatRealFriends免费工具终极指南 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFr…...

【AIAgent框架终极选型指南】:奇点智能大会一线实测对比,5大框架性能、扩展性、落地成本全维度拆解(2024最新权威报告)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AIAgent框架对比&#xff1a;奇点智能大会专题 在2024年奇点智能大会上&#xff0c;主流AI Agent框架的工程化能力成为焦点议题。LlamaIndex、LangChain、Semantic Kernel 与 AutoGen 四大框架被深度剖…...

【1人公司】【自研】上架可收款的微信小程序全流程

上架可收款的微信小程序全流程小编初心小编背景步骤✅腾讯的WorkBuddy写一整个前端后端数据库项目安装项目代码运行所需的环境&#xff08;如下&#xff09;内网穿透&#xff0c;让公网上的人能访问我的前端服务和后端服务 [Cpolar](https://www.cpolar.com)✅微信认证-想要他人…...

构建AI编码助手专属技能库:以Anime.js为例提升代码生成质量

1. 项目概述&#xff1a;为AI编码助手构建专属技能库 如果你和我一样&#xff0c;日常重度依赖Cursor、Claude Code这类AI编码助手来提升开发效率&#xff0c;那你一定遇到过这样的场景&#xff1a;想让AI帮你写一个流畅的动画效果&#xff0c;但无论怎么描述&#xff0c;生成…...