gpt4 book ai didi

git - 为了实现 CI/CD 流水线直到生产,monorepo 的最佳分支模型是什么

转载 作者:行者123 更新时间:2023-12-05 06:14:11 25 4
gpt4 key购买 nike

我有 springboot monorepo,其中包含近 5 个库和 5 个服务,

为了实现持续交付,我在这个 repo 中使用了基于主干的模型(master & release)

在主分支上配置了以下构建

CI 构建构建任何更改的工件 -> QualityCheck > artifact(.jar) -> Deploy to Development Env

每晚构建构建所有库和服务 -> QualityCheck -> 将所有 jar 部署到 QA 环境中

一旦我们准备好发布,我们将从master创建一个发布分支

对于发布分支,我正在运行发布构建,其步骤与每晚构建中的相同。

发布构建构建所有库和服务 -> QualityCheck -> 将所有 jar 部署到 PROD 环境中

我担心的是

  1. 这种用于 monorepo 的正确分支模型是否可以在生产环境中实现持续交付?
  2. 每晚构建需要很长时间才能将所有服务部署到 QA ENV 中,不知道为什么我要将所有服务部署到 QA 中,即使没有任何更改?
  3. 对于 relase 分支,为什么我又需要像每晚构建一样运行所有构建步骤,因为它需要很长时间,有没有办法快速部署生产环境?

最佳答案

首先,您需要摆脱夜间构建。您运行它们是因为每次提交运行整个过程所花费的时间太长——这是您需要优化的部分。为了加快您的构建和部署,您只需要使用受影响的服务:

  • 将 repo 分成单独的项目 - 每个发布周期一个 repo 。意思是 - 如果 2 个服务总是一起部署和发布 - 它们可以存储在同一个存储库中。否则 - 将它们分成不同的 repo 协议(protocol)。可能需要某种形式的集成测试——例如检查ServiceA_v20 可以与 ServiceB_v33 一起正常工作。
  • 或者编写自定义脚本来确定项目的哪一部分发生了变化。因此,如果 ServiceA 发生变化 - 您需要自动确定需要运行哪些测试和检查 - 然后只运行该部分。由于依赖关系,这并不容易:如果 ServiceB 依赖于 ServiceA 并且后者发生变化 - 您需要以某种方式确定需要运行 ServiceA 和 ServiceB 的测试。您可能想查看来自 Google 的视频,其中讨论了 monorepos 以及它们如何构建依赖关系图。

但无论您选择哪种方法 - 保持所有集成处于工作状态的最佳方法是 a) 不要过于频繁地更改 API b) 使更改向后兼容一段时间。

至于分支.. 您不必创建发布分支并构建它们。如果您推送到 master 并且该二进制文件通过了所有检查 - 应该将该二进制文件部署到 PRD。

关于git - 为了实现 CI/CD 流水线直到生产,monorepo 的最佳分支模型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62995650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com