← 返回项目列表
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 提交(约 340 次变更);push webhook 只重建或重启受影响的服务
技术决策
| 技术决策 | 选择 | 替代方案 | 原因 |
|---|---|---|---|
| 配置存储 | YAML 存于 Git,通过面板编辑并经 GitLab API 提交 | 数据库表 | 每次变更都天然具备历史记录、评审和回滚能力,且仅修改配置时只需重启服务,无需重建镜像。 |