跳至内容
AI 代理
人工智能

使用 Devin 进行软件开发:集成、测试与 CI/CD(第 3 部分)

了解 Devin 如何通过管理 Jira 工单、更新 Slack,并在合并前使用 GitHub Actions 运行 CI/CD 检查来融入团队工作流。
Marie Fayard's photo
Marie Fayard
已更新 · 12分钟 阅读

使用 AI 探索

ChatGPTClaudePerplexity

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续
继续操作即表示您接受我们的《使用条款》和《隐私政策》,并同意您的数据存储在美国。

欢迎回来!在第二篇教程结尾,我们已经拥有了一个粉彩主题的 fp-ts 操作台、NestJS + PostgreSQL 的后端,以及匿名 UUID 进度跟踪。

您可以在此处访问 Devin 系列的全部教程:

  1. 环境搭建与首个 Pull Request(第 1 部分)
  2. 用 Devin 交付一条垂直功能线(第 2 部分)
  3. 集成、测试与 CI/CD(第 3 部分)
  4. 安全、防护、部署与运维(第 4 部分)

到目前为止所做的工作非常适合个人黑客式开发,但现在该看看 Devin 与团队工作流的整合效果了。在第三篇教程中,我们将关注:

  • 集成:Devin 会打开 Jira 工单、着手处理它们,并将每个 PR 的状态直接广播到 Slack。
  • 质量闸口:我们将为 API 添加 Jest 单元测试、为 UI 添加 Playwright 端到端流程,并强制 90% 覆盖率。
  • CI/CD:GitHub Actions 会进行 lint、类型检查、运行全部测试,并在合并前将 Playwright 报告附加到 Pull Request。

暂不涉及认证和生产部署,这些将放在第 4 部分!

在 Devin 上设置 Slack 集成

将 Devin 接入您的沟通与工单流程完全是手动操作,通过 Devin 的界面完成。

您可以在 Devin 设置的集成选项卡中连接 Slack,或从 Slack 应用目录安装“Devin AI”应用。

devin integration with slack

devin requesting permission to access the slack workspace

该应用在 OAuth 对话框中仍显示“未获 Slack 批准”。Cognition 表示其安全审查正在进行中,不影响功能。

然后选择一个频道:

choosing a slack channel for the devin

您可以只需提及一下就与 Devin 对话:

它会开启一个会话,您可以在 UI 中访问:

Devin starts a session in the UI

默认情况下,您会在所选频道收到 PR 更新通知,但您可以在每个会话的参数中微调不同的通知设置。

在 Devin 上设置 Jira 集成

要与 Jira 集成,您需要创建一个专用的机器人用户(例如,devin-bot@…)账号,并在 Devin → Team ▸ Integrations ▸ Jira 下关联这些凭据。

随后,您可以使用个人账号创建新工单并添加 devin 标签。

Devin 会发布一条包含计划纲要的分析评论,并提示“开始会话?”。输入“yes”允许其编写代码,或移除该标签以将工单保留为仅由人工处理。

注意:Devin 不会自动在看板上移动卡片。您或您的 PM 仍需将其拖动到 In Progress 或 Done。这样可将工作流控制权保留在人类手中。

让 Devin 从 Jira 工单开展工作

当 Slack 和 Jira 接好线后,我尝试了一次真正的“把代理当队友”实验,把真实工单抛给 Devin,看看它是否能在无需手把手引导的情况下完成实现。

我使用的工作流

我的流程如下:

  1. 在我新建的 JIRA 项目中创建工单,并写清验收标准。
  2. 添加 devin 标签,这是提示 Devin 进行分析的信号。
  3. Devin 会评论一个分步计划、信心评估,并询问“开始会话?”

devin task

  1. 我回复“Yes”。工单显示“会话已开始”,并给出 Web IDE 链接。当 PR 合并时,Devin 会将“Merged ✅”发布回 Slack,然后我在看板上移动卡片。在我回答“Yes”之前,这些都不消耗 ACU。

五个真实工单,五种迥异结果

以下是五个真实工单的简要情况:

工单

计划工作

ACU

Devin 实际表现

迁移 SQLite → Postgres

更换数据库引擎,运行迁移

0.6

无懈可击。一次提交,测试保持通过。

改进 Sandpack UI 并修复失败的测试

UI 微调 + 测试稳定性

5.0(两次会话)

执意切回SQLite,漏掉迁移脚本,烧掉 ACU。最后我把 UI 与测试拆成两个提示,才在上限内完成。

在列表中显示完成勾选

在练习列表中添加 ✓ 徽章

0.8

一击成功;甚至加了乐观 UI。

验证发现系统

端到端检查每个文件都被解析

2.6

后端检查通过,但前端错误仍在。需要两次轻推。

移除废弃的成就代码

删除功能开关与陈旧组件

0.4

Devin 警告“低置信度”,然后精确移除了 30 个文件,并更新了 import,毫无差错。

看起来有些随机的点

以下方面还有待改进:

  • PR 标题:我在每个提示中都指定了命名模式,但 Devin 每次都会发明一种新格式。
  • 数据库忠诚度:在一个工单中它迁移到了 Postgres,而在另一个工单中又默默地重新引入了 SQLite。
  • ACU 估算:分析评论称 sandpack 工单需 1.5 ACU,实际上是两次会话、5 ACU。
  • 信心与执行:一个低置信度的工单 3 分钟完美执行;一个高置信度的工单折腾了 45 分钟。

Devin 在 Jira 上的表现颇有前景:两个工单完美收尾,一个稍加引导即可,最糟也只是耗时而非回滚。但一致性仍不足,因此紧凑的范围界定与明确的约束会很有帮助。

用 Jest 与 Playwright 添加自动化测试

在聊天与工单流转畅通后,下一步是确保坏代码无法混入。我让 Devin 做两件事:后端单元测试,以及模拟学习者在浏览器中编辑练习的 Playwright 端到端测试。

后端单元测试:出乎意料的顺利

我让 Devin 为 GraphQL resolver、服务层和 Prisma 模型编写 Jest 测试套件。当我询问 ACU 估算时,它回复了 20 ACU!!

我觉得这肯定是个错误,还是启动了任务。结果只花了 1.1 ACU,而且是迄今执行得最好的一项任务。

Playwright e2e:红墙、绿墙

这项稍贵一些,花了 2.3 ACU。

录制的流程:打开 /learn/option-01 → 编辑代码 → 等待 ✓ → 刷新页面 → ✓ 仍然存在。

首次运行约 70% 的断言失败。出现了许多尺寸变更的毛刺、仪表盘计数滞后,甚至“快乐路径”也会抖动失败。

尽管我在提示中写了“忽略失败测试,稍后再修”,Devin 还是不断改动代码,直到套件大多变绿(有用,但不是我要求的)。

系统里仍有一些 Bug,所以仍有测试失败。但这没关系,我们之后会把这些问题理顺,让所有测试都变绿。

添加一键 GitHub Actions 流水线

在单元与端到端测试就位后,最后一步是确保每个 Pull Request 都会自动运行这些检查。我让 Devin 提供一个极简工作流,不要制品、不要覆盖率闸口,只要 lint → 类型检查 → 测试。

Devin 一次性交付了一个令人惊喜的精致流水线,无需任何后续提醒:

  • 零配置漂移:Devin 复用了已有 npm 脚本,无需学习新工具。
  • 全面并行:Lint、类型检查与两套测试并行运行,整个工作流在 GitHub 的免费 runner 上约 4 分钟内完成。
  • 清晰分诊:即便 ESLint 失败而测试通过,汇总作业仍会报告 lint 错误;您不会合并“部分为红”的代码。

Devin 推送了工作流,等待 GitHub 中的检查完成,确认无误后才宣布完成。不得不说,0.4 ACU 就得到一个完整可用的流水线,很难超越。YAML 显然是 Devin 的舒适区。

合并该工作流后,每个 PR 都必须通过 lint、编译以及两套测试,大家才能按下绿色按钮!

Devin 的内置 Wiki

Devin 自带一个可与您的代码并存的“Wiki”。它是一套轻量的、自动生成的知识库,代理在工作时既可读取也可写入。连接了 Slack、Jira 和 CI 之后,这个 Wiki 很适合放置架构笔记。值得一看!

devin wiki

据我所知,这不是手动可编辑的,您需要依赖 Devin 来保持 Wiki 更新。

成本与时间快照及思考

当所有集成、测试与流水线上线后,我统计了费用与用时:

工作模块

ACU

动手时间

备注

Slack 与 Jira 接入

0.0

10 分钟

手动 OAuth 点击;无代理用时。

5 个 Jira 工单

9.4

2 小时推动与评审

两个工单尚可,一个需要推动、重试与测试,一个卡在 SQLite 切换。

Jest 单元套件(API)

1.1

5 分钟评审

Devin 的“20 ACU”惊吓变成了 1 ACU 的精品。

Playwright e2e 套件(web)

2.3

10 分钟评审

Devin 无视“不要修代码”,一路修到只剩 3 个测试为红。

GitHub Actions 流水线

0.4

3 分钟微调

一页 YAML;首试即绿。

合计

13.2 ACU

≈ 2 小时 30 分钟

≈ $30(Core 价位)。

也就是说,大约 2 小时的人力投入,就把工单、测试与 CI 推了上去。比我自己做肯定更快。

不过此时我有些矛盾。系统仍有不少 Bug,如果整个代码库都是我写的,我也许能比 Devin 烧积分更快地修好问题。

但大部分应用是 Devin 写的,所以这个代理其实“比我更熟”结构。尽管如此,它依然难以把硬编码替换成动态值,每个文件里都会留下一些尾巴,而且需要我坐在电脑前看护它的所有动作。

我也觉得这个过程有点令人沮丧,但与我抓不到 Bug 时的沮丧不一样。就我个人而言,“为代码不工作而沮丧”与“为一个 AI 代理连基本指令都跟不住而沮丧”是截然不同的后者真让人抓狂。

我认为用得好时 Devin 非常有帮助,但和所有 AI 代理一样,它不能取代软件工程师。用于某些任务可以,但不适合、也难以可持续地用于每一张工单。

下一步是什么?

我们已接入 Slack 与 Jira,测试转绿,CI 闸口也会拦下每个草率的 PR。但要真正上线生产,我们还缺四大支柱:

  1. 认证:串起 NextAuth 凭据 → JWT Cookie → NestJS 中的 GqlAuthGuard,让进度与真实用户绑定。
  2. 安全加固:在 Web 与 API 运行时接入 Sentry 错误跟踪。
  3. 持续部署:为 Vercel(Web)配置流水线,在每个分支上生成预览 URL,并在主分支变绿时提升到 prod。

这就是第 4 部分的议程,也是最后的冲刺——看看 Devin 能否在几乎无需人工介入的情况下为应用提供安全、部署与看护。请再次把数据库固定到 Postgres、限制好 ACU,用最后一章见。

如果您已准备继续,请点击下方最后一项进入第四篇教程:

  1. 环境搭建与首个 Pull Request(第 1 部分)
  2. 用 Devin 交付一条垂直功能线(第 2 部分)
  3. 集成、测试与 CI/CD(第 3 部分)
  4. 安全、防护、部署与运维(第 4 部分)

Marie Fayard's photo
Author
Marie Fayard

我是一名具有产品思维的技术负责人,专注于帮助早期初创公司从首个原型成长到实现产品与市场匹配,并持续向前发展。我对人们如何使用技术充满好奇,热爱与创始人及跨职能团队紧密合作,将大胆的想法变为现实。不在打造产品的时候,我会在世界的新角落寻找灵感,或在瑜伽馆放松减压。

主题
AI 代理
人工智能

用以下课程构建 AI 代理:

课程

AI 智能体入门

1 小时 30 分钟
146.4K
了解 AI 智能体的基础、组成部分及实际应用——无需编程。
查看详情开始课程

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续
继续操作即表示您接受我们的《使用条款》和《隐私政策》,并同意您的数据存储在美国。
查看更多