# Jira Cloud API 技能集 `Jira` `Claude Code` `REST API` `SAFe` `项目管理` # Claude Code 的 Jira 技能集 用于 Claude Code CLI 的 Jira Cloud REST API 技能集,专为下一代(团队管理型)项目构建。 ## 目录 - [项目简介](#项目简介) - [目录结构](#目录结构) - [安装](#安装) - [配置](#配置) - [使用方法](#使用方法) - [技能列表](#技能列表) - [API 参考](#api-参考) - [下一代项目与经典项目的区别](#下一代项目与经典项目的区别) - [故障排查](#故障排查) - [贡献指南](#贡献指南) ## 项目简介 这是一套用于与 Jira REST API 交互的 Claude Code 技能集合。每个技能都是一个独立的文件夹,包含: - `SKILL.md` - 带有 YAML 前置元数据的 Markdown 文件,供 Claude 读取 - `scripts/` - 该领域可运行的 Node.js 和 Python 脚本 技能涵盖:身份验证、问题管理、搜索、流程转换、敏捷看板、项目管理、SAFe 模式以及 Confluence 空间管理。 ## 目录结构 ``` jira/ ├── .env # 你的凭据(不提交到版本库) ├── .env.example # 配置模板 ├── .gitignore ├── README.md ├── run.js # 脚本运行器 ├── .github/ │ ├── workflows/ │ │ └── ci.yml # CI 检查 │ └── hooks/ │ └── pre-commit # 本地预提交钩子 ├── templates/ # 组织标准模板 │ ├── TEMPLATES.md # 模板文档 │ ├── epic-template.json # Epic 结构模板 │ ├── story-template.json # 用户故事 SAFe 模板 │ ├── subtask-template.json # 子任务模式 │ └── python-jira-utils.py # 可复用的 Python 工具函数 ├── jira-auth/ │ ├── SKILL.md │ └── scripts/ │ ├── test.mjs │ └── test.py ├── jira-issues/ │ ├── SKILL.md │ └── scripts/ │ ├── create-one.mjs │ ├── create-one.py │ ├── delete-all.mjs │ └── delete-all.py ├── jira-search/ │ ├── SKILL.md │ └── scripts/ │ ├── check-issues.mjs │ └── check-issues.py ├── jira-transitions/ │ ├── SKILL.md │ └── scripts/ │ ├── workflow-demo.mjs │ └── workflow-demo.py ├── jira-agile/ │ ├── SKILL.md │ └── scripts/ │ ├── bulk-create.mjs │ └── bulk-create.py ├── jira-projects/ │ ├── SKILL.md │ └── scripts/ │ ├── check-fields.mjs │ └── check-fields.py ├── jira-project-management/ │ └── SKILL.md ├── jira-workflow/ │ └── SKILL.md ├── jira-safe/ │ ├── SKILL.md │ └── scripts/ │ ├── add-subtasks.mjs │ ├── add-subtasks.py │ ├── create-two-level.mjs │ ├── create-two-level.py │ ├── create-mvp.mjs │ └── create-mvp.py └── jira-spaces/ ├── SKILL.md └── scripts/ ├── list-spaces.mjs ├── list-spaces.py ├── create-space.mjs ├── create-space.py ├── delete-space.mjs └── delete-space.py ``` ## 安装 ### 用于 Claude Code CLI Claude Code 会在 `.claude/skills/[skill-name]/SKILL.md` 路径下自动发现技能。每个技能的 YAML 前置元数据中包含 `name` 和 `description` 字段。 **方式一:克隆到 .claude/skills/** ```bash cd your-project/.claude/skills git clone https://github.com/your-repo/jira-skills.git jira ``` 技能嵌套在 `jira/` 目录内,不会被自动发现。可在项目的 CLAUDE.md 中引用,或直接运行脚本。 **方式二:为单个技能创建符号链接** ```bash cd your-project/.claude/skills git clone https://github.com/your-repo/jira-skills.git jira # 创建符号链接以支持自动发现 ln -s jira/jira-auth jira-auth ln -s jira/jira-issues jira-issues ln -s jira/jira-search jira-search # ... 以此类推 ``` **方式三:复制所需技能** ```bash cp -r jira-skills/jira-auth your-project/.claude/skills/ cp -r jira-skills/jira-issues your-project/.claude/skills/ ``` ### 独立使用 克隆到任意目录并直接运行脚本: ```bash git clone https://github.com/your-repo/jira-skills.git cd jira-skills cp .env.example .env # 编辑 .env 填入你的凭据 node run.js test ``` ## 配置 ### 1. 获取 API Token 访问 https://id.atlassian.com/manage-profile/security/api-tokens 创建令牌。 ### 2. 创建 .env 文件 ```bash cp .env.example .env ``` 编辑 `.env`: | 变量 | 是否必填 | 说明 | |------|----------|------| | `JIRA_EMAIL` | 是 | 你的 Atlassian 账户邮箱 | | `JIRA_API_TOKEN` | 是 | 第一步创建的 API 令牌 | | `JIRA_BASE_URL` | 是 | 你的实例 URL(例如 `https://yourcompany.atlassian.net`) | | `JIRA_PROJECT_KEY` | 否 | 默认项目键(默认为 `SCRUM`) | | `JIRA_BOARD_ID` | 否 | 默认看板 ID(默认为 `1`) | ### 3. 测试连接 ```bash node run.js test ``` ## 使用方法 ### 脚本运行器 `run.js` 脚本可运行任意技能的 scripts 文件夹中的命令: ```bash node run.js <命令> [参数...] node run.js --python <命令> [参数...] # 强制使用 Python node run.js --node <命令> [参数...] # 强制使用 Node.js ``` ### 命令列表 | 命令 | 所属技能 | 说明 | Node.js | Python | |------|----------|------|:-------:|:------:| | `test` | jira-auth | 验证身份认证并运行测试套件 | 是 | 是 | | `check-fields` | jira-projects | 列出项目字段和配置 | 是 | 是 | | `check-issues` | jira-search | 列出项目中的问题 | 是 | 是 | | `create-one` | jira-issues | 创建单个测试问题 | 是 | 是 | | `delete-all` | jira-issues | 删除所有问题(默认为试运行) | 是 | 是 | | `workflow-demo` | jira-transitions | 演示工作流转换 | 是 | 是 | | `bulk-create` | jira-agile | 根据 git 提交批量创建问题 | 是 | 是 | | `add-subtasks` | jira-safe | 为问题添加子任务 | 是 | 是 | | `create-two-level` | jira-safe | 创建 Epic/Story/Subtask 层级结构 | 是 | 是 | | `create-mvp` | jira-safe | 创建完整 MVP 待办事项 | 是 | 是 | | `list-spaces` | jira-spaces | 列出 Confluence 空间 | 是 | 是 | | `create-space` | jira-spaces | 创建 Confluence 空间 | 是 | 是 | | `delete-space` | jira-spaces | 删除 Confluence 空间 | 是 | 是 | ### 命令示例 ```bash # 身份验证测试 node run.js test # 列出所有问题 node run.js check-issues # 创建测试问题 node run.js create-one # 删除所有问题(先试运行) node run.js delete-all node run.js delete-all --confirm # 实际执行删除 # 工作流转换 node run.js workflow-demo status SCRUM-123 # 检查状态 node run.js workflow-demo start SCRUM-123 # 移至进行中 node run.js workflow-demo complete SCRUM-123 # 移至已完成 node run.js workflow-demo demo SCRUM-123 # 完整周期演示 # 添加子任务 node run.js add-subtasks demo # 创建带子任务的演示故事 node run.js add-subtasks SCRUM-123 "任务1" "任务2" # 添加到已有问题 # 创建层级结构 node run.js create-two-level # Epic -> Stories -> Subtasks node run.js create-mvp # 完整 MVP 待办事项结构 # Confluence 空间 node run.js list-spaces # 列出所有空间 node run.js list-spaces --type global --limit 50 # 过滤并限制数量 node run.js create-space DOCS "Project Docs" # 创建空间 node run.js create-space DOCS "Docs" "描述" node run.js delete-space DOCS # 交互式删除 node run.js delete-space DOCS --confirm # 强制删除 ``` ### 直接执行脚本 不使用运行器,直接运行脚本: ```bash # Python(自动加载 .env) python jira-auth/scripts/test.py python jira-issues/scripts/create-one.py # Node.js(需要预先设置环境变量) export JIRA_EMAIL=... JIRA_API_TOKEN=... JIRA_BASE_URL=... node jira-issues/scripts/create-one.mjs ``` ### 平台说明 - **Windows**:Python 对控制台编码的处理更好,运行器会自动检测并优先选择 Python。 - **Linux/macOS**:Node.js 运行良好且启动更快。 - **CI/CD**:两种运行时均可,直接设置环境变量即可。 ## 技能列表 | 技能 | 涵盖内容 | |------|----------| | `jira-auth` | 身份验证、请求头、速率限制 | | `jira-issues` | 创建、读取、更新、删除问题 | | `jira-search` | JQL 查询、分页、字段选择 | | `jira-transitions` | 推动问题经历工作流状态 | | `jira-agile` | 看板、冲刺、待办事项管理 | | `jira-projects` | 项目信息、问题类型、状态 | | `jira-project-management` | 组件、版本、角色、权限 | | `jira-workflow` | 端到端工作流编排 | | `jira-safe` | SAFe 模式(Epic/Story/Subtask 层级结构) | | `jira-spaces` | Confluence 空间管理(创建、列出、删除) | 每个 `SKILL.md` 包含: - 带有 `name` 和 `description` 的 YAML 前置元数据 - TypeScript/JavaScript/Python 实现模式 - curl 示例 - 常见错误及解决方案 ## 模板 `templates/` 文件夹包含遵循 SAFe 方法论创建 Jira 问题的组织标准模板。 | 模板 | 用途 | |------|------| | `epic-template.json` | Epic 结构,包含业务成果、成功指标、范围 | | `story-template.json` | 用户故事,包含验收标准(Given/When/Then)、完成定义 | | `subtask-template.json` | 子任务命名规范和常见任务分解 | | `python-jira-utils.py` | 可复用的 Jira API Python 工具函数 | | `TEMPLATES.md` | 使用模板的完整文档 | ### 模板使用说明 模板遵循 SAFe(规模化敏捷框架)模式: **Epic 格式:** - 业务成果 - 成功指标(可衡量的 KPI) - 范围(纳入/排除) - 目标用户 **Story 格式:** - 用户故事:"作为 [用户],我希望 [目标],以便 [收益]" - 验收标准:Given/When/Then 场景 - 完成定义清单 **子任务命名:** - 动词开头格式:"创建 X"、"实现 Y"、"添加 Z" 完整文档请参阅 `templates/TEMPLATES.md`。 ## API 参考 ### 核心 API(`/rest/api/3/`) | 端点 | 方法 | 用途 | |------|------|------| | `/myself` | GET | 测试认证,获取当前用户 | | `/project/{key}` | GET | 项目详情 | | `/issue` | POST | 创建问题 | | `/issue/{key}` | GET, PUT, DELETE | 读取、更新、删除问题 | | `/issue/{key}/transitions` | GET, POST | 获取/执行流程转换 | | `/search` | POST | JQL 搜索 | ### 敏捷 API(`/rest/agile/1.0/`) | 端点 | 方法 | 用途 | |------|------|------| | `/board` | GET | 列出看板 | | `/board/{id}/sprint` | GET | 列出冲刺 | | `/sprint/{id}/issue` | GET, POST | 冲刺问题 | | `/sprint` | POST | 创建冲刺 | ### 认证请求头 ```javascript const auth = Buffer.from(`${email}:${token}`).toString('base64'); headers['Authorization'] = `Basic ${auth}`; ``` ### Atlassian 文档格式(ADF) 描述字段需要使用 ADF 格式,而非纯文本: ```json { "type": "doc", "version": 1, "content": [ { "type": "paragraph", "content": [{"type": "text", "text": "你的文字"}] } ] } ``` ## 下一代项目与经典项目的区别 这些技能专为**下一代(团队管理型)**项目构建。主要区别如下: | 方面 | 经典(公司管理型) | 下一代(团队管理型) | |------|-------------------|---------------------| | Epic 关联 | `customfield_10014` | `parent: { key: 'EPIC-KEY' }` | | Epic Name 字段 | `customfield_10011` | 不可用 | | 子任务类型 | `'Sub-task'` | `'Subtask'` | | 项目样式 | `classic` | `next-gen`,`simplified: true` | 检测项目类型: ```javascript const project = await fetch(`${JIRA_URL}/rest/api/3/project/${key}`); const isNextGen = project.style === 'next-gen' || project.simplified === true; ``` ## 故障排查 **401 未授权** - 令牌已过期或无效 - 邮箱与 Atlassian 账户不匹配 - 令牌没有 API 权限 **403 禁止访问** - 无权访问该项目/资源 - 检查项目角色和权限 **400 错误请求** - 缺少必填字段(`project.key`、`summary`、`issuetype.name`) - 描述中 ADF 格式无效 - 无效的转换 ID(请先查询可用的转换) **404 未找到** - 问题或项目不存在 - 键值拼写错误 **429 请求过多** - 已触发速率限制。Jira Cloud 每用户每小时约允许 900 次请求。 - 退避并以指数级延迟重试。 ## 速率限制 Jira Cloud 每用户每小时约允许 900 次请求。若收到 429 响应: 1. 检查 `X-RateLimit-Remaining` 响应头 2. 等待至 `X-RateLimit-Reset` 时间戳后再重试 3. 对重试实现指数退避策略 ## 贡献指南 ### CI 检查 Pull Request 会自动运行以下检查: - SKILL.md 文件的 YAML 前置元数据验证 - Node.js 语法验证 - Python 语法验证 - 目录结构验证 - 敏感信息检测 ### 本地预提交钩子 安装预提交钩子,在推送前捕获问题: ```bash cp .github/hooks/pre-commit .git/hooks/pre-commit chmod +x .git/hooks/pre-commit ``` ### 添加新技能 1. 创建文件夹:`jira-newskill/` 2. 添加带有前置元数据的 `SKILL.md`: ```yaml --- name: jira-newskill description: 简要描述,让 Claude 了解何时使用此技能。 --- ``` 3. 添加包含 `.mjs` 和/或 `.py` 脚本的 `scripts/` 文件夹 4. 更新 `run.js` 中的脚本映射 5. 更新 README 命令表格 ## 许可证 MIT