持续集成和部署的Git发布分支策略

39次阅读
没有评论

问题描述

在进行持续集成和部署时,有两种不同的分支策略,其中一种是将开发人员的功能分支合并到主分支,然后将主分支部署到QA/UAT进行测试,最后再将主分支部署到生产环境;另一种是将开发人员的功能分支合并到主分支,然后在测试结果确定后,创建一个用于部署到生产环境的发布分支。对于一个有着约50名开发人员和8个Scrum团队的组织,你会给出什么样的推荐呢?需要注意,我们始终使用功能标志来切换发布和推出的功能。

解决方案

请注意以下操作可能会因工具和实践的不同而有所不同。

方案1:基于持续交付的策略

这种策略更加注重持续交付(Continuous Delivery),其中CI/CD流程以主分支的提交(包括功能分支合并或修复补丁)作为入口点。每个提交都会触发CI/CD流水线的验证,并尝试尽可能地推进流程。QA/UAT是流水线的其中一个阶段,如果通过测试,代码就会进入生产环境。实际上,你的发布只是从主分支中选择的提交(通常是通过标签标识的),并不真正是分支。

优势:
– 最少的分支操作,简化流程。
– 所有人都在同一个分支上工作,团队协作更容易。
– 成本最低(前提是项目规模允许)。

劣势:
– 不能拥有处于维护状态的多个发布版本,只有一个“当前”发布版本。每个附加修复都会变成一个新的发布。这并不一定是坏事,这种发布模型实际上可能是所期望的(例如,对于SaaS产品)。
– 发布的节奏实际上并不可预测。如果发现问题,到问题合并到主分支时,可能会出现其他更改的合并和其他问题的检测。这在分支提交速率较高(项目规模较大)的情况下逐渐恶化,甚至可能不会收敛(项目可能根本不会稳定下来)。在大规模项目中进行持续集成和部署并不是一件简单的事情。

方案2:传统发布策略

这种策略更像是传统的发布策略,但实际上并不是持续交付/部署。

优势:
– 更可预测的发布节奏。发布(或称为“油门”)分支允许降低特定发布的提交速率。通常,发布分支只会接收与特定发布相关的必要修复,未来发布(或发布系列)的修复将会进入主分支。
– 支持多个同时/重叠地进行的积极维护的发布,可以有复杂的发布策略(长期/短期/滚动等)。
– 支持多级发布(例如major.minor.increment),也就是所谓的发布“列车”。主要发布分支本身可以有多个次要发布子分支等。

劣势:
– 所有人不再在同一个分支上工作。每个发布分支都有自己的上下文,可能伴随着自己的政策、流程、工具和所需资源等。每个分支需要自己的开发/测试/验证。这将会显著增加开发/维护成本。
– 跨多个发布的问题追踪和传播修复可能并不简单。将发布分支重新合并到主分支(或其父分支)看起来是一种诱人的方法,但在我看来,这是一种不好的做法。

选择哪种策略取决于你的组织和项目的特定情况,包括项目规模、复杂性、团队结构以及发布节奏的要求。无论选择哪种策略,始终记得通过功能标志来切换发布和推出的功能,这有助于减轻发布带来的风险。

请注意:以上解决方案针对不同情况可能会有适用性不同,需要根据你的项目和团队特点进行适当的调整。

正文完