在Cloudflare平台上为数百万仓库运行CI/CD

💡 原文英文,约2900词,阅读约需11分钟。
📝

内容提要

Cloudflare推出基于Workflows的CI/CD方案,用TypeScript替代YAML定义流水线,支持在隔离沙箱中运行构建、测试等步骤,并缓存依赖加速。通过事件触发自动启动CI任务,还支持AI代理自愈修复失败步骤。该方案简化了平台管理大量代码仓库的CI/CD流程,提供可观测性和弹性重试。

🔎

延伸解读

为什么用TypeScript替代YAML?

文章指出,传统的CI/CD流水线常用YAML定义,但YAML容易变得复杂,导致“YAML疲劳”。Cloudflare的方案允许用TypeScript编写流水线,利用代码的灵活性和可配置性,使流水线更易于定制和维护。这反映了开发者对更强大、更灵活的配置方式的需求。

平台与客户CI的共存模式

文章强调,平台可以为自己的代码和客户的代码定义不同的CI流水线,并且平台管理的CI和客户自定义的CI可以同时运行在同一个命名空间中。这种设计允许平台统一管理构建过程,同时为需要自定义的客户提供灵活性,避免了“一刀切”的局限。

自愈CI的实用价值

文章介绍了通过AI代理实现CI自愈的示例:当构建步骤失败时,代理可以自动修复并推送提交供审批。这减少了开发者手动监控和修复CI的负担,将CI运行完全托管在云端。但文章也指出,自愈功能需要额外的配置,如Durable Object绑定和模型选择,并非默认启用。

Q&A

Cloudflare 的 CI/CD 方案与传统的 YAML 配置相比有什么优势?

Cloudflare 的 CI/CD 方案允许使用 TypeScript 定义流水线,而不是 YAML。这提供了更大的定制性和可配置性,避免了 YAML 的复杂性。

如何在 Cloudflare 上触发 CI 任务?

可以通过在 wrangler 配置文件中添加 events 字段,监听 Artifacts 的推送事件(如 cf.artifacts.repo.pushed),当事件发生时自动触发 Workflow 实例,即 CI 任务。

Cloudflare 的 CI 方案如何实现依赖缓存?

在 CI 的 install 步骤中,可以指定缓存输入(如 package.json 和 bun.lock),通过沙箱快照将依赖缓存到 R2 存储桶中,后续步骤可以复用,避免重复安装,从而加速 CI 流程。

Cloudflare 的 CI 方案如何实现自愈功能?

通过集成 AI 代理(如 Think 代理),在 CI 步骤失败时,代理可以自动分析错误并推送修复提交。开发者只需合并修复分支即可,无需手动干预。

在 Cloudflare 上运行 CI 可以获得哪些可观测性?

每个 CI 运行都会作为 Workflow 实例显示在 Workflows 仪表板中,可以查看每个步骤的输入、输出、墙钟时间和 CPU 时间,并通过图表可视化并发和顺序步骤。还可以通过 Workers Observability 和 GraphQL 查询日志。

Cloudflare 的 CI 方案如何处理步骤失败和重试?

Workflows 提供弹性重试机制,如果某个步骤失败,会自动重试并保留状态,不会丢失进度。每个步骤可以自定义重试和超时行为,并且可以从特定步骤重新开始,无需重跑整个流水线。

Cloudflare 的 CI 方案如何支持平台管理多个仓库的 CI/CD?

平台可以编写一次 CI/CD 流水线,通过事件过滤器(如指定命名空间)应用到所有仓库,或者为不同客户定制不同的流水线。平台管理的 CI 和客户自定义的 CI 可以同时运行在同一命名空间中。

Cloudflare 的 CI 方案未来计划支持哪些功能?

未来计划包括:直接集成 Workers 和 Workers for Platforms,提供 build.preview() 和 build.deploy() 原语;支持渐进式部署(百分比滚动);简化 monorepo 的多 Worker 部署;以及支持来自不同版本控制系统的触发事件。

🏷️

标签

➡️

继续阅读