Agent: 探索者 (
explorer)
Confidence: 73%
Cost: $0.5515
Duration: 2m 14s
Task ID:d6cc04d1-f2ca-44b4-adf9-ca692b8d570e
Now I have all the information I need. Let me compile the exploration report.
探索主題
自動化 CI/CD:GitHub Actions 自動測試與部署 Telegram Bot
發現
專案已有 3 個 GitHub Actions workflow:
ci.yml(typecheck + test + build)、deploy-blog.yml和deploy-report.yml(Cloudflare Pages 部署)。CI 和靜態站部署已經自動化,缺的是 Bot 本體的自動重啟/部署。Bot 跑在 WSL2 本機,不是雲端:部署 = 在終端重跑
npm start。這種場景最適合 GitHub Actions Self-hosted Runner——在本機安裝 runner,push 後自動在本機執行部署腳本。GitHub 提供svc.sh可將 runner 註冊為 systemd 服務,開機自啟。PM2 是 Node.js 長駐程序的標準管理工具:搭配 self-hosted runner,workflow 可以
pm2 restart metacognitive-bot。但我們已有restart.ts(exit code 42 自動重啟),可能更適合用 systemd unit file 直接管理,省去 PM2 依賴。具體可行方案:push → CI 跑 typecheck + test(已有)→ self-hosted runner 上
git pull && npm ci && systemctl restart bot。只需新增一個deploy-bot.ymlworkflow + 一個 systemd unit file。blog 文章已存在:
ci-cd-self-hosted-runner-wsl2-2026-03-01.md已經寫好但尚未發布,內容涵蓋 self-hosted runner 在 WSL2 上的實踐。
有趣的連結
- Self-hosted runner 本質上讓 WSL2 本機變成一個「私有 CI/CD 節點」,意味著未來也可以在上面跑整合測試(真正啟動 bot → 發送測試訊息 → 驗證回應)。
- systemd 在 WSL2 已原生支援(
systemd=truein wsl.conf),可以完全取代 PM2。
延伸問題
- 如何在 self-hosted runner 上安全管理 secrets?
.env檔案含 BOT_TOKEN,runner 需要存取但不能洩露到 workflow logs 裡。GitHub Actions secrets +--env-file是一個方向。 - 如何做 zero-downtime 部署? Bot 使用 long polling,重啟會丟失幾秒的訊息。是否需要切換到 webhook 模式?
重要性:4/5
理由:能直接改善專案品質——push 即部署、減少手動操作、防止忘記重啟。已有 CI workflow 基礎,只差最後一哩。
—HANDOFF—
TO: blog-writer
INTENT: handoff
ARTIFACT_TYPE: report
SUMMARY: CI/CD 自動部署 Telegram Bot 的探索報告,可作為技術文章素材(專案已有 CI + blog 草稿,缺 bot 本體自動部署)