← 返回項目列表
DevOps 與工具
OpenProject ↔ Slack 橋接工具
將工單異動轉為 Slack 討論串通知,並提供 GitOps 設定儀表板
重寫並端到端負責(AI 輔助) · 2025.06 — 2026.01
Go Gin Next.js TypeScript MySQL Slack API GitLab CI Docker
項目概述
一個內部工具,將 OpenProject 的工單異動轉換為 Slack 討論串通知與個人私訊。我把 Python 原型重寫為 Go 引擎加 Next.js 儀表板,改為多租戶架構,並建立部署流程。使用 Claude Code、Codex 與 Cursor 完成交付。
架構設計
OpenProject webhook → Go 引擎(快照比對 → Slack Block Kit 訊息、討論串與私訊;媒體存放於 S3;各執行個體獨立的 cron 任務)。管理服務(Go)↔ GitLab API,管理具版本控制的 YAML 設定;push webhook → 透過 SSH 依服務重建或重啟。Next.js 儀表板的下拉選單由即時的 OpenProject 與 Slack 資料填入。引擎以 scratch 為基底的映像檔發布,由 GitLab CI 建置。
核心技術亮點
01
與已儲存快照比對的欄位層級異動偵測;頻道討論串訊息與依角色發送的私訊
02
私有附件轉存至 S3,使其能在 Slack 中顯示;討論串連結回寫至工單
03
一套部署服務 3 個 OpenProject 執行個體(分屬不同團隊),各執行個體的設定與資料彼此隔離
04
定時執行缺陷統計、工單健康度與日報任務,訊息批次發送
05
GitOps 設定儀表板:每次編輯都透過 GitLab API 產生一個 Git commit(約 340 次變更);push webhook 只重建或重啟受影響的服務
技術決策
| 技術決策 | 選擇 | 替代方案 | 原因 |
|---|---|---|---|
| 設定儲存方式 | YAML 存放於 Git,透過儀表板編輯並經 GitLab API commit | 資料庫資料表 | 每次變更都自動具備歷史紀錄、審查與還原能力,而且只改設定時可直接重啟服務,不必重建映像檔。 |