该如何管理开发过程中的Git代码分支

背景

git代码分支管理是devops的一个重要组成部分。而现状是,各个业务线没有统一的代码分支管理规范,这样会降低研发效率和增加线上代码的风险。所以需要一个统一的代码管理以及配套的产物环境管理。

方案原则:

  1. 尽量减少分支数量,降低分支管理成本,减少代码分支操作的失误。

  2. 要满足日常开发的易操作性和灵活度。

  3. 充分利用CICD的自动化管理代码分支功能,提升代码管理的效率,减少手动处理的出错率。

  4. 项目之间的开发和部署类型有比较大的差异,需要区别对待。

跟现在业务线的现状,方案分为三类场景:

  • 日常开发场景。针对的是迭代频率较高,多需求开发同时进行的情况。包括公有云产品研发场景和私有化长期研发场景。

  • 私有化部署开发场景。这种情况是指工程师用产出物部署(jar包,docker,k8s等)去甲方部署业务线的产品,这用情况会涉及到较少的开发。

  • 共创开发场景。有些代码仓是需要两个团体共同维护,这两个团队既需要共享代码,也需要隔离部分代码,因为有些代码有的团队不需要。

开发过程中分支的处理流程

采用了与 CICD 高度集成的方式,充分提升分支和环境的管理效率,减少程序员写git命令处理分支的次数。

分为日常开发和线上bug处理开发。

日常开发流程

原则上只有有三个主干分支、feature分支、测试环境发布分支(release/test),生产环境发布分支(release/prod)。当然可以根据需要再增加分支, 比如预发环境分支,UAT环境分支等。

首先,第一步从 master 最新的tag版本创建 feature 分支, 代码开发工作就在这个分支完成。

这里的feature分支是指从需求功能分解的最小代码实现单元,最好是一个人来提交代码。在提交测试前,feature 分支需求完成单元测试和开发环境的测试。

第二步,当 feature 分支单元测试时就可以考虑在测试环境发布了,在 CICD 平台会有一个完成单元测试的 future 分支池子。在这个池子中可以根据需求选择每次发布的 future 分支集合,并把这个集合作为新的发布版本代码集合。这样可以灵活的控制发布内容。

把一个或多个 feature 分支合并到测试环境的 release 分支(对应图中的release/test 分支),这时候进入测试阶段,如果测试环境中判断哪个 feature 分支的代码有问题,对应的feature 分支代码修改后经过单元测试再合并到 release/test 分支,直到测试环境通过后,再把各个feature分支合并到生产环境的 release/prod 分支,然后通过 CICD 发布到生产环境。

第三步,发布成功后在 release/prod 分支合并到 master 分支并打上新的tag版本号。

在这个流程中, 需要 CICD 的配合使用,具体与 CICD 的配合流程在下面:

  1. Feature 分支从 master 分支创建,由于创建时间不同会出现不同的 tag版本的 feature 分支。

  2. CICD 平台提供了一个feature 发布集合的功能,可以把认为可以作为一个版本发布的 feature 分支集合放入一个发布集合,同时,CICD 会判断要进入这个发布集合的 feature 分支的tag是否低于 master 分支的tag, 如果低了就必须和当前的 master 分支合并。

  3. 发布集合的所有 feature 分支会按顺序和 release/test 分支合并,并处理错误信息。

  4. release/test 分支的合并处理完成后,触发 CICD 流水线把代码部署在测试环境上,在测试环境完成测试,测试不过继续在 feature 分支改代码,循环这个流程。

  5. release/test 分支的代码在测试环境完成测试后,把release/test 分支合并到 release/prod 分支。

  6. release/prod 分支的代码通过 CICD 把代码部署在生产环境,产品经理和测试需要在生产环境测试。

  7. 当生产环境出现问题时, 把 master 分支 merge 到 release/prod 分支,重新不是生产环境,然后再修改 feature 分支上的代码,循环这个流程。

  8. 生产环境发布成功时,把 release/prod 分支合并到 master 分支,并打上新的 tag 版本号。

  9. 删除新版本对应的 feature 分支。

注意事项:

  • 每次只能发布一个版本到生产环境,不可多个版本合并上线,有利于减少上线验证复杂度和出问题后根据tag回滚。

  • 可以增加环境,比如增加一个预上线环境等,同时在 CICD 上做好代码分支与环境的对应关系。

优点

  • 没有太多的分支,减少了分支管理成本。

  • 利用通过 CICD 上的 feature 分支集合管理功能,实现了通过动态配置feature分支集合来管理发布版本。

  • 在 feature 分支进入发布 feature 集合之前就要验证是否小于 master 的tag 版本,这样就避免了后期合并分支产生过多的代码不一致的问题。

  • release/prod 发布代码之前会检查 tag 版本是否小于 master 分支上的tag 版本,这样在最后一步能避免代码版本问题,这个检测可以通过 CICD 设定。

FixBug 开发流程

Bug 分为紧急和非紧急。

紧急bug

当有紧急的 bug 需要修复时,直接从 走下面的流程:

直接从 master 拉取 hotfix 分支,代码完成后,可以在测试环境测试一下,没问题就可以发布,如果遇到紧急情况而且能保证代码没问题,就直接发布到生产环境。

非紧急bug

对应非紧急的bug的上线。先从 master 拉取一个 bug 分支,然后再合并到 release/test, release/test 可能有正在测试版本,就和这个版本一起上线

相关推荐
charlee444 小时前
Github项目CI&CD部署
ci/cd·github·devops·github actions
Empty_77721 小时前
DevOps理念
运维·devops
NineData1 天前
NineData 数据库 DevOps 正式支持谷歌云,全面接入 GCP 数据源
运维·数据库·devops·ninedata·gcp·玖章算术·数据智能管理平台
一周困⁸天.1 天前
DevOps
运维·devops
tianyuanwo2 天前
OS DevOps专家实战:构建依赖变化与二进制包识别系统
devops·rpm·依赖变化·rpm组件版本抬升·二进制包范围变化
mobº4 天前
K8s 集群部署微服务 - DevOps(二)
微服务·kubernetes·devops
智能运维指南4 天前
2025年信创DevOps平台选型:以嘉为蓝鲸为核心的全流程落地指南
devops·研发管理·服务管理·嘉为蓝鲸
2401_831501735 天前
Devops之Docker安装和使用
运维·docker·devops
_OP_CHEN5 天前
【Git原理与使用】(六)Git 企业级开发模型实战:从分支规范到 DevOps 全流程落地
大数据·linux·git·gitee·项目管理·devops·企业级组件
Watermelo6177 天前
【简单快速】windows中docker数据如何从C盘迁移到其他盘
java·运维·docker·容器·运维开发·devops·空间计算