← 返回项目列表
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 提交 数据库表 每次变更都天然具备历史记录、评审和回滚能力,且仅修改配置时只需重启服务,无需重建镜像。