Cloudflare Workers + Github ActionsでCI/CD
概要
個人的な備忘録も兼ねた、Cloudflare WorkersのアプリをGithub Actionsを使ってデプロイできるまでの記事になります。
準備
事前にCloudflareへデプロイできるようにAPI Tokenを取得します。
こちらのページへ移動し、「トークンを生成する」を選択します。
次に「API トークン テンプレート」から「Cloudflare Workers を編集する」を選択します。
「アカウントリソース」や「ゾーンリソース」を自身のアカウントに設定し「概要に進む」を選択
内容が良ければ「トークンを作成する」を選択し、API Tokenを作成します。表示されたAPI Tokenを保管しておきます。
次にアカウントIDも用意しときます。アカウントIDは「Workers & Pages」>「概要」ページなどの右側にしれっと表示されています。
取得したAPI TokenとAccount ID をデプロイ対象のGithubリポジトリの 「Actions secrets and variables」に登録します。
「Settings」>「Secrets and variables」>「Actions」を選択します。「New repository secret」を選択し CLOUDFLARE_API_TOKEN
CLOUDFLARE_ACCOUNT_ID
を登録します。
Github Actions Workflow 作成
以下内容で .github/workflows/deploy.yml
を作成します。(名前は適宜変更して下さい)
name: Deploy
on:
push:
branches:
- develop
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}
cancel-in-progress: true
jobs:
deploy:
permissions:
contents: read
runs-on: ubuntu-latest
name: Deploy
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: 20.11
cache: "yarn"
- run: yarn install
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: deploy --env ${{ github.ref_name == 'main' && 'prod' || 'staging' }} --minify src/index.ts
env
の箇所も main
ブランチだと prod
、それ以外だと staging
にしているのですが、こちらも適宜変更してもらえればと思います。
何か変数またはシークレット値を渡したい場合は👇の様にすると渡すことができます。
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
secrets: |
SECRET1
SECRET2
command: deploy --env ${{ github.ref_name == 'main' && 'prod' || 'staging' }} --minify src/index.ts
env:
SECRET1: ${{ secrets.SECRET1 }}
SECRET2: ${{ secrets.SECRET2 }}
デプロイ結果
デプロイ名
デプロイ実施すると wrangler.toml
の name
と --env
で設定した環境名が付与された名前でデプロイされます。
例えば wrangler.toml
の設定が
name = "my-worker"
compatibility_date = "2024-07-29"
で --env
が staging
の場合、my-worker-stagingの名前でデプロイされます。
Discussion