SuperAPI AI 工具集

cloudflare-workers-ci-cd

部署与运维

查看项目

更新于 10-15 12:33

技能介绍

用途

本项目是 Cloudflare Workers 的 CI/CD 自动化指南,用于通过 GitHub Actions 或 GitLab CI 对 Workers 进行自动化测试与部署。目标是让每次提交都运行测试、自动部署到预览/预发/生产环境、安全地管理密钥,并通过部署门禁实现安全发布。

2025 年更新

GitHub Actions 方面:新增 cloudflare/wrangler-action@v4,改进缓存、部署更快;改进对 vars 与 secrets 参数的密钥支持;新增内置预览环境清理;破坏性变更:apiToken 重命名为 api-token(kebab-case)。从 v3 迁移示例如下:

# ❌ OLD (v3)
- uses: cloudflare/wrangler-action@3
  with:
    apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}

# ✅ NEW (v4)
- uses: cloudflare/wrangler-action@v4
  with:
    api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }}

Wrangler 4.50.0 方面:新增 --dry-run 用于部署校验;通过并行上传加快部署;新增 --keep-vars 以保留环境变量。

快速开始(10 分钟)

  1. 创建 Cloudflare API Token,访问 https://dash.cloudflare.com/profile/api-tokens ,权限为 Account.Cloudflare Workers Scripts - Edit,若使用 Pages 还需 Account.Cloudflare Pages - Edit。
  2. 在 GitHub 仓库 Settings → Secrets → Actions 添加密钥,名称为 CLOUDFLARE_API_TOKEN。
  3. 创建 .github/workflows/deploy.yml,示例:
name: Deploy

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    name: Deploy to Cloudflare Workers

    steps:
      - uses: actions/checkout@v4

      - uses: oven-sh/setup-bun@v2
        with:
          bun-version: latest

      - run: bun install

      - run: bun test

      - name: Deploy
        uses: cloudflare/wrangler-action@v4
        with:
          api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          command: deploy
  1. 提交并推送后,在 GitHub Actions 标签页查看部署进度。

关键规则

不要在 Git 中提交密钥,应使用 GitHub Secrets;部署前始终运行测试;使用不同环境(如 main 分支部署 production,其他分支部署 staging);部署后校验成功(例如对 /health 发起 curl,失败则退出);为生产环境设置部署门禁(手动审批)。

核心概念

多环境策略推荐:production 对应 main 分支,staging 对应 Pull Request,preview 为每个 PR 生成唯一 URL。wrangler.jsonc 中可定义 env.production 与 env.staging,各自设置 name 与 vars(如 ENVIRONMENT)。

密钥管理分为三类:公共变量(wrangler.jsonc,非敏感配置)、密钥(wrangler secret,API key 与 token)、CI 变量(GitHub Secrets,部署凭证)。设置方式:

# Local development
wrangler secret put DATABASE_URL

# CI/CD (via GitHub Actions)
bunx wrangler secret put DATABASE_URL --env production <<< "${{ secrets.DATABASE_URL }}"

预览部署可通过如下方式为每个 PR 生成唯一地址(如 my-worker-preview-42.workers.dev):

- name: Deploy Preview
  uses: cloudflare/wrangler-action@v4
  with:
    api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
    command: deploy --env preview-${{ github.event.number }}

典型用例

包括:推送到 main 时部署生产;为 PR 部署预览并在 PR 中评论预览地址;每次提交运行测试并上传覆盖率到 Codecov;带审批门禁的生产部署;通过 workflow_dispatch 输入流量百分比的灰度(金丝雀)部署。

最佳实践

建议使用语义化提交信息(feat/fix/chore 等);运行 lint、类型检查与测试;缓存依赖(Bun 自动缓存);按分支部署到不同环境;监控部署并在失败时通知 Slack。不建议:跳过测试、未校验就部署、硬编码密钥、从功能分支部署生产、忽略部署失败。

常见错误与排查

文档列出七大错误:缺少或无效的 CLOUDFLARE_API_TOKEN;API token 权限不足;找不到 wrangler.toml(需确保仓库根目录存在 wrangler.jsonc);部署成功但 worker 不工作(缺少密钥或环境变量,需在 CI 中设置);本地测试通过但 CI 失败(环境差异,需锁定 Bun 版本并使用 --frozen-lockfile);预览部署冲突(在环境名中加入 PR 编号);日志泄露密钥(避免 echo 密钥)。

参考文件与模板加载时机

设置 GitHub Actions、配置矩阵构建、使用 GitHub environments 与部署保护、实现部署门禁时加载 references/github-actions.md;设置 GitLab CI 流水线、环境、密钥变量、review apps 时加载 references/gitlab-ci.md;实现蓝绿部署、金丝雀发布、流量拆分、回滚流程时加载 references/deployment-strategies.md;跨环境管理密钥、轮换 API token、使用外部密钥提供商(Vault、1Password)、实现最小权限时加载 references/secrets-management.md。可直接加载 templates/github-actions-full.yml、templates/gitlab-ci-full.yml、templates/preview-deployment.yml、templates/rollback-workflow.yml,以及 scripts/verify-deployment.sh 用于部署校验、健康检查与冒烟测试。

安装与供应链安全

安装 CI/CD 依赖时建议:阻止安装后脚本(npm config set ignore-scripts true,Bun 默认禁用);CI 中使用冻结锁文件(npm ci 或 bun install --frozen-lockfile);在 CI 中加入安全门禁(如 socket ci)阻断违反安全策略的 PR。需要完整安全配置(含 Socket CLI 集成、冷却设置、锁文件校验与 CI 强制执行)时,加载 dependency-upgrade 技能。

相关插件与说明

部署测试相关可加载 cloudflare-workers-testing(部署前测试 Workers)与 cloudflare-manager(通过 Cloudflare API 管理部署)。本技能聚焦于所有 Workers 部署的 CI/CD 自动化,不区分所使用的绑定类型。如需引导式部署,可使用 /workers-deploy 命令或加载 references/secrets-management.md。