Files
ewoooc/docs/adr/ADR-010-gitea-cicd-pipeline.md
ogt 62d8504d8f docs: 新增 ADR-010 Gitea CI/CD Pipeline,更新 CLAUDE.md
- 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>
2026-04-19 11:21:53 +08:00

2.4 KiB
Raw Blame History

ADR-010: EwoooC Gitea CI/CD Pipeline 建立

  • Status: Accepted
  • Date: 2026-04-19
  • Deciders: 統帥

Context

EwoooCMOMO Pro System原本沒有自動化部署流程每次改版都需要手動 scp + docker restart。其他產品線AWOOOI 等)已跑在 Gitea Actions統帥決定 EwoooC 也對齊相同模式。

Decision

在 Gitea 建立 wooo/ewoooc repoPublic並在 .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-tokenrunner 即可服務 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