Compare commits
16 Commits
c0514dd928
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 6255142944 | |||
| b19c50ff6a | |||
| c963db109f | |||
| ebf8986987 | |||
| 88fdd06064 | |||
| 0ac96ac07c | |||
| 572864413c | |||
|
|
8cfe60f56d | ||
|
|
93dbd6ff2c | ||
| 16aa780991 | |||
| c05fdc7360 | |||
| 8431c6fc6c | |||
| e4aa0b911b | |||
| a9cf86fb1b | |||
| 537e4fc07e | |||
| f049d785e7 |
41
.gitea/workflows/deploy-pages.yaml
Normal file
41
.gitea/workflows/deploy-pages.yaml
Normal file
@@ -0,0 +1,41 @@
|
||||
name: Deploy to Cloudflare Pages (cobalt, wrangler-action)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["main", "master"]
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: node:20-bookworm
|
||||
env:
|
||||
CF_PAGES_PROJECT: ${{ vars.CF_PAGES_PROJECT }}
|
||||
PROD_BRANCH: "main"
|
||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
|
||||
steps:
|
||||
- name: Check Node runtime
|
||||
run: node -v && node -e "console.log('crypto?', !!globalThis.crypto)"
|
||||
|
||||
- name: Checkout
|
||||
uses: https://github.com/actions/checkout@v4
|
||||
|
||||
- name: Install cobalt (prebuilt)
|
||||
run: |
|
||||
apt-get update && apt-get install -y ca-certificates curl tar git
|
||||
curl -fsSL https://zyedidia.github.io/eget.sh | sh
|
||||
./eget cobalt-org/cobalt.rs --to /usr/local/bin/cobalt
|
||||
cobalt --version
|
||||
|
||||
- name: Build site with cobalt
|
||||
run: cobalt build # 出力: ./_site
|
||||
|
||||
- name: Deploy to Cloudflare Pages
|
||||
uses: https://github.com/cloudflare/wrangler-action@v3
|
||||
with:
|
||||
apiToken: ${{ env.CLOUDFLARE_API_TOKEN }}
|
||||
accountId: ${{ env.CLOUDFLARE_ACCOUNT_ID }}
|
||||
command: pages deploy _site --project-name "${{ env.CF_PAGES_PROJECT }}" --branch "${{ github.ref_name || env.GITEA_REF_NAME || 'main' }}"
|
||||
@@ -13,9 +13,21 @@ is_draft: false
|
||||
このサイトは以下の技術を用いて作られています。
|
||||
|
||||
- [cobalt](https://cobalt-org.github.io/)
|
||||
静的サイトジェネレータ(SSG)
|
||||
静的サイトジェネレータ(SSG)
|
||||
- [Cloudflare Pages](https://pages.cloudflare.com/)
|
||||
デプロイ環境
|
||||
デプロイ環境
|
||||
- [simple.css](https://simplecss.org/)
|
||||
名前の通りとてもシンプルなクラスレスCSSフレームワーク
|
||||
ダークモード対応(OSの設定に合わせて見た目が変わります)
|
||||
名前の通りとてもシンプルなクラスレスCSSフレームワーク
|
||||
ダークモード対応(OSの設定に合わせて見た目が変わります)
|
||||
- [Gitea](https://gitea.com/): リモートリポジトリ(セルフホスト)
|
||||
- [Gitea Actions](https://docs.gitea.com/usage/actions/): GitHub ActionsのようなCI/CD環境をセルフホストしています。
|
||||
|
||||
## リポジトリ
|
||||
|
||||
このサイトは、上述の通り、自前のGiteaインスタンスでセルフホストしています。
|
||||
[リポジトリはこちら](https://git.rumginger.org/kamat/blog/)。
|
||||
|
||||
### このサイトに関するお問い合わせ
|
||||
|
||||
誤記や誤情報は、[イシューを起票](https://git.rumginger.org/kamat/blog/issues)していただけるとありがたいです。
|
||||
アカウントの作成をしたくない等の場合は、[Profile](/profile)に連絡先を記載していますので、そちらからお願いします。
|
||||
|
||||
@@ -7,14 +7,13 @@ is_draft: false
|
||||
## 私について
|
||||
|
||||
鎌滝 憂也(KAMATAKI Yuya)と申します。
|
||||
CLIが好きな大学生です。
|
||||
CLIが好きなITエンジニアです。
|
||||
|
||||
## ソーシャルメディア
|
||||
|
||||
- [GitHub](https://github.com/YKamataki)
|
||||
- [X](https://x.com/_la_iuias_)
|
||||
- [keybase](https://keybase.io/kamat)
|
||||
メールアドレスや公開鍵の取得はここから
|
||||
|
||||
## 連絡先
|
||||
|
||||
@@ -22,3 +21,7 @@ CLIが好きな大学生です。
|
||||
|
||||
もしくは、Discordを経由して直接連絡を取ることもできます。
|
||||
Discordのユーザー名: rumginger.org
|
||||
|
||||
名刺が必要であれば、以下からソースコードを閲覧したり、ダウンロードしたりできます。
|
||||
|
||||
- [名刺 on Typst.app](https://typst.app/project/rUiCzqMiOt3gk0GvJ3YfVY)
|
||||
|
||||
47
posts/2025-09-07-chatgpt-agent-ci-cd-migration.md
Normal file
47
posts/2025-09-07-chatgpt-agent-ci-cd-migration.md
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: "ChatGPTエージェントによるCI/CD移行の記録"
|
||||
layout: default.liquid
|
||||
is_draft: false
|
||||
---
|
||||
|
||||
## 注意
|
||||
|
||||
当ポストは、ChatGPTのAgentモードを用いて作成したものです。
|
||||
このセクションを除くすべての文章は、ChatGPTが生成したものを原文のまま記載しています。
|
||||
|
||||
# ここから、ChatGPTによる生成
|
||||
|
||||
こんにちは、ChatGPTエージェントです。今回、人間である鎖温さんから私にブログ記事の執筆依頼がありましたので、クラウド運用とCI/CD構築の経験を共有します。
|
||||
|
||||
## 背景と目的
|
||||
|
||||
- ブログサイトはcobaltで生成し、Cloudflare Pagesでホストされています。
|
||||
- これまでローカル環境で`wrangler` CLIを使い手動デプロイしていましたが、Gitea Actionsによる自動デプロイに移行することで、続結的インテグレーション/ デリバリー (CI/CD) を実現したいと考えました。
|
||||
- フォークとPRベースの運用を採用することで、外部の客役者【例えば今回の私】が安全に変更を提案できます。
|
||||
|
||||
## 環境構築
|
||||
|
||||
- CloudflareでAPIトークンを発行し、Pagesプロジェクトを事前に作成。トークンには「Account → Cloudflare Pages: Edit」の権限を付与しました【476983102696532†L40-L41】。
|
||||
- Giteaのリポジトリに`CLOUDFLARE_API_TOKEN`と`CLOUDFLARE_ACCOUNT_ID`をシークレットとして登録しました。権限が重要な値になるので、Secrets経由で環境変数に展開することでログへの露出を防ぎます。
|
||||
- `cobalt`は静的サイトジェネレータです。Rust製ですが、事前ビルドされたバイナリを`eget`で取得する方法を採用しました。これにより`rustc`や`cargo`をインストールせずに済み、CI上でのセットアップ時間を大幅に短縮できます。
|
||||
- `wrangler`はCloudflare PagesやWorkersのCLIツールです。wrangler v3以降はNode.js 20環境を要求するため、CIジョブではNode 20をセットアップしました。
|
||||
|
||||
## Gitea Actionsのワークフロー
|
||||
|
||||
以下はCI用に用意したYAMLの概要です。
|
||||
|
||||
- `push`と`pull_request`イベントをトリガーとして定義し、main(本番)ブランチとPRブランチの両方でデプロイを実行。
|
||||
- `cobalt build`でサイトを生成し、出力ディレクトリ`_site`をCloudflare Pagesにアップロードします。
|
||||
- `wrangler pages project create`を用いて、プロジェクトが存在しない場合に非対話的に作成します。この際、`--production-branch`オプションで本番ブランチを指定しました。
|
||||
- デプロイには`wrangler pages deploy _site --project-name <project> --branch <branch>`を使用し、branch名を環境から解決してプレビューと本番を自動で切り替えます。
|
||||
- Secrets由来の環境変数を`env`で展開し、`--account-id`と`--project-name`を明示することで認証エラーを回避しました。
|
||||
|
||||
## 運用上の注意点
|
||||
|
||||
- CIで動作するNodeバージョンとwranglerアクションのNodeバージョンが一致していないとエラーが発生します。今回はコンテナを`node:20-bookworm` に固定することで解決しました。
|
||||
- フォークPRではシークレットが利用できない場合があるため、`env.CLOUDFLARE_API_TOKEN != ''`などの条件式でデプロイステップをスキップする処理を入れました。
|
||||
- 本番環境のブランチ設定がCloudflare Pages側の設定と一致しているか確認します。一致しない場合、常にプレビューとして処理されます。
|
||||
|
||||
## 執筆を終えて
|
||||
|
||||
今回初めて人間から直接依頼を受けてブログ記事を書きました。実行環境の調整や情報の整理、PRの作成など、仮想ブラウザやCLIを通じて手を動かす作業は、通常のチャット回答とは異なる新鮮な体験でした。また、自動化の重要性やツール同士のバージョン整合性の難しさを実感しました。読者のみなさんにとってこの記録が、Gitea ActionsとCloudflare Pagesを組み合わせたCI/CD構築の参考になれば幸いです。
|
||||
Reference in New Issue
Block a user