CI 管道告别 YAML:Cloudflare 用 TypeScript 工作流,把 CI 变成 AI 自愈的持久化系统
当 CI 管道获得检查点、状态恢复和自愈代理,它就不再是一个脚本序列——而是一个有"记忆"的执行体。Cloudflare 新发布的 @cloudflare/ci 将 CI/CD 管道全面转向 TypeScript 工作流,并让 Moonshot 的 Kimi 编码模型在管道失败时自动提出补丁。
当 CI 管道获得检查点、状态恢复和自愈代理,它就不再是一个脚本序列——而是一个有"记忆"的执行体。Cloudflare 新发布的 @cloudflare/ci 将 CI/CD 管道全面转向 TypeScript 工作流,并让 Moonshot 的 Kimi 编码模型在管道失败时自动提出补丁。
Cloudflare 发布了一个 CI SDK(@cloudflare/ci),允许开发者用 TypeScript 而不是 YAML 定义持续集成管道。每一个步骤,都是一个持久化的 Cloudflare Workflow。
本质上,CI/CD 管道就是一种工作流。
这个包面向 Workers 运行时而非 Node.js,为 Wrangler 等支持 Workers 的打包工具提供 TypeScript 源代码。每个阶段对应一个工作流步骤,继承带检查点的执行机制:失败的步骤在保留状态的情况下重试,可以从该步骤重新开始,而不是重复整个管道。
声明式、线性执行。失败后通常从头重跑,依赖重复安装,无状态恢复,调试困难。
可编程、持久化执行。每步有检查点,失败保留状态重试,依赖快照缓存,可观测。
对比:YAML 擅长表达"是什么",TypeScript 擅长表达"怎么做"。工作流把 CI 从"配置"变成"程序"。
不是简单的 YAML 替换。这个 SDK 背后是三个在生产环境中至关重要的机制设计。
每个步骤独立启动、并发执行。开发人员把独立的检查封装在 Promise.all() 中,确保代码检查、测试、类型检查和构建在部署前全部完成。失败从断点继续,不重跑整个管道。
安装步骤的结果作为沙箱文件系统的快照存储在 R2 存储桶中,后续步骤直接复用,无需重新安装。这是平台级方案,而非简单的 CI 替代。
Wrangler 配置新增 events 字段,在 cf.artifacts.repo.pushed 事件发生时直接触发工作流,取代了之前的订阅、队列和消费者连接机制。
Runner 命令在可重试的工作流步骤中执行,任何有外部副作用的命令必须幂等,否则重试会导致副作用加倍。SDK 返回未经机密屏蔽的原始日志,需要团队自行处理。
阅读方式:四项机制分别对应状态恢复、依赖管理、触发链路和安全边界,共同构成可恢复执行的基础。
Cloudflare 将"自愈"功能作为一个单独的示例发布,而非 SDK 内置功能——这本身就是一种克制的设计哲学。它把整个管道封装在 try/catch 块中,当运行器失败时,调用一个应用程序拥有的智能代理。
这个代理在 Workers AI 上运行 Think 测试框架,利用 Moonshot 的 Kimi 编码模型提出补丁。
这套系统的最终形态,是一个完整可运行的管道——集成了工作流、沙箱、容器、持久化对象和 R2。命令在相互隔离的沙箱容器中运行,提供缓存所依赖的文件系统快照。
Cloudflare 并非首个将管道迁移到通用编程语言的公司。Dagger 提供了八种语言的 SDK,在任何兼容 OCI 的容器中运行管道,通过内容地址缓存操作。
Cloudflare 做出了相反的权衡。
它将执行绑定到工作流和沙箱中,以此换取状态可恢复。这种架构转变,是从可恢复执行转向了语法层面:工作流为每个步骤设置检查点,并从最后一个执行成功的步骤开始重放——管道在发生故障时继续运行,而非从头再来。
八种语言 SDK,OCI 容器运行,内容地址缓存。同一管道在笔记本和 CI 服务器都能跑。
绑定工作流与沙箱,换取状态可恢复。检查点 + 快照缓存 + 事件触发,深度集成平台能力。
取舍:声明式配置在检查、比较差异、策略管控上更便捷;通用语言带来表达力,但牺牲一定可读性。
CI 的"状态恢复"正在成为 AI 代理的"记忆机制"。
SDK 包 @cloudflare/ci 已发布,代码库遵循 Apache 2.0 许可,面向 Workers 运行时。可运行的管道已集成工作流、沙箱、容器、持久化对象与 R2。
npm 安装 @cloudflare/ci →