总结JIRA问题Skill SummarizeJIRAs

这个技能用于查询JIRA系统中的bug,并生成总结统计,包括按状态、优先级和组件的计数,帮助分析bug积压、跟踪趋势和评估组件健康。关键词:JIRA、bug总结、数据分析、项目管理、软件测试、组件健康。

测试 0 次安装 0 次浏览 更新于 3/14/2026

name: 总结JIRA问题 description: 查询并总结指定项目的JIRA bug,按组件统计数量

总结JIRA问题

这个技能提供功能来查询指定项目的JIRA bug并生成总结统计。它利用list-jiras技能获取原始JIRA数据,然后计算按状态、优先级和组件的计数,以提供对bug积压的洞察。

何时使用此技能

在以下情况下使用此技能:

  • 获取JIRA项目中开放bug的数量
  • 分析bug按状态、优先级或组件的分布
  • 生成bug积压的总结报告
  • 跟踪bug趋势和近30天的流速(打开与关闭)
  • 比较不同组件或团队的bug数量
  • 基于bug指标监控组件健康或团队健康
  • 获取跨所有团队组件的团队级别bug总结

先决条件

  1. Python 3 安装

    • 检查是否安装:which python3
    • 需要Python 3.6或更高版本
    • 大多数系统预安装
  2. JIRA 认证

    • 需要设置环境变量:
      • JIRA_URL:JIRA实例的基础URL(例如,“https://issues.redhat.com”)
      • JIRA_PERSONAL_TOKEN:您的JIRA承载令牌或个人访问令牌
    • 如何获取JIRA令牌:
      • 导航到JIRA → 个人资料 → 个人访问令牌
      • 生成具有适当权限的新令牌
      • 将其导出为环境变量
  3. 网络访问

    • 脚本需要网络访问以连接到您的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_daysclosed_last_30_days帮助跟踪最近bug流和流速

步骤6:呈现结果

基于总结数据:

  1. 呈现总bug数量
  2. 突出按状态分布(例如,“新”与“进行中”的数量)
  3. 识别优先级细分(关键、主要、正常等)
  4. 显示组件分布
  5. 显示按组件的细分,包括状态和优先级计数
  6. 计算可操作指标(例如,新 + 已分配 = 需要分类/工作的bug)
  7. 突出每个组件的最近活动(最近30天打开/关闭)

错误处理

常见错误

  1. 认证错误

    • 症状:HTTP 401 未授权
    • 解决方案:验证JIRA_URL和JIRA_PERSONAL_TOKEN是否正确
    • 检查:确保令牌未过期
  2. 网络错误

    • 症状URLError或连接超时
    • 解决方案:检查网络连接和JIRA_URL是否可访问
    • 重试:脚本有30秒超时,考虑重试
  3. 无效项目

    • 症状:HTTP 400或空结果
    • 解决方案:验证项目键是否正确(例如,“OCPBUGS”,而非“ocpbugs”)
  4. 缺少环境变量

    • 症状:关于缺少凭据的错误消息
    • 解决方案:设置所需环境变量(JIRA_URL、JIRA_PERSONAL_TOKEN)
  5. 速率限制

    • 症状: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代替