name: 总结JIRA问题 description: 查询并总结指定项目的JIRA bug,按组件统计数量
总结JIRA问题
这个技能提供功能来查询指定项目的JIRA bug并生成总结统计。它利用list-jiras技能获取原始JIRA数据,然后计算按状态、优先级和组件的计数,以提供对bug积压的洞察。
何时使用此技能
在以下情况下使用此技能:
- 获取JIRA项目中开放bug的数量
- 分析bug按状态、优先级或组件的分布
- 生成bug积压的总结报告
- 跟踪bug趋势和近30天的流速(打开与关闭)
- 比较不同组件或团队的bug数量
- 基于bug指标监控组件健康或团队健康
- 获取跨所有团队组件的团队级别bug总结
先决条件
-
Python 3 安装
- 检查是否安装:
which python3 - 需要Python 3.6或更高版本
- 大多数系统预安装
- 检查是否安装:
-
JIRA 认证
- 需要设置环境变量:
JIRA_URL:JIRA实例的基础URL(例如,“https://issues.redhat.com”)JIRA_PERSONAL_TOKEN:您的JIRA承载令牌或个人访问令牌
- 如何获取JIRA令牌:
- 导航到JIRA → 个人资料 → 个人访问令牌
- 生成具有适当权限的新令牌
- 将其导出为环境变量
- 需要设置环境变量:
-
网络访问
- 脚本需要网络访问以连接到您的JIRA实例
- 确保可以发送HTTPS请求到JIRA URL
实施步骤
步骤1:验证先决条件
首先,确保Python 3可用:
python3 --version
如果未安装Python 3,请根据用户平台指导安装。
步骤2:验证环境变量
检查所需环境变量是否设置:
# 验证JIRA凭据配置
echo "JIRA_URL: ${JIRA_URL}"
echo "JIRA_PERSONAL_TOKEN: ${JIRA_PERSONAL_TOKEN:+***set***}"
如果缺少任何变量,请指导用户设置:
export JIRA_URL="https://issues.redhat.com"
export JIRA_PERSONAL_TOKEN="your-token-here"
步骤3:定位脚本
脚本位于:
plugins/teams/skills/summarize-jiras/summarize_jiras.py
步骤4:运行脚本
使用适当参数执行脚本:
# 基本用法 - 总结项目中所有开放bug
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS
# 按组件过滤
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS \
--component "kube-apiserver"
# 按多个组件过滤
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS \
--component "kube-apiserver" "Management Console"
# 按团队过滤
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS \
--team "API Server"
# 包含关闭的bug
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS \
--include-closed
# 按状态过滤
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS \
--status New "In Progress"
# 设置最大结果限制(默认100)
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS \
--limit 500
步骤5:处理输出
脚本输出JSON数据,结构如下:
{
"project": "OCPBUGS",
"total_count": 1500,
"fetched_count": 100,
"query": "project = OCPBUGS AND (status != Closed OR (status = Closed AND resolved >= \"2025-10-11\"))",
"filters": {
"components": null,
"statuses": null,
"include_closed": false,
"limit": 100
},
"summary": {
"total": 100,
"opened_last_30_days": 15,
"closed_last_30_days": 8,
"by_status": {
"New": 35,
"In Progress": 25,
"Verified": 20,
"Modified": 15,
"ON_QA": 5,
"Closed": 8
},
"by_priority": {
"Normal": 50,
"Major": 30,
"Minor": 12,
"Critical": 5,
"Undefined": 3
},
"by_component": {
"kube-apiserver": 25,
"Management Console": 30,
"Networking": 20,
"etcd": 15,
"No Component": 10
}
},
"components": {
"kube-apiserver": {
"total": 25,
"opened_last_30_days": 4,
"closed_last_30_days": 2,
"by_status": {
"New": 10,
"In Progress": 8,
"Verified": 5,
"Modified": 2,
"Closed": 2
},
"by_priority": {
"Major": 12,
"Normal": 10,
"Minor": 2,
"Critical": 1
}
},
"Management Console": {
"total": 30,
"opened_last_30_days": 6,
"closed_last_30_days": 3,
"by_status": {
"New": 12,
"In Progress": 10,
"Verified": 6,
"Modified": 2,
"Closed": 3
},
"by_priority": {
"Normal": 18,
"Major": 8,
"Minor": 3,
"Critical": 1
}
},
"etcd": {
"total": 15,
"opened_last_30_days": 3,
"closed_last_30_days": 2,
"by_status": {
"New": 8,
"In Progress": 4,
"Verified": 3,
"Closed": 2
},
"by_priority": {
"Normal": 10,
"Major": 4,
"Critical": 1
}
}
},
"note": "显示1500个总结果中的前100个。增加--limit以获得更准确的统计。"
}
字段描述:
project:查询的JIRA项目total_count:匹配问题的总数(来自JIRA搜索结果)fetched_count:实际获取的问题数量(受–limit参数限制)query:执行的JQL查询(包括最近关闭bug的过滤器)filters:应用的过滤器(组件、状态、include_closed、limit)summary:所有获取问题的总体统计total:获取问题的数量(与fetched_count相同)opened_last_30_days:最近30天创建的问题数量closed_last_30_days:最近30天关闭/解决的问题数量by_status:每个状态的问题数量(包括最近关闭的问题)by_priority:每个优先级的问题数量by_component:每个组件的问题数量(注意:问题可以有多个组件)
components:按组件的细分,包含个别总结- 每个组件键映射到:
total:分配到此组件的问题数量opened_last_30_days:此组件最近30天创建的问题数量closed_last_30_days:此组件最近30天关闭的问题数量by_status:此组件的状态分布by_priority:此组件的优先级分布
- 每个组件键映射到:
note:如果结果被截断,提供信息性消息
重要注意事项:
- 默认情况下,查询包括:开放bug + 最近30天关闭的bug
- 这允许跟踪最近关闭活动以及当前开放bug
- 脚本获取最大数量的问题(默认100,可使用
--limit配置) total_count表示JIRA中所有匹配问题- 总结统计仅基于获取的问题
- 对于大型数据集的准确统计,增加
--limit参数 - 问题可以有多个组件,因此组件总数可能超过总体总数
opened_last_30_days和closed_last_30_days帮助跟踪最近bug流和流速
步骤6:呈现结果
基于总结数据:
- 呈现总bug数量
- 突出按状态分布(例如,“新”与“进行中”的数量)
- 识别优先级细分(关键、主要、正常等)
- 显示组件分布
- 显示按组件的细分,包括状态和优先级计数
- 计算可操作指标(例如,新 + 已分配 = 需要分类/工作的bug)
- 突出每个组件的最近活动(最近30天打开/关闭)
错误处理
常见错误
-
认证错误
- 症状:HTTP 401 未授权
- 解决方案:验证JIRA_URL和JIRA_PERSONAL_TOKEN是否正确
- 检查:确保令牌未过期
-
网络错误
- 症状:
URLError或连接超时 - 解决方案:检查网络连接和JIRA_URL是否可访问
- 重试:脚本有30秒超时,考虑重试
- 症状:
-
无效项目
- 症状:HTTP 400或空结果
- 解决方案:验证项目键是否正确(例如,“OCPBUGS”,而非“ocpbugs”)
-
缺少环境变量
- 症状:关于缺少凭据的错误消息
- 解决方案:设置所需环境变量(JIRA_URL、JIRA_PERSONAL_TOKEN)
-
速率限制
- 症状:HTTP 429 请求过多
- 解决方案:等待后重试,减少查询频率
调试
通过检查stderr启用详细输出:
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS 2>&1 | tee debug.log
脚本参数
必需参数
--project:要查询的JIRA项目键- 格式:项目键(例如,“OCPBUGS”、“OCPSTRAT”)
- 必须是有效的JIRA项目
可选参数
-
--component:按组件名称过滤- 值:空格分隔的组件名称列表
- 默认:无(返回所有组件)
- 区分大小写匹配
- 示例:
--component "kube-apiserver" "Management Console"
-
--status:按状态值过滤- 值:空格分隔的状态名称列表
- 默认:无(返回除关闭外的所有状态)
- 示例:
--status New "In Progress" Verified
-
--include-closed:在结果中包含关闭的bug- 默认:false(仅开放bug)
- 当指定时,包括“关闭”状态的bug
-
--limit:最大获取问题数量- 默认:100
- 最大:1000(JIRA API每请求限制)
- 较高值提供更准确的统计但性能较慢
输出格式
脚本输出JSON,包含总结统计和按组件的细分:
{
"project": "OCPBUGS",
"total_count": 5430,
"fetched_count": 100,
"query": "project = OCPBUGS AND (status != Closed OR (status = Closed AND resolved >= \"2025-10-11\"))",
"filters": {
"components": null,
"statuses": null,
"include_closed": false,
"limit": 100
},
"summary": {
"total": 100,
"opened_last_30_days": 15,
"closed_last_30_days": 8,
"by_status": {
"New": 1250,
"In Progress": 800,
"Verified": 650
},
"by_priority": {
"Critical": 50,
"Major": 450,
"Normal": 2100
},
"by_component": {
"kube-apiserver": 146,
"Management Console": 392
}
},
"components": {
"kube-apiserver": {
"total": 146,
"opened_last_30_days": 20,
"closed_last_30_days": 12,
"by_status": {...},
"by_priority": {...}
}
},
"note": "显示5430个总结果中的前100个。增加--limit以获得更准确的统计。"
}
示例
示例1:总结所有开放bug
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS
预期输出:包含OCPBUGS项目中所有开放bug总结统计的JSON
示例2:按组件过滤
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS \
--component "kube-apiserver"
预期输出:仅包含kube-apiserver组件总结的JSON
示例3:包含关闭的bug
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS \
--include-closed \
--limit 500
预期输出:包含开放和关闭bug总结的JSON(最多500个问题)
示例4:按多个组件过滤
python3 plugins/teams/skills/summarize-jiras/summarize_jiras.py \
--project OCPBUGS \
--component "kube-apiserver" "etcd" "Networking"
预期输出:包含指定组件总结的JSON
与命令集成
此技能设计用于:
- 为JIRA bug分析提供总结统计
- 用于组件健康分析工作流
- 生成bug分类和规划报告
- 跟踪组件健康指标随时间变化
- 利用
list-jiras技能获取原始数据
相关技能
list-jiras:获取原始JIRA问题数据list-regressions:获取发布回归数据analyze-regressions:基于回归评估组件健康get-release-dates:获取OpenShift发布日期
注释
- 脚本仅使用Python标准库(无外部依赖)
- 输出始终为JSON格式,便于解析
- 诊断消息写入stderr,数据写入stdout
- 脚本内部调用
list_jiras.py获取原始数据 - 脚本有30秒HTTP请求超时(继承自list_jiras.py)
- 对于大型项目,考虑使用组件过滤器以减少查询大小
- 总结统计基于获取的问题(受–limit控制),而非总匹配问题
- 对于无总结的原始JIRA数据,使用
/teams:list-jiras代替