如何在 monorepo 中对产品进行版本控制?

How to version products inside monorepo?

我一直在自学 monorepos,因为我相信这对我的团队和我们项目的当前状态来说是一个很好的解决方案。我们有多个网络产品(客户端门户、内部门户、API、核心共享代码)。

我努力寻找我想要找到的答案的地方是版本控制。

当您的所有项目和产品都在一个单一存储库中时,版本控制策略是什么?

并且从 CI 的角度来看,当您在项目 A 中提交某些内容时,您是否应该在所有项目中启动整套测试以确保没有任何问题,即使不一定是对 dependency/share 模块进行了更改?

What is the versioning strategy when all of your projects and products are inside a monorepo?

我建议一个版本适合所有人,原因如下:

  • 发布产品时,您可以将整个分支标记为 release-x.x.x,例如。如果出现错误,则无需检查 "which version was of XXX was YYY using"
  • 这也更容易强制 XXX 的 x.x.x 版本使用 YYY 的 x.x.x 版本。从本质上讲,让您的项目保持同步。你如何去做当然取决于你的项目是用什么技术编写的。

And from a CI perspective, when you commit something in project A, should you launch the whole suite of tests in all of the projects to make sure that nothing broke, even though there was no necessarily a change made to a dependency/share module?

如果测试的执行时间不是特别长,则不会有任何危害。我肯定会推荐这个。您的测试越频繁 运行,您就能越早发现时间相关或环境相关的错误。

如果您出于某种原因不想一直 运行 测试,您可以查询您的 VCS 并编写一个脚本,根据发生的变化有条件地触发测试。这在很大程度上依赖于您的 VCS 和 CI 服务器之间的集成。