名称: 列出JIRA问题 描述: 查询并返回特定项目的原始JIRA bug数据
列出JIRA问题
此技能提供查询指定项目的JIRA bug并返回原始问题数据的功能。它使用JIRA REST API获取完整的bug信息,包括所有字段和元数据,不进行任何摘要处理。
何时使用此技能
在需要以下情况时使用此技能:
- 获取原始JIRA问题数据以供进一步处理
- 访问完整问题详情,包括所有字段
- 构建自定义分析工作流
- 为其他命令(如
summarize-jiras)提供数据 - 导出JIRA数据供离线分析
前提条件
-
Python 3 安装
- 检查是否已安装:
which python3 - 需要Python 3.6或更高版本
- 大多数系统预安装
- 检查是否已安装:
-
JIRA 认证
- 需要设置环境变量:
JIRA_URL: JIRA实例的基础URL(例如,“https://issues.redhat.com”)JIRA_PERSONAL_TOKEN: 您的JIRA承载令牌或个人访问令牌
- 如何获取JIRA令牌:
- 导航至JIRA → 个人资料 → 个人访问令牌
- 生成具有适当权限的新令牌
- 将其导出为环境变量
- 需要设置环境变量:
-
网络访问
- 脚本需要网络访问以连接到您的JIRA实例
- 确保可以向JIRA URL发送HTTPS请求
实施步骤
步骤 1: 验证前提条件
首先,确保Python 3可用:
python3 --version
如果未安装Python 3,根据用户平台指导安装。
步骤 2: 验证环境变量
检查是否设置了所需环境变量:
# 验证JIRA凭据已配置
echo "JIRA_URL: ${JIRA_URL}"
echo "JIRA_PERSONAL_TOKEN: ${JIRA_PERSONAL_TOKEN:+***设置***}"
如果缺少任何变量,指导用户设置:
export JIRA_URL="https://issues.redhat.com"
export JIRA_PERSONAL_TOKEN="your-token-here"
步骤 3: 定位脚本
脚本位于:
plugins/teams/skills/list-jiras/list_jiras.py
步骤 4: 运行脚本
执行脚本并添加适当参数:
# 基本用法 - 项目中的所有开放bug
python3 plugins/teams/skills/list-jiras/list_jiras.py \
--project OCPBUGS
# 按组件过滤
python3 plugins/teams/skills/list-jiras/list_jiras.py \
--project OCPBUGS \
--component "kube-apiserver"
# 按多个组件过滤
python3 plugins/teams/skills/list-jiras/list_jiras.py \
--project OCPBUGS \
--component "kube-apiserver" "Management Console"
# 包括已关闭的bug
python3 plugins/teams/skills/list-jiras/list_jiras.py \
--project OCPBUGS \
--include-closed
# 按状态过滤
python3 plugins/teams/skills/list-jiras/list_jiras.py \
--project OCPBUGS \
--status New "In Progress"
# 设置最大结果限制(默认100)
python3 plugins/teams/skills/list-jiras/list_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
},
"issues": [
{
"key": "OCPBUGS-12345",
"fields": {
"summary": "Bug title here",
"status": {
"name": "New",
"id": "1"
},
"priority": {
"name": "Major",
"id": "3"
},
"components": [
{"name": "kube-apiserver", "id": "12345"}
],
"assignee": {
"displayName": "John Doe",
"emailAddress": "jdoe@example.com"
},
"created": "2025-11-01T10:30:00.000+0000",
"updated": "2025-11-05T14:20:00.000+0000",
"resolutiondate": null,
"versions": [
{"name": "4.21"}
],
"fixVersions": [
{"name": "4.22"}
],
"customfield_12319940": "4.22.0"
}
},
...more issues...
],
"note": "Showing first 100 of 1500 total results. Increase --limit for more data."
}
字段描述:
project:查询的JIRA项目total_count:JIRA中匹配问题的总数(来自搜索结果)fetched_count:实际获取的问题数(受–limit参数限制)query:执行的JQL查询(包括最近关闭bug的过滤器)filters:应用的过滤器(components、statuses、include_closed、limit)issues:原始JIRA问题对象数组,每个包含:key:问题键(如"OCPBUGS-12345")fields:包含问题所有JIRA字段的对象:summary:问题标题/摘要status:包含名称和ID的状态对象priority:包含名称和ID的优先级对象components:组件对象数组assignee:包含用户详情的分配对象created:创建时间戳updated:最后更新时间戳resolutiondate:解决时间戳(如未关闭则为null)versions:影响版本数组fixVersions:修复版本数组customfield_12319940:目标版本(自定义字段)- 以及其他适用的JIRA字段
note:如果结果被截断,则为信息性消息
重要说明:
- 默认情况下,查询包括:开放bug + 最近30天内关闭的bug
- 这允许跟踪最近关闭活动以及当前开放bug
- 脚本获取最大问题数(默认1000,可通过
--limit配置) total_count表示JIRA中所有匹配问题- 返回的数据包括每个问题的所有字段,提供完整信息
- 对于大型数据集,增加
--limit参数以获取更多问题 - 问题可以有多个组件
- 所有JIRA字段数据以原始格式保留
步骤 6: 呈现结果
基于原始JIRA数据:
- 告知用户总数与获取数的对比
- 解释原始数据包括所有JIRA字段
- 建议使用
/teams:summarize-jiras如果需要摘要统计 - 原始问题数据可以传递给其他命令进行进一步处理
- 突出任何截断情况,建议增加–limit
错误处理
常见错误
-
认证错误
- 症状:HTTP 401 未授权
- 解决方案:验证JIRA_PERSONAL_TOKEN是否正确
- 检查:确保令牌未过期
-
网络错误
- 症状:
URLError或连接超时 - 解决方案:检查网络连接和JIRA_URL是否可访问
- 重试:脚本有30秒超时,考虑重试
- 症状:
-
无效项目
- 症状:HTTP 400 或空结果
- 解决方案:验证项目键是否正确(如"OCPBUGS",不是"ocpbugs")
-
缺少环境变量
- 症状:关于缺少凭据的错误消息
- 解决方案:设置所需环境变量(JIRA_URL、JIRA_PERSONAL_TOKEN)
-
速率限制
- 症状:HTTP 429 请求过多
- 解决方案:重试前等待,减少查询频率
调试
通过检查stderr启用详细输出:
python3 plugins/teams/skills/list-jiras/list_jiras.py \
--project OCPBUGS 2>&1 | tee debug.log
脚本参数
必需参数
--project:要查询的JIRA项目键- 格式:项目键(如"OCPBUGS"、“OCPSTRAT”)
- 必须是有效的JIRA项目
可选参数
-
--component:按组件名称过滤- 值:组件名称的空格分隔列表
- 默认:无(返回所有组件)
- 区分大小写匹配
- 示例:
--component "kube-apiserver" "Management Console"
-
--status:按状态值过滤- 值:状态名称的空格分隔列表
- 默认:无(返回除Closed外的所有状态)
- 示例:
--status New "In Progress" Verified
-
--include-closed:在结果中包括已关闭的bug- 默认:false(仅开放bug)
- 指定时,包括"Closed"状态的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
},
"issues": [
{
"key": "OCPBUGS-12345",
"fields": {
"summary": "Example bug",
"status": {"name": "New"},
"priority": {"name": "Major"},
"components": [{"name": "kube-apiserver"}],
"created": "2025-11-01T10:30:00.000+0000",
...
}
},
...
],
"note": "Showing first 100 of 5430 total results. Increase --limit for more data."
}
示例
示例 1: 列出所有开放bug
python3 plugins/teams/skills/list-jiras/list_jiras.py \
--project OCPBUGS
预期输出:包含OCPBUGS项目中所有开放bug的原始问题数据的JSON
示例 2: 按组件过滤
python3 plugins/teams/skills/list-jiras/list_jiras.py \
--project OCPBUGS \
--component "kube-apiserver"
预期输出:仅kube-apiserver组件的原始问题数据的JSON
示例 3: 包括已关闭的bug
python3 plugins/teams/skills/list-jiras/list_jiras.py \
--project OCPBUGS \
--include-closed \
--limit 500
预期输出:开放和已关闭bug的原始问题数据的JSON(最多500个问题)
示例 4: 按多个组件过滤
python3 plugins/teams/skills/list-jiras/list_jiras.py \
--project OCPBUGS \
--component "kube-apiserver" "etcd" "Networking"
预期输出:指定组件的bug的原始问题数据的JSON
与命令的集成
此技能设计用于:
- 向其他命令(如
summarize-jiras)提供原始JIRA数据 - 直接用于临时JIRA查询
- 作为自定义分析工作流的数据源
- 导出JIRA数据供离线处理
相关技能
summarize-jiras:从JIRA数据计算摘要统计list-regressions:获取发布回归数据analyze-regressions:基于回归评估组件健康状况get-release-dates:获取OpenShift发布日期
说明
- 脚本使用Python的
urllib和json模块(无外部依赖) - 输出始终为JSON格式,便于解析和进一步处理
- 诊断消息写入stderr,数据写入stdout
- 脚本对HTTP请求有30秒超时
- 对于大型项目,考虑使用组件过滤器以减少查询大小
- 返回的数据包括所有JIRA字段的完整信息
- 如果需要摘要统计而不是原始数据,请使用
/teams:summarize-jiras