作者简介
苏玲,5年软件配置管理及6年持续集成经历。曾在苏州科达科技和大众点评任资深配置管理工程师,目前为携程代码中心负责人,专注于代码相关的平台建设,致力于提高研发效率与研发质量。
本文分析了Ctrip 代码平台提供的集成加速器(Light Merge,简称LM)产生的背景及其特点,并具体说明了LM在多特性分支上线流程中发挥的作用。LM 给不使用特性开关的项目的集成与上线,提供了一种高效便捷的解决方案。
我们期待更多的Ctrip 团队能够享受到LM的服务,也希望 LM 能为同行的代码集成提供有效的参考,让研发的集成尽可能不那么繁琐,不那么低效。
Ctrip研发状况和面临的问题
Ctrip主流开发模式及分支模型
单个特性分支怎么合入master分支?
为了保证集成分支的质量,在 gitlab 上集成分支通常都被保护起来(protected),不允许直接 push 到被保护的分支。不过,我们可以通过发起 Merge Request 的方式把特性分支合入到集成分支 。借助 MergeRequest,我们可以完成 sonar 静态检查、代码review 等质量管理的活动。
多个特性分支会给集成带来哪些问题?
靠什么快速发现多特性分支集成问题?
LightMerge 功能及特点
LightMerge和Merge Request的关系
多特性分支上线流程(推荐)
说明:
1)F01、F02和F03三个功能,每个功能对应一个特性分支,并行开发。
2)三个特性分支的开发人员通过自测后,各自发起了合入到master 的 merge request。此时,团队可以做codereview,sonar静态扫描等检查活动。
3)于此同时,负责集成的人员借助 Light Merge,构建、打包并测试后发现F01和 F03的功能集成后可以一起上线,而集成F02 后发现有问题。
4)最后,F01→master 及 F03→master 的两个 Merge Request 被接纳,而 F02→master 的 Merge Request 被拒绝。
上面第3)点在确定哪些特性分支可以一起上线的过程中,可以借助Light Merge。
代码平台上Light Merge设置如图A:
图A
如果自动集成时代码发生冲突,则web上会提示冲突,也会Email通知给相关人员。如F01和F02分支修改了同文件的同一行,LightMerge自动merge后web提示信息如图B:
图B
邮件提示信息如图C:
图C
文件冲突解决后,如果设置了CI,则集成后的代码会自动编译、打包并部署到FAT测试环境。团队成员可根据测试结果主动调整Light Merge的特性分支的集合(也就是Source Branches),直到筛选出最大的集合,该集合对应的功能通常就是下一个发布版本可发布的功能集。
至于这几个特性分支一起集成到master的方式,有两种做法:
结束语
对于不使用特性开关的项目(上线后所有功能都会启用),我们必须保证上线后各个功能正确且有效,这对集成的效率和质量提出较高的要求。
在对多个特性分支做集成的时候,如果不借助Light Merge类似的工具,负责集成的人员需要做许多繁琐又重复的活动;反之,只需简单的调整需参加集成的特性分支的集合,就能靠Light Merge自动完成这些特性分支代码的集成、构建、部署,甚至自动化测试,从而筛选出用于上线的特性分支。因此,我们称 Light Merge 是分支集成的加速器。
Light Merge功能目前已被Ctrip诸多项目团队作为分支集成的加速器,我们期待更多的团队能够享受到它带来的便利。