干货 | 分支集成加速器Light Merge在携程的应用

作者简介

苏玲,5年软件配置管理及6年持续集成经历。曾在苏州科达科技和大众点评任资深配置管理工程师,目前为携程代码中心负责人,专注于代码相关的平台建设,致力于提高研发效率与研发质量。

本文分析了Ctrip 代码平台提供的集成加速器(Light Merge,简称LM)产生的背景及其特点,并具体说明了LM在多特性分支上线流程中发挥的作用。LM 给不使用特性开关的项目的集成与上线,提供了一种高效便捷的解决方案。

我们期待更多的Ctrip 团队能够享受到LM的服务,也希望 LM 能为同行的代码集成提供有效的参考,让研发的集成尽可能不那么繁琐,不那么低效。

Ctrip研发状况和面临的问题

  • 项目通常有多个功能一起开发,开发的初期为了减少彼此干扰,会为每个功能创建特性分支。
  • 受研发不可控因素的影响,对于未来的某个时间点,多个特性功能存在是否能集成的问题。
  • 各特性分支进入到稳定阶段,必然需要merge在一起,然后一起被编译、打包和测试。怎么让这个过程更加自动化呢?
  • 多个特性分支,难免会修改公用文件,如果不及时关注公共文件的变化,以后各特性分支之间可能出现难merge的情况。

Ctrip主流开发模式及分支模型

  • 采用特性分支开发模式。
  • 主推的分支模型:
  • master 分支为最核心的集成分支,用于上线。
  • master 分支的任何一个 commit,符合质量要求。
  • 统一从 master 拉取新分支 。
  • 与Paas集成后,统一省略环境分支。

单个特性分支怎么合入master分支?

为了保证集成分支的质量,在 gitlab 上集成分支通常都被保护起来(protected),不允许直接 push 到被保护的分支。不过,我们可以通过发起 Merge Request 的方式把特性分支合入到集成分支 。借助 MergeRequest,我们可以完成 sonar 静态检查、代码review 等质量管理的活动。

多个特性分支会给集成带来哪些问题?

  • 不同分支可能会修改相同文件,集成时很可能出现代码冲突。
  • A、B两个分支先后合入到集成分支,B合入后导致A分支对应的功能发生故障。
  • A 合入到集成分支后可能需要一套测试环境;B 合入到集成分支后也可能再需要一套测试环境。多特性分支分别合入集成分支所需的测试环境也多。

靠什么快速发现多特性分支集成问题?

LightMerge 功能及特点

  • 合并冲突自动告警
  • 多分支自动merge
  • 自由选择需集成的特性分支
  • 高效定位可集成的特性分支的最大集合
  • 设置非常简单
  • 支持 CI
  • 与 Merge Request有机结合

LightMerge和Merge Request的关系

  • MergeRequest 是正式的 merge 请求,在开发的某个时机,用来把一个分支合入到另一个分支。
  • LightMerge 服务于开发的过程,在不影响任何一个分支的基础上,把>=两个分支做集成,发现冲突及时通知当事人;一旦某个分支发生变化, LightMerge 立即重新merge、检查并通知。
  • 当它俩在一起工作时,可以大大提升团队集成的效率与质量。

多特性分支上线流程(推荐)

说明:

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诸多项目团队作为分支集成的加速器,我们期待更多的团队能够享受到它带来的便利。

原文发布于微信公众号 - 携程技术中心(ctriptech)

原文发表时间:2018-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏维恩的派VNPIE

vn.py的底层实现机制——回测及参数优化

前几天介绍了vn.py实盘部分的底层实现机制,这一篇将为大家介绍数据以及回测部分的底层实现机制。

36720
来自专栏程序员同行者

运维与自动化运维发展概括

97840
来自专栏织云平台团队的专栏

拿什么解救你我的脚本?

20430
来自专栏程序员的知识天地

为何Node.js 能成为 Web 应用开发最佳选择?

一项颠覆性的技术进入技术市场总会带来一阵震惊,但随之而来往往是被放弃。然而,Node.js 当然不是这样的情况,它是一个开源的、跨平台的基于 Chrome 的 ...

16630
来自专栏网站设计制作、数字营销

网站在百度搜索结果中被标识危险什么原因

在日常的百度搜索中,会有时发现在搜索结果中出现有的网站快照索引被百度标识为危险标识风险提示,发生这样的风险提示是什么原因?公司网站在百度搜索结果中出现这样的情况...

26900
来自专栏EAWorld

以服务网格实现微服务的高级Traffic-shadowing模式

作者:Christian Posta 译者:月满西楼 原题:Advanced Traffic-shadowing Patterns for Microser...

35330
来自专栏腾讯云技术沙龙

黄文俊:Serverless架构及场景介绍

大家好,自我介绍一下,目前我是腾讯云无服务器云函数产品负责人。我做了很多年后端开发。今天是从一个程序员角度讲解一下我们怎么样用Serverless架构。

51560
来自专栏北京马哥教育

如何构建高扩展性网站?

本篇通过阅读《高扩展性网站的50条原则》,总结出以下内容。   一方面博主没有实际的架构经验,另一方面知识面也不够宽阔,所以只能系统的总结书中的要点,并根据自...

34240
来自专栏逍遥剑客的游戏开发

从Native到Web(五), emscripten学习笔记: 初体验

16930
来自专栏BIT泽清

App Store审核成功解决2.1大礼包被拒后,通过最后一关的元数据被拒分享

最近这周帮一个客户上线一个棋牌游戏的项目,已经被3.2.1过后处理成功,又出现了2.1大礼包App完成度的问题;经过连续2天的加班通宵(当然是团队伙伴们车轮战拉...

1.5K90

扫码关注云+社区

领取腾讯云代金券