- 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 <noreply@anthropic.com>
2.4 KiB
2.4 KiB
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 取消舊排隊 jobfetch-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 加裝:
- 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