🌩️

Cloudflare Workers + Github ActionsでCI/CD

2024/10/15に公開

概要

個人的な備忘録も兼ねた、Cloudflare WorkersのアプリをGithub Actionsを使ってデプロイできるまでの記事になります。

準備

事前にCloudflareへデプロイできるようにAPI Tokenを取得します。

こちらのページへ移動し、「トークンを生成する」を選択します。

image1.png

次に「API トークン テンプレート」から「Cloudflare Workers を編集する」を選択します。

image2.png

「アカウントリソース」や「ゾーンリソース」を自身のアカウントに設定し「概要に進む」を選択

image3.png

内容が良ければ「トークンを作成する」を選択し、API Tokenを作成します。表示されたAPI Tokenを保管しておきます。

次にアカウントIDも用意しときます。アカウントIDは「Workers & Pages」>「概要」ページなどの右側にしれっと表示されています。

image4.png

取得したAPI TokenとAccount ID をデプロイ対象のGithubリポジトリの 「Actions secrets and variables」に登録します。

「Settings」>「Secrets and variables」>「Actions」を選択します。「New repository secret」を選択し CLOUDFLARE_API_TOKEN CLOUDFLARE_ACCOUNT_ID を登録します。

image5.png

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.tomlname--env で設定した環境名が付与された名前でデプロイされます。

例えば wrangler.toml の設定が

name = "my-worker"
compatibility_date = "2024-07-29"

--envstaging の場合、my-worker-stagingの名前でデプロイされます。

image6.png

Discussion