在日常开发流程中,一个典型的 Bug 修复通常是这样的:
- 产品或测试提交 Issue
- 开发阅读 Issue 描述
- 定位代码
- 实施修复
- 提交代码并创建 PR
- 更新 Issue 状态
如果观察这个流程,会发现其中大量步骤是重复性操作。因此一个很自然的想法是:
是否可以让 AI 自动完成整个 Issue 修复流程?
随着 AI Agent 工具的发展,例如
Claude Code
和
Cursor
这个想法变得越来越可行。
本文介绍一种实践方式:通过 Agent Skill 自动化 Jira Issue 修复流程。
一、最初的想法:完全自动修复 Issue
最初的设想是构建一个完整的自动修复流程:
Jira Issue ↓ AI 分析问题 ↓ 搜索代码 ↓ 生成修复 ↓ 提交 PR ↓ 更新 Issue 状态
理论上整个流程可以完全自动完成。
但在实际尝试后,很快遇到几个问题:
1 Issue 描述质量不稳定
很多 Issue 信息不完整,需要人工补充。
2 AI 修改代码风险较高
如果完全自动提交 PR,很容易引入新的问题。
3 自动化流程不可控
一旦系统错误执行,可能影响开发流程。
因此,一步到位的自动化风险过大。
二、调整思路:先实现一个 Agent Skill
为了降低风险,我将方案调整为:
先实现一个Jira 修复 Skill
整体架构如下:
Agent (Claude Code / Cursor) ↓ Jira Skill ↓ Jira CLI ↓ Jira
职责划分非常清晰:
Agent 负责
- 理解 Issue
- 搜索代码
- 制定修复方案
- 修改代码
Skill 负责
- 提供 Jira 操作能力
这种设计遵循
AgentSkills
规范。
开发者可以通过命令调用 Skill:
/fix-jira-issue ISSUE_URL
例如:
/fix-jira-issue https://issue.xsky.com/browse/SPRING-9415
三、Skill 的完整工作流程
当 Agent 调用 Skill 时,整体修复流程如下:
- 读取 Jira Issue
- 分析 Issue 内容
- 在仓库中搜索相关代码
- 生成修复方案
- 修改代码
- 生成 commit message
- 生成 PR 描述
- 根据需要更新 Issue 状态
需要注意的是:
代码搜索由 Agent 完成,而不是 Skill。
Skill 只负责与外部系统交互。
这种设计可以保持 Skill 简单、稳定且易复用。
四、第一个坑:直接调用 Jira API
一开始,我尝试直接使用 curl 调用 Jira REST API:
curl https://jira/api/issue/xxx
但这种方式很快暴露出几个问题:
1 Agent 很容易写错 API
API 参数较多,AI 经常生成错误请求。
2 新 API 学习成本高
不同 Jira 实例 API 版本不同。
3 Prompt 难以维护
如果把 API 文档全部写进 Prompt,会非常冗长。
最终发现这种方式稳定性不足。
五、解决方案:使用 Jira CLI
后来我改用一个开源工具:
jira-cli
CLI 的优势非常明显:
1 API 复杂性被封装
Agent 不需要理解 REST API。
2 命令结构简单
例如:
jira issue view PROJ-123
3 输出结构稳定
更适合 Agent 解析。
但原始 jira-cli 的能力不够,因此我对它做了一些增强。
六、增强 jira-cli 能力
为了让 Agent 能获取足够信息,我增加了三类能力。
1 字段查看
Agent 可以读取 Issue 的任意字段:
jira issue field PROJ-123 description
读取自定义字段:
jira issue field PROJ-123 customfield_11103
这样 Agent 就可以读取:
- description
- 自定义业务字段
- 其他上下文信息
2 Issue 状态流转
查看可用状态流转:
jira issue transitions PROJ-123
执行流转:
jira issue transition PROJ-123 31
支持附加字段:
jira issue transition PROJ-123 31 --field resolution=Done
甚至支持 JSON 参数:
jira issue transition PROJ-123 31 --field-json '{"resolution":{"name":"Done"}}'
这使得 Agent 可以在修复完成后自动推进 Issue 状态。
3 附件管理
很多 Issue 会包含截图或日志文件,因此附件能力非常重要。
列出附件:
jira issue attachment list PROJ-123
下载附件:
jira issue attachment download PROJ-123
Agent 可以读取截图、日志等信息,从而提高修复准确性。
七、Skill 的实现结构
Skill 目录结构如下:
fix-jira-issue ├── references │ ├── help.md │ └── transitions.md └── SKILL.md
核心逻辑在 SKILL.md 中。
Skill 定义:
name: fix-jira-issue description: when user want to fix jira issue, you can use this skill
Skill 会首先检查环境:
jira --version echo $JIRA_HOST echo $JIRA_API_VERSION
如果缺失依赖,会提示用户安装:
npm install -g @acring/jira-cli
并配置环境变量。
八、自动修复流程
Skill 执行的主要步骤如下。
1 获取 Issue 信息
jira issue view <issue-key>
并下载附件:
jira issue attachment download <issue-key> --output ./tmp/
2 分析上下文
Agent 会:
- 读取附件
- 结合 Issue 描述
- 判断是否具备修复条件
如果上下文不足,会提示用户补充信息。
3 创建修复分支
根据 Issue 类型创建分支:
git checkout -b fix/<issue-key>
例如:
fix/NTOS-3705
4 实施修复
Agent:
- 搜索相关代码
- 修改最小范围代码
- 保持代码风格一致
5 创建 MR / PR
提交代码后生成 MR:
fix(SPRING-9257): 修复共享路径校验失败的问题
MR 描述模板:
## Summary 变更说明 ## Issue 链接到 Issue ## Changes 具体修改 ## Test plan 测试计划
6 更新 Issue 状态
在 MR 创建后,可以自动执行状态流转:
jira issue transition PROJ-123 31
例如将 Issue 推进到:
- 提交审核
- QA 测试
- 已完成
九、实践效果
通过这种方式,开发者只需要执行:
/fix-jira-issue ISSUE_URL
Agent 就可以自动完成:
- 读取 Issue
- 下载附件
- 分析问题
- 修改代码
- 生成 PR
- 更新 Issue 状态
整个 Bug 修复流程被大幅自动化。
十、总结
这次实践有两个重要结论。
1 CLI 比直接调用 API 更适合 Agent
相比 curl:
- CLI 更稳定
- 命令更简单
- Agent 更容易理解
2 Agent Skill 是企业落地 AI 自动化的有效方式
相比完全自动系统:
- Skill 风险更低
- 可以逐步验证
- 更容易融入现有开发流程
随着 Agent 工具的发展,通过 Skill 自动化开发流程将变得越来越普遍。
而 自动修复 Issue,只是其中一个非常有潜力的应用场景。
