GitHub Actionsを使ってCloudflare Pagesにブログを自動デプロイする
概要
前の投稿でHugoで作成したブログをCloudflare Pagesにデプロイしました。
そのときはGitHubのリポジトリにCloudflare Pages GitHub Actionのアプリをインストールすることで自動デプロイを実現しました。
今回は自動デプロイにCloudflare Pages GitHub Actionを使わず、GitHub Actionsを使用してみます。 おまけにプルリクエストを作成して構築されたプレビュー環境に誰でもアクセスできてしまう問題があるので、自分のみアクセスできるようにします。
目的
この記事では以下の設定をします。
- プレビュー環境へのアクセスを自分のみに設定する
- Cloudflare Pagesが実行する本番環境への自動デプロイを止め、GitHub Actionsにデプロイさせる
ダイレクトアップロード用のプロジェクトを新規作成する
今回はtestというプロジェクト名で作成します。
アップロードするファイルは以下のコマンドで生成します。Hugoを使っているなら、おそらくローカル環境に/public
ディレクトリが作成されると思います。
publicができたなら、そのディレクトリをドラッグアンドドロップでアップロードします。
サイトをデプロイ
ボタンを押すとデプロイが完了します。
GitHub Actionsを設定する
やることは以下のステップです。
- CloudflareからAPIトークンを作成する
- GitHub Actionsにシークレットを設定する
- GitHub Actionsに変数を設定する
さっそくやっていきましょう
CloudflareのAPIトークンを発行する
Cloudflare dashboardのページに行きAPI Tokenを発行します。
トークンを作成する
ボタンを押します。
カスタムトークンを選択します。
トークン名は任意なので、好きに決めます。
アクセス許可は以下を選択します。
アカウント | Cloudflare Pages | 編集 |
---|
GitHub Actionsにシークレットを設定する
ブログを置いているGitHubのリポジトリに行きます。
Settings > Secrets and variables > Actions
からNew repository secret
を選択します。
シークレット名は CLOUDFLARE_API_TOKEN
にして、シークレットはCloudflareで作成したAPIトークンをセットします。
変数 | 値 |
---|---|
CLOUDFLARE_API_TOKEN | Cloudflareで発行したAPIトークン |
アカウントIDを調べる
Cloudflare PagesのURLから確認できます。https://dash.cloudflare.com/<アカウントID>
ドメインを登録している場合、CloudflareのWebサイトからでも確認できます。
右下にアカウントIDがあるので、それをコピーします。
プロジェクト名を調べる
プロジェクト名はCloudflare Pagesの画面から探せます。今回はtest
です。
GtiHub Actionsに変数を設定する
先ほど調べたアカウントIDとプロジェクト名、Deploy on Cloudflare Pages - HBS Docsを見ながら変数をセットします。
変数 | 値 |
---|---|
ACCOUNT_ID | 先ほど調べた値 |
PROJECT_NAME | test |
ASSET_DIRECTORY | ./public |
HUGO_VERSION | 0.110.0 |
NODE_VERSION | 16 |
ブログを置いているGitHubのリポジトリに行きます。
Settings > Secrets and variables > Actions
からVariablesのタブをクリックし、New repository variable
を選択します。
workflowファイルを作成する
以下を参考にCloudflare PagesへデプロイするGitHub Actionsを定義します。
2023年2月現在最新はv1.3.0
です。
自分のリポジトリに.github/workflows/publish.yml
を作成し、以下のymlをコピペします。
これで、mainブランチにpushするとプロダクション環境に、ブランチにpushするとプレビュー環境にデプロイされます。:tada:
参考
- Create an API token - Cloudflare Docs
- Find zone and account IDs - Cloudflare Docs
- Generate an API Token - cloudflare/pages-action
- リポジトリに暗号化されたシークレットを作成する - GitHub Docs
- 変数 - GitHub Docs
- peaceiris/actions-hugo - GitHub
自分のみプレビュー環境へアクセスができるようにする
デフォルトの設定では、プレビュー環境はURLさえ知っていれば誰でもアクセスができます。
You can use Cloudflare Access to manage access to your deployment previews. By default, these deployment URLs are public. Enabling the access policy will restrict viewing project deployments to your Cloudflare account.
By default, preview deployments are enabled and available publicly
Customizing preview deployments access - Cloudflare Docs
設定自体は簡単で、以下の画像赤枠部分に有効にするボタンがあるので、そこをクリックするだけです。
実際にプレビュー環境にアクセスしにいくと、以下の画像のようにメールアドレスとコードの入力を求められます。
まとめ
プレビュー環境へのアクセスを自分のみに設定し、Cloudflare Pagesにダイレクトアップロード用で作成したプロジェクトに対してGitHub Actionsで自動デプロイすることができました。
前の投稿とのまとめになりますが、検証した結果をまとめると以下になります。
Cloudflare Pagesのプロジェクトの作成方法 | GitHub Actionsを設定 | ビルドする場所 |
---|---|---|
Gitに接続 | x | Cloudflare Pages |
ダイレクトアップデート | ○ | GitHub Actions |
こちらの記事ではwranglerでプロジェクトを作成してからGitHub Actionsでデプロイを実現しています。
Cloudflare PagesにGitに接続
でプロジェクトを作成すると、自動デプロイの仕組みまで簡単に設定できるので工数は少ないメリットがあります。
しかし、GitHub Actionsは他にもワークフロー内に処理を入れられるので、柔軟さではダイレクトアップデート
、wrangler
でプロジェクトを作成する方に軍配が上がります。
記事はこれで以上です。みなさんがCloudflare Pagesにサイトをデプロイするときの参考になれば幸いです。
参考まとめ
- Cloudflare Pages GitHub Action - github marketplace
- cloudflare/pages-action - github
- Create an API token - Cloudflare Docs
- Find zone and account IDs - Cloudflare Docs
- Generate an API Token - cloudflare/pages-action
- リポジトリに暗号化されたシークレットを作成する - GitHub Docs
- 変数 - GitHub Docs
- Customizing preview deployments access - Cloudflare Docs