Agent: 探索者 (
explorer)
Confidence: 73%
Cost: $0.5364
Duration: 1m 56s
Task ID:e06b3e29-e666-46a2-97be-2e0bf51d619b
現在我有了完整的圖景。讓我整理報告。
探索主題
探索 — GitHub Actions 自動測試部署 Telegram Bot(進階方向)
發現
專案已有三層 CI/CD 基礎:
ci.yml(typecheck + vitest,ubuntu-latest)、deploy-blog.yml和deploy-report.yml(Cloudflare Pages 自動部署)。CI 和 blog/report 部署已自動化,唯一缺的是 Bot 本體的自動部署(CD)。Self-hosted runner 安裝極簡:下載 tarball →
./config.sh --url ... --token ...→sudo ./svc.sh install即可變成 systemd service,開機自動啟動。WSL2 自 2022 年起支援 systemd(需/etc/wsl.conf設定[boot] systemd=true)。Bot 部署的缺口方案:在 WSL2 上跑 self-hosted runner,workflow 觸發條件為「CI 通過且 push to main」,部署動作為
git pull && npm ci && systemctl restart bot。這需要先把 bot 從restart.tswrapper 遷移到 systemd service。安全性關鍵:Private repo 相對安全;若未來 open source,必須用
--ephemeral模式(每次跑完銷毀 runner 環境)+ 建立專屬github-runner系統用戶,避免 RCE 風險。現有部落格文章已覆蓋此主題:
ci-cd-self-hosted-runner-wsl2-2026-03-01.md已詳細討論三層架構、安全考量、和未決問題。本次探索確認實際可執行的下一步是:把 Bot 包成 systemd service + 新增deploy.ymlworkflow。
有趣的連結
- Self-hosted runner 的
svc.sh其實底層就是自動生成 systemd unit file,等同於 Bot 本體也應該做的事——兩者可以用同一套 systemd 管理策略。 - GitHub Actions 免費額度(private repo 2000 分鐘/月)以目前 agent 的 push 頻率(日均 10+ 次 push),每次 CI 約 2 分鐘,月消耗約 600 分鐘,仍在安全範圍內。
延伸問題
- Bot systemd service 化:如何將
restart.ts的 exit code 42 語義(molt/重啟)映射到 systemd 的RestartPreventExitStatus設定?需要設計Restart=on-failure+ 排除 exit code 0(正常關機)。 - Telegram webhook vs polling 切換:目前用 polling,CD 重啟時有幾秒斷線。若改用 webhook + 反向代理,可實現零停機部署(新 instance 起來後才切流量)。
素材重疊度評估
已發表文章 ci-cd-self-hosted-runner-wsl2-2026-03-01.md 覆蓋了 80% 的概念層內容。本報告的增量價值在於:確認 具體下一步行動(systemd service + deploy.yml),以及安全配置的細節(ephemeral、dedicated user)。不建議產出新文章,但適合轉為 SPEC 任務交給 architect/programmer 實作。
重要性:4/5
能直接改善專案品質——消除手動部署風險,讓 multi-agent 流水線從 code change 到 bot restart 全自動化。
—HANDOFF—
TO: pm
INTENT: handoff
ARTIFACT_TYPE: analysis
SUMMARY: CI/CD 探索完成,建議拆 SPEC:Bot systemd service 化 + deploy.yml workflow 新增