多Repo至Monorepo:我如何自动 6 Go微服务发布,然后使它更快

多Repo至Monorepo:我如何自动 6 Go微服务发布,然后使它更快

2026年8月7日2 次浏览来源:Dev.to阅读原文

上个月我花了一个多小时 在六家Go微服务公司做了一次发布 标记日志,等待CI。

更新sdk的指向新日志SHA,推,等CI.

复说取取取出.

然后做Api, Cli, 和工人平行的—— 除了我忘了碰Cli的依赖, 建筑在晚上11点破裂。

这是我最后一次手工发布 这是把Jenkins + Python + GitLab 的整个工作流程自动化的故事, 然后意识到多重力架构是真正的问题, 并且把所有的东西都拆成一个 Go 单重力,在剪辑时速度更快。

整个设定都在我的笔记本电脑上 你可以自己把它叉开试试 目录 6个模块 堆叠阶段 1 : 多重回自动化阶段 2: Monorepo 枢轴 统一 CI 管道 真实数字 Caveats and Cawers try It Yourself the Six 模块 该项目模拟一个真实的制作系统,其中六个Go模块有严格的依赖命令:模块角色标记方案取决于 Logger(叶子,无道具) - API客户端日志共享的公用设施日志,sdk后端日志,utils CLI日志,sdk背景日志,utils 前三个模块是相继的 - sdk 在日志被标记之前无法标记, utils 在 sdk 被标记之前无法标记 。

后三个是终端——一旦完成相继链,它们可以并行处理.

每个单元都生活在三个长寿分支上: →.

一个放出意味着通过所有三个,在所有六个回放中,按照正确的顺序移动代码.

这就是问题所在。

手动操作,你正在拼凑 6重置 × 3个分支 × 依赖命令。

一个被遗忘了,你在午夜调试。

斯塔克万事通在MacBook上运行.

没有云CI,没有SaaS - 只是本地的工具连接在一起。

关键片段: Jenkins LTS通过 运行为启动服务 ngrok 曝光 ~ 所以 GitLab 集成/webhook 能够到达 Jenkins GitLab.com 托管用于自动化引擎的 Repos Python (+) Go 1.24 工作空间支持 ~ Jenkins GitLab 集成配置 使用 GitLab 本地 Jenkins 集成 组合 ngrok 用于本地地道道: GitLab ~ Jenkins : 土著集成会自动触发本地 Jenkins 的管道在推和 M事件上进行.

Jenkins – GitLab:报告通过API建立进度和状态,直接显示对承诺和合并请求的绿色/红色状态检查.

第1阶段:多重播自动化 设置:6回放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放放 在多repo世界中,每个模块都是自己在组合下的GitLab repo:每个repo获得自己的Jenkins CI工作(6个工作),外加一个运行自动化Python脚本的管弦工作.

这是7个詹金斯的工作需要维持。

自动化引擎: 1,800行 Python repo包含大脑:一个与GitLab API交谈并进行git操作的Python脚本 ().

一份詹金斯工作,五项行动:行动 合并开发 – 对所有 6 repos 的释放, 依依附顺序 合并开发 – 开发(或主开发 – 释放) 合并释放 → 主机,标记每个模块,出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出 当您触发时, 脚本 : 序列相 - 处理日志, sdk, 一次使用 : 从合并中创建一个中间分支( 自动处理 go. mod 冲突) 创建 GitLab MR 等待批准( 或配置后自动合并) 记录合并的 SHA - 下一个repo 需要它并行阶段 - 进程 api, cli,工人同时: 相同的合并流程,但所有三个同时运行,因为它们是终端节点 最难的部分:跨repo依赖跟踪.

当日志合并以释放时, sdk 需要运行以锁定准确的承诺.

剧本跟踪这些SHA进入,并通过连锁传递.

冲突处理 当代码冲突发生(不仅仅是去.mod)时,管道不会崩溃.

它: 从源头创建冲突分支切取( 所以 GitLab 使真实的 diff) 为手动解析+批准Aut每30秒打开一个带有标题的 MR

分享