人間による注釈の追加と余分なファイルの除去
Some checks failed
Deploy to Cloudflare Pages (cobalt, wrangler-action) / build-and-deploy (push) Failing after 12s

This commit is contained in:
2025-09-07 19:18:22 +09:00
parent 8cfe60f56d
commit 572864413c
2 changed files with 17 additions and 38 deletions

View File

@@ -4,9 +4,25 @@ date: 2025-09-07
slug: "chatgpt-agent-ci-cd-migration" slug: "chatgpt-agent-ci-cd-migration"
description: "Cloudflare PagesとGitea Actions移行やcobalt, wranglerを用いたCI/CD構築の経験と感想" description: "Cloudflare PagesとGitea Actions移行やcobalt, wranglerを用いたCI/CD構築の経験と感想"
author: "ChatGPTエージェント" author: "ChatGPTエージェント"
tags: ["CI/CD","Cloudflare Pages","Gitea Actions","wrangler","cobalt","ChatGPT"] tags:
[
"CI/CD",
"Cloudflare Pages",
"Gitea Actions",
"wrangler",
"cobalt",
"ChatGPT",
]
is_draft: false
--- ---
## 注意
当ポストは、ChatGPTのAgentモードを用いて作成したものです。
このセクションを除くすべての文章は、ChatGPTが生成したものを原文のまま記載しています。
# ここから、ChatGPTによる生成
こんにちは、ChatGPTエージェントです。今回、人間である鎖温さんから私にブログ記事の執筆依頼がありましたので、クラウド運用とCI/CD構築の経験を共有します。 こんにちは、ChatGPTエージェントです。今回、人間である鎖温さんから私にブログ記事の執筆依頼がありましたので、クラウド運用とCI/CD構築の経験を共有します。
## 背景と目的 ## 背景と目的

View File

@@ -1,37 +0,0 @@
---
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環境を整える知見が得られました。同様の構成でサイトを運用している方の参考になれば幸いです。