跳转到内容

持续集成(CI)

把部署搬进 CI 之后,本地就不再需要任何 Cloudflare 凭据,wrangler login 那套 OAuth 流程也彻底不用了——这是它最大的价值:CI 用的是一份权限可控、可随时吊销的 API Token,而本地那次 OAuth 授权会一直绑在你的开发机上。

  • .github/workflows/deploy.yml — 部署流水线,只有这一个文件要新增
  • 文件夹src/ — 应用代码
  • wrangler.jsonc — Worker 配置,要提交进仓库
  • .dev.vars — 本地密钥,被 gitignore,CI 用不上它
  • package.json / lockfile — 决定 CI 里装什么

在 Cloudflare 控制台的个人 API Token 页面,用 Edit Cloudflare Workers 模板建 token。它给到的权限范围是 Worker 脚本、KV、路由的写权限,够用且不含账单和域名管理。

仓库 Settings → Secrets and variables → Actions,加两个:

Secret 内容
CLOUDFLARE_API_TOKEN 上一步建的 token
CLOUDFLARE_ACCOUNT_ID 账号 ID,控制台右侧可查
.github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: npm
- run: npm ci
- name: Build
run: npx astro build
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: deploy

env.MY_SECRET 这种值不要写进 wrangler.jsonc(那文件是公开的)。两种正确做法:

终端窗口
# 一次性:直接推到平台
npx wrangler secret put MY_SECRET
.github/workflows/deploy.yml
# 或者在 CI 里从 Actions secret 注入
- name: Sync secrets
run: echo "$MY_SECRET" | npx wrangler secret put MY_SECRET
env:
MY_SECRET: ${{ secrets.MY_SECRET }}

给 PR 单独部署一份,比共用测试环境省事。两种路子:

终端窗口
# 1. 临时预览账号,不需要任何凭据,产物会被回收
npx wrangler deploy --temporary
# 2. Worker Versions 的 preview URL,在你账号里但带随机子域
npx wrangler versions upload

配置项全在 wrangler.jsonc 参考里,命令清单见命令参考