🌟
Github ActionsでCloudflare WorkersのCIを回してデプロイする
はじめに
mainブランチにpushしたらCloudflare Workersに自動デプロイする備忘録

これを目指す
手順
1. APIを取得
-
「API Tokens」セクションに移動
-
「トークンを作成する」をクリックして、新しいAPIトークンを作成

-
「Cloudflare Workers を編集する」テンプレートを選択
-
「アカウントリリース」と「ゾーンリリース」を設定する
- アカウントリリース: どのアカウントに権限を与えるか
- ゾーンリリース: どのドメインに権限を与えるか
-
作成したトークンは再表示されないので控える
2. CloudflareアカウントIDを控える

3. Actionsの設定
-
レポジトリ>Settings>Secrets and variables>Actionsに移動

-
シークレット値を追加
-
CLOUDFLARE_API_TOKEN: APIトークン -
CLOUDFLARE_ACCOUNT_ID: アカウントID
-
workflowsの設定
-
deploy.ymlを作成
mkdir -p .github/workflows
touch .github/workflows/deploy.yml
-
deploy.ymlに以下を記述
deploy.yml
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
name: Deploy
steps:
- uses: actions/checkout@v4
- name: Set up Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: "latest"
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
モノレポの場合、matrixを使って各プロジェクトごとにCIを回すこともできる
deploy.yml
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
name: Deploy ${{ matrix.project }}
runs-on: ubuntu-latest
strategy:
matrix:
project: [backend, frontend]
include:
- project: backend
workdir: packages/backend
- project: frontend
workdir: packages/frontend
steps:
- uses: actions/checkout@v4
- name: Set up Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: "latest"
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Restore Next.js cache
if: matrix.project == 'frontend'
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/${{ matrix.workdir }}/.next/cache
key: ${{ runner.os }}-next-cache-${{ matrix.project }}-${{ hashFiles('bun.lock') }}
restore-keys: |
${{ runner.os }}-next-cache-${{ matrix.project }}-
${{ runner.os }}-next-cache-
- name: Deploy backend with Wrangler
if: matrix.project == 'backend'
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: deploy --minify
workingDirectory: ${{ matrix.workdir }}
- name: Build frontend bundle with OpenNext
if: matrix.project == 'frontend'
working-directory: ${{ matrix.workdir }}
env:
NEXT_TELEMETRY_DISABLED: "1"
run: bun run cf:build
- name: Deploy frontend with OpenNext CLI
if: matrix.project == 'frontend'
working-directory: ${{ matrix.workdir }}
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
NEXT_TELEMETRY_DISABLED: "1"
run: bun run deploy
- name: Show recent Cloudflare deployments
if: matrix.project == 'frontend'
working-directory: ${{ matrix.workdir }}
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
run: npx wrangler deployments list --config wrangler.jsonc
Discussion