From 62d8504d8fe774efc5557349fec9119395cf5069 Mon Sep 17 00:00:00 2001 From: ogt Date: Sun, 19 Apr 2026 11:21:53 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=96=B0=E5=A2=9E=20ADR-010=20Gitea=20?= =?UTF-8?q?CI/CD=20Pipeline=EF=BC=8C=E6=9B=B4=E6=96=B0=20CLAUDE.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ADR-010:記錄 ewoooc Gitea repo 建立、cd.yaml 設計、runner user-level 踩坑、rsync 缺失修復 - CLAUDE.md:新增 CI/CD 表格(repo URL、pipeline 模式、runner、Telegram 通知) - docs/adr/README.md:加入 ADR-010 索引 Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 16 ++++++- docs/adr/ADR-010-gitea-cicd-pipeline.md | 61 +++++++++++++++++++++++++ docs/adr/README.md | 1 + 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 docs/adr/ADR-010-gitea-cicd-pipeline.md diff --git a/CLAUDE.md b/CLAUDE.md index 937cb95..f3e0553 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -18,11 +18,25 @@ # 本地開發 source venv/bin/activate && python app.py -# 部署 → 188(via 110 跳板) +# 部署(標準)→ push 即自動部署(Gitea Actions) +git push origin main + +# 手動部署 → 188(via 110 跳板,緊急用) scp -o ProxyJump=wooo@192.168.0.110 ollama@192.168.0.188:/home/ollama/momo-pro/ ssh -J wooo@192.168.0.110 ollama@192.168.0.188 "docker restart momo-pro-system" ``` +## CI/CD +| 項目 | 說明 | +|------|------| +| Gitea Repo | `http://192.168.0.110:3001/wooo/ewoooc` (Public) | +| CD Pipeline | `.gitea/workflows/cd.yaml` | +| 部署模式 | sync(Python 變動 ~30s)/ rebuild(Dockerfile 變動) | +| 健康檢查 | `https://mo.wooo.work/health` | +| Runner | `wooo-runner`(user-level,服務所有 wooo/* repo) | +| 通知 | Telegram(部署開始/成功/失敗) | +| 參考 | ADR-010 | + ## 文檔索引 | 類型 | 路徑 | |------|------| diff --git a/docs/adr/ADR-010-gitea-cicd-pipeline.md b/docs/adr/ADR-010-gitea-cicd-pipeline.md new file mode 100644 index 0000000..0d6616d --- /dev/null +++ b/docs/adr/ADR-010-gitea-cicd-pipeline.md @@ -0,0 +1,61 @@ +# ADR-010: EwoooC Gitea CI/CD Pipeline 建立 + +- **Status**: Accepted +- **Date**: 2026-04-19 +- **Deciders**: 統帥 + +## Context + +EwoooC(MOMO Pro System)原本沒有自動化部署流程,每次改版都需要手動 scp + docker restart。其他產品線(AWOOOI 等)已跑在 Gitea Actions,統帥決定 EwoooC 也對齊相同模式。 + +## Decision + +在 Gitea 建立 `wooo/ewoooc` repo(Public),並在 `.gitea/workflows/cd.yaml` 實作完整 CD pipeline。 + +### Pipeline 架構 + +``` +push main → 偵測變更類型 → sync 或 rebuild → 健康檢查 → Telegram 通知 +``` + +| 模式 | 觸發條件 | 動作 | 耗時 | +|------|---------|------|------| +| `sync` | Python 檔案變動(最常見) | rsync → docker restart | ~30s | +| `rebuild` | Dockerfile / requirements.txt / docker-compose.yml 變動 | rsync + docker compose build + up -d | ~3-5min | + +### 關鍵設計 + +- `concurrency.cancel-in-progress: true` — 新 push 取消舊排隊 job +- `fetch-depth: 2` — 支援 `git diff HEAD~1 HEAD` 偵測變更類型 +- `rsync --exclude` — 排除 data/, logs/, .env, *.db 等敏感/大型檔案 +- 健康檢查:`https://mo.wooo.work/health`,最多重試 5 次 × 10s +- Telegram HTML 格式通知(部署開始 / 成功 / 失敗) + +### Runner 設定(踩坑紀錄) + +原 `gitea-runner` 容器的 `GITEA_RUNNER_REGISTRATION_TOKEN` 是 AWOOOI repo-level token,每次重啟都重新用那個 token 註冊,導致 ewoooc pipeline 一直在 `queued`。 + +**修復方式**:重建容器,改用 user-level token(`/api/v1/user/actions/runners/registration-token`),runner 即可服務 `wooo/*` 所有 repo。 + +### CI Image 缺少 rsync + +`192.168.0.110:5000/awoooi/ci-runner:act-22.04` 未預裝 rsync,需在 workflow 加裝: + +```yaml +- name: 安裝 rsync / ssh + run: apt-get update -qq && apt-get install -y -qq rsync openssh-client +``` + +## Alternatives Considered + +- **繼續手動部署**:不可擴展,容易遺漏步驟 +- **GitHub Actions(公有雲)**:內網 188 無法直接被 GitHub runner 存取 +- **Drone CI / Jenkins**:已有 Gitea Actions,引入新工具增加維運複雜度 + +## Consequences + +- ✅ push main 後自動部署,~30s 可驗(sync 模式) +- ✅ Telegram 即時通知部署狀態 +- ✅ Runner 現在 user-level,所有 `wooo/*` repo 共用 +- ⚠️ capacity=2(已在 config.yaml 設定),可並發 AWOOOI + EwoooC 各一個 job +- ⚠️ CI image 若需其他工具,需更新 apt-get install 清單或重建 image diff --git a/docs/adr/README.md b/docs/adr/README.md index 2701c0c..a53a6e5 100644 --- a/docs/adr/README.md +++ b/docs/adr/README.md @@ -31,6 +31,7 @@ | [007](ADR-007-ai-learning-dual-write.md) | AI 學習雙寫規範(DB + KM 同步寫入) | Accepted | 2026-04-18 | | [008](ADR-008-actual-runtime-on-188.md) | 正式運行環境確認 — 188 Docker Compose(非 110 K3s) | Accepted | 2026-04-18 | | [009](ADR-009-embedding-retry-queue-persistence.md) | Embedding Retry Queue 持久化(DB-backed) | Accepted | 2026-04-19 | +| [010](ADR-010-gitea-cicd-pipeline.md) | EwoooC Gitea CI/CD Pipeline(Gitea Actions + Docker Compose) | Accepted | 2026-04-19 | ## 規範