持续交付:微贷分支策略

今年,我们中间件和项管团队合作,做了微效平台。大部分功能大家都比较好理解,但是分支策略,是在平台上看不到的,也是不太好理解的,特别是对于我们为什么这样做。为此,我想通过这篇小文章,讲清楚我们现在的分支策略。

在此,我想先说明下我们现有的环境。

一、 微贷的环境

针对同一个系统,他所用到的环境如下。

  • 迭代环境:开发环境,一个系统可能会部署到不同的迭代环境,系统不太稳定。
  • 稳定环境:长期运行的测试环境,仅有一套,代码比较贴近线上环境,较稳定。
  • 预发环境:长期运行的线上环境的预置环境,仅有一套,代码与线上一致,并且用同一个数据库。
  • Beta环境:线上环境的第一台机器作为Beta环境的机器,在发布时,会切流,外部流量不会经过改环境。
  • 线上环境:即生产环境。


    image.png

二、 微贷目前的分支模型

如下图,我们大部分的分支策略或多或少都可以归到这个模型中。我们暂且称该模型为==简单分支模型==


image.png

这个分支模型与环境的关系如下:

  • 迭代环境:部署dev分支
  • 稳定环境:部署master或dev分支
  • 预发环境:部署master
  • Beta&线上环境:部署master

看到这个分支模型的时候,我开始思考几个问题。

  1. 这种分支会产生什么问题?
  2. 若要不产生问题,该如何操作?

简单分支模型会产生什么问题?

  1. 从master拉出来的dev分支,不稳定

因为稳定环境测试需要合入master分支,所以master中的代码可能是未测试完全的代码,此时拉出来的dev分支,很可能存在严重bug,并且,开发也不知道什么时候再去master拉取代码合入dev才是没有bug的。

  1. 稳定环境抢占问题

测试将dev1部署到稳定环境,那么当dev2要部署稳定环境时,dev1的测试是不知道的,而且也没法控制,稳定环境就被dev2占用了,而dev2的测试也不知道在他之前代码分支是谁部署的,他想占用多长时间,现在是否还需要使用。这就是抢占问题

  1. 生产环境可能会部署未测试的代码

在3问题上扩展,同样的道理。当我某个dev合入master并测试完成需要发布时,我没法控制到发布上线前的这个时间段内,没有人会提交代码到master。如果有人在这个时间段内提交了新的代码到master,那么发布的代码就很有可能是有bug的。

  1. master中的代码有不同的发布时间,导致部分项目延期

多个dev的项目合入master,但他们的发布时间不一样。dev1希望12-17发布,dev2希望12-20发布,如果dev1要根据dev2的时间发布,那dev1就延期了。

如何解决以上问题?

  1. 引入流程控制

能解决2、3问题

  1. 增加一个分支int,所有dev分支需要集成到int分支,并测试

能解决1问题

  1. 增加rel分支,所有的发布从dev拉出rel分支发布

解决4问题

将上述三个方案合成就是我们现有的分支模型--微效分支模型,详细的在微效的分支模型中展开讲。

三、微效分支模型

我们先简单看下我们的分支模型,如下图。其中有四种分支类型:

  • master:稳定的代码分支
  • dev:开发分支,可以有多个,部署到迭代环境
  • integration:集成分支,仅有一个,所有的dev都需要合入integration,部署到稳定环境
  • release:发布分支,仅有一个,部署到预发&Beta&线上环境


    image.png

1. 流程控制

我们的流程控制是如何做的,而不保证上述的2、3问题的?

  1. 开发从master拉取分支创建为dev-x分支
  2. 开发完成,申请集成环境(稳定环境)(引入审批流程,解决抢占问题)
    1. 当前集成环境无人占用:直接申请成功,并且从master拉取最新代码创建int分支,dev-x合入int分支
    2. 当前集成环境被人占用:需要占用集成环境的人审批通过,或者等待释放。
    3. 审批通过后,dev-x合并最新master代码,并合入int分支
  3. 集成环境测试通过后,从dev-x拉取rel分支,并发布,这时会有如下两次检查来解决(3问题)
    1. 检查dev-x中的代码是否包含master最新代码
    2. 检查int分支中是否包含dev-x的最新代码
      4.发布完成,将rel合并入master

在上述流程中,我们引入了集成环境的审批,来解决抢占问题(2问题)。

同时,我们在拉取rel的时候会比较dev与master的不同,int与dev的不同,来保证dev的代码是在int中被测试过的,并且是有master的最新代码,来保证3问题不发生。

2. 微效如何保证master代码的稳定性?

要讨论这个话题前,我们需要定义下,什么样的代码算是稳定的?

每个人的理解可能有差异,我姑且将发布上线后的代码就称为稳定的代码

那么,我们来仔细观察上图的微效分支模型,会发现,合入master的途径只有一个----rel发布完成合入master。所以我们只要保证rel的代码是稳定的即可。而rel中的代码是在稳定环境测试通过,包含master最新代码的要发布上线,并且在发布成功后才合入master,这时我们认定这个代码就是稳定的。这样我就解决了master代码不稳定的问题(1问题)。

3. 各项目发布时间节点不一样怎么办?

如果没有我们的分支模型,大家可以想下怎么解决这个问题?

很简单,发dev分支的代码不就好了吗,免去合并发布的各种烦恼。

那么,我们剩下的就是要解决dev分支的稳定性问题。实际上,我们是引入rel来解决该问题,而rel对应的只会是一个dev分支。而在前面我们已经讲过如何保证rel的稳定性。

但这时又出现另个问题:相同时间段有两个项目同时发布的怎么办?

我们的解决方案就是rel分支只有一个,同个时间段内需要同时发布的项目,要排队。

这样就解决了发布时间节点的问题了(4问题)。

4. 发完之后有bug怎么办?


经过上述的流程和分支模型我们解决了简单分支模型会产生的问题。但是,这会不会产生新的问题呢?有想法可以留言哦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354