今天学习一下git分支管理模型之阿里的AoneFlow模型,以及阿里的云效代码管理平台
分支管理模型简介
使用过git一段时间之后,开始深入了解git分支管理模型,经过百度学习后,常用的一般有两种分支模型 TrunkBased模型(简称tbd)和目前最常用的GitFlow模型,以及今天学习的阿里分支管理模型AoneFlow.
分支管理模型只是一种通用的约定,并不是强制要按照这个模型的管理办法实施,只是针对各种分支管理的情况总结出来的通用的管理办法,每个项目可能根据自身项目的周期和实际情况来指定分支管理模型.
TBD模型
TBD模型只有一个主分支(master)和多个发布分支(release),这种模式主要在svn这种集中式管理工具里使用的比较多,所有开发人员都在一个分支工作,并提交代码到一个分支,这种模式对开发人员的协调沟通要求较高.
个人理解这种模式适用于只有一个版本运行的项目,如果多个版本同时维护就不太方便了.
GitFlow模型
GitFlow模型主要分为以下几个核心:
master分支: 为生产环境运行分支代码,只能有一个
develop分支: 主干分支,只能有一个
feature分支: 特性分支,可以有多个,每个工作项一个分支
release分支: 发布分支,可以有多个
hotfix分支: 热修复分支,可以有多个,用于生产环境出现问题时快速修复
gitflow的分支管理比较复杂,简述下个人理解的分支管理流程:
- 有新的工作项(新增/修改功能,修复缺陷)时,基于develop分支(最初的develop分支是基于master分支的)拉取代码,创建新分支feature/newFeature
- 新的功能开发完毕后,将feature/newFeature合并入develop分支,而不是master分支
- 当发布周期到来时,基于develop分支创建一个release分支用于发布,此时的release分支应该不再有新的feature分支合并,只能用于缺陷修复
- 发布时,将release分支合并入master分支并基于master分支打标签,标志一次发布.
- 当master分支发布后,线上突然出现紧急问题时,基于master分支新增hotfix分支,修复缺陷后,将hotfix分支合并入master分支和develop分支,并且基于master分支打标签,标记一次发布
AoneFlow模型
AoneFlow模型是基于上述两种模型演变出来的一种新模型,核心内容如下:
- master分支: 1个 主干分支
- feature分支: 多个 特性分支
- release分支: 多个 发布分支
工作流程:
- 有新功能/缺陷时,基于master分支新建feature分支进行开发,
- 发布时,基于master分支新建release分支,并将本次需要发布的feature分支合并入release分支,并基于此release分支发布
- 将此release分支合并入master分支,并打tag标签 此操作发布前后进行都可
- 线上突然出现bug时,基于master分支新建release分支,基于此release分支新建feature分支,修复后再合并入release分支,重复2.3步操作.
- 删除release分支,删除release分支关联的feature分支.
可以总结:
AoneFlow是通过release分支来关联feature分支来做分支管理的.
目前AoneFlow是最贴合我们公司工作流程的.
云效
https://devops.aliyun.com/workbench
公共云免费,一般小型项目可以直接使用的.
云效是阿里云免费的一站式DevOps平台,提供了从需求到交付的一站式平台.
我们只是在这里测试下云效中的代码管理库提供的对AoneFlow的支持
基于上文说的AoneFlow的核心思想:
我们做如下测试:
模拟正常开发过程,新增两个feature分支,修改代码后,都提交
- 通过dev流水线自动生成release分支
- 通过test流水线发布release分支的发布
- 通过prod流水线发布release,并将release分支合并到master分支
新建项目
进入云效直接新建项目即可
新建分支
新建feature/testFeature分支和feature/bugFix分支
新建流水线
流水线这里我们简单点,只做代码测试,后续部署就跟jenkins一样了,云效的图形化也是非常给力的
新建流水线的时候,因为要基于AoneFlow模型来做,所以需要流水线源需要开发分支模式
然后就会出现分支管理器,这个不用修改,默认自动触发
然后简单添加一个单元测试,DEV的流水线就建立成功了,我们保存运行一下
此时需要你添加运行分支,此时就是AoneFlow里的多个feature分支合并到一个release分支,只不过云效可以通过流水线帮你做了合并的动作.
我们将刚才的两个分支都添加上,然后运行
等待运行成功后回到分支页面,你会发现多了一个release分支,这就是自动生成的release分支.
此后,我们用同样的方法建立test流水线和prod流水线
写基线
区别的是prod流水线多了一个写基线的操作
写基线就是将生产流水线生成的release分支代码合并到master分支,并删除源分支,也对应AoneFlow中的操作
最终流水线就如下所示:
且又生成了一个release分支,这个由生产流水线生成的release分支其实就是生产环境运行分支了
通过上述实验,可以看到云效里其实通过流水线来支持了AoneFlow模型,让操作更方便.