我如何使用 n8n 和 coding agent API 自动化我的 bug backlog
Source: Dev.to
抱歉,我需要您提供要翻译的完整文本内容(除代码块和 URL 之外的部分),才能为您进行简体中文翻译。请将文章的正文粘贴在这里,我会按照要求保留原有的格式、Markdown 语法以及技术术语进行翻译。
解决方案
我在 OpenCode 之上构建了一个工作流,能够自动处理工单:
- 触发器 – 当 Linear(或 Jira)中出现带有特定标签的新工单时,会触发一个 webhook。
- 编排器 – n8n 接收该 webhook 并调用 CodeCloud API。
- 执行层 – CodeCloud 启动一个 AI 编码代理,克隆仓库,实施修复,并打开一个 pull request。
n8n 工作流实际上只有两个节点:一个触发器和一个 HTTP 请求。
有效的做法
| 更改类型 | 示例工单 | 结果 |
|---|---|---|
| 描述详尽的 bug | “注册按钮在 Safari 上无法提交,因为我们使用了没有 polyfill 的 FormData。” | 代理添加 polyfill 并打开 PR。 |
| 繁琐的大批量更改 | “将所有错误信息更新为使用新的 i18n 格式。” | 代理使用 grep,进行更新并打开 PR。 |
| 文档 | “为 /lib 中的所有导出函数添加 JSDoc 注释。” | 机械性工作自动处理。 |
关键洞察: 工单质量决定输出质量。此工作流迫使团队编写更好的工单,即使代理遗漏,也是一种副收益。
前置条件
- 一个 n8n 实例(云端或自行托管)。
- 一个已连接 GitHub 的 CodeCloud 账户。
- 一个 Linear(或 Jira)工作区。
Linear API 密钥
从 Settings → API → Personal API keys 创建 API 密钥。
CodeCloud Header Auth 凭证
| 名称 | 值 |
|---|---|
| Authorization | Bearer YOUR_CODECLOUD_API_KEY |
构建 n8n 工作流
节点
| 节点 | 配置 |
|---|---|
| Linear Trigger | 资源: Issue 团队: 选择你的团队 |
| HTTP Request | 方法: POST URL: https://codecloud.dev/api/v1/agents 认证: Header Auth(上面的凭证) 正文 (JSON): 见下方 |
请求体 (JSON)
{
"repo": "your-org/your-repo",
"prompt": "Please fix the bug or issue described in this ticket:\n{{ $json.data.title }}\n\n{{ $json.data.description }}",
"model": "claude-sonnet-4-5",
"provider": "anthropic",
"auto_create_pr": true
}
{{ $json.data.title }} 和 {{ $json.data.description }} 表达式从 Linear 的 webhook 负载中提取工单内容。
过滤工单
在触发器和 HTTP 请求之间添加一个 IF 节点:
Condition: {{ $json.data.labelIds }} contains YOUR_AUTO_PR_LABEL_ID
只有明确标记为自动化的工单才会被处理。
可导入的工作流 JSON
您可以通过 Workflows → Import from File 直接在 n8n 中导入以下 JSON:
{
"name": "Linear to CodeCloud PR",
"nodes": [
{
"parameters": {
"resource": "issue",
"teamId": "{{ YOUR_TEAM_ID }}"
},
"id": "linear-trigger",
"name": "Linear Trigger",
"type": "n8n-nodes-base.linearTrigger",
"typeVersion": 1,
"position": [240, 300]
},
{
"parameters": {
"method": "POST",
"url": "https://codecloud.dev/api/v1/agents",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"repo\": \"your-org/your-repo\",\n \"prompt\": \"Please fix the bug or issue described in this ticket: \\n {{ $json.data.title }}\\n\\n{{ $json.data.description }}\",\n \"model\": \"claude-sonnet-4-5\",\n \"provider\": \"anthropic\",\n \"auto_create_pr\": true\n}"
},
"id": "http-request",
"name": "Create CodeCloud Run",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [480, 300]
}
],
"connections": {
"Linear Trigger": {
"main": [[{ "node": "Create CodeCloud Run", "type": "main", "index": 0 }]]
}
}
}
将 YOUR_TEAM_ID 和 your-org/your-repo 替换为实际值,然后附加您之前创建的 Header Auth 凭证。
使用 Jira 替代 Linear
将 Linear 触发器替换为 Jira 触发器(事件:issue_created)。调整请求体以匹配 Jira 的负载:
{
"repo": "your-org/your-repo",
"prompt": "{{ $json.issue.fields.summary }}\n\n{{ $json.issue.fields.description }}",
"model": "claude-sonnet-4-5",
"auto_create_pr": true
}
有用的 API 参数
| 参数 | 描述 |
|---|---|
mode: "plan" | 返回一个实现计划而不进行实际更改——适合在执行前进行审查。 |
webhook_url | 在运行结束时收到通知的 URL;可用于将 PR 链接发送回 Slack 或更新工单状态。 |
提示与注意事项
- 工作流可能会生成不完美的 PR;将其视为草稿,开发者可以快速润色。
- 失败的尝试常常会暴露出模糊的工单细节或边缘情况,从而促使更好的文档编写。
- 首先在 Linear 中创建一个 auto‑PR label,标记几个描述清晰的 bug,激活工作流并观察结果。
下一步
CodeCloud 是一个用于运行 AI 编码代理的 API。如果您有任何问题或想分享您构建的内容,欢迎评论或查看官方文档。