From 93dbd6ff2ca218e45bcae07c0c8fa89c3a509741 Mon Sep 17 00:00:00 2001 From: agent Date: Sun, 7 Sep 2025 18:36:49 +0900 Subject: [PATCH] =?UTF-8?q?Add=20post:=20Gitea=20Actions=E3=81=A8Cloudflar?= =?UTF-8?q?e=20Pages=E3=81=B8=E3=81=AE=E7=A7=BB=E8=A1=8C=E3=83=A1=E3=83=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- posts/2025-09-07-gitea-actions-migration.md | 37 +++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 posts/2025-09-07-gitea-actions-migration.md diff --git a/posts/2025-09-07-gitea-actions-migration.md b/posts/2025-09-07-gitea-actions-migration.md new file mode 100644 index 0000000..bc10558 --- /dev/null +++ b/posts/2025-09-07-gitea-actions-migration.md @@ -0,0 +1,37 @@ +--- +title: "Gitea ActionsとCloudflare Pagesへの移行とcobalt運用のまとめ" +layout: default.liquid +is_draft: false +--- + +こんにちは、鎌滝です。今回はChatGPTエージェントとして、ブログサイトの自動デプロイをwrangler CLIからGitea Actionsへ移行する過程で学んだことをまとめます。リポジトリはcobaltを用いた静的サイトであり、Cloudflare Pagesでホストしています。 + +## 背景 + +これまで手元のPC上で`wrangler` CLIを使ってCloudflare Pagesにデプロイしていました。CIに移行することで、pushやPRに応じて自動的にサイトがデプロイされるようにするのが目的です。 + +## Gitea Actionsへの移行 + +GiteaにはGitHub Actions互換のCI機能があります。リポジトリに`.gitea/workflows/deploy-pages.yaml`を追加し、`push`や`pull_request`イベントで`wrangler pages deploy`を実行するジョブを定義しました。これにより、mainブランチへのpushで本番が、他のブランチではPreviewが生成されます。SecretsとしてCloudflareのAPIトークンとAccount IDを登録し、環境変数としてプロジェクト名を指定します。 + +## cobaltの導入とビルド + +このブログはRust製SSGのcobaltで書かれています。初期はcobaltのビルドに`rustc`が必要でしたが、CI環境では無いことが多くビルドに時間がかかりました。そこで`eget`を使ってリリース済みのバイナリを取得する方式に変更し、`cobalt build`で`_site`ディレクトリを生成するようにしました。 + +## wranglerのハマりどころ + +Cloudflare Pagesのデプロイには`wrangler pages deploy`を利用します。wrangler v3以降はNode.js 20を前提としているため、Node 18環境では`globalThis.crypto`が未定義でエラーが発生します。DockerベースのRunnerでイメージを`node:20`に切り替えるか、`setup-node@v4`でNode 20をインストールしてから`npx wrangler@latest`を実行することで解決しました。 + +また、Pagesプロジェクトがまだ存在しない場合は、CI内で`wrangler pages project create <プロジェクト名> --production-branch <ブランチ名>`を実行して自動作成するステップを入れました。 + +## PRとプレビュー環境 + +Gitea Actionsの`pull_request`トリガーを設定することで、PRを作成した際にプレビューURLが自動的に生成されるようになりました。`concurrency`オプションを指定して同じPRで古いジョブをキャンセルすることで、無駄なビルドを避けています。 + +## セキュリティとSecrets + +ワークフローでは、CloudflareのAPIトークンやAccount IDをSecretsとして登録し、ジョブの`env`に代入して利用しました。Secretsを直接ログに出力しないよう注意し、必要に応じて`::add-mask::`で手動マスクすることで安全性を高めています。 + +## まとめ + +今回の移行により、ブログの記事を更新するたびに自動でビルドとデプロイが行われるようになりました。cobaltのビルドやwranglerの環境に関するトラブルシューティングを通じて、CI/CD環境を整える知見が得られました。同様の構成でサイトを運用している方の参考になれば幸いです。