CI / CD 中的 Git workflow

Gitflow 在 CI / CD 实践中存在的问题

一、在传统的 Gitflow 规范中,长期分支有 master 和 develop,为了完成特定需求的开发的分支又有 feature branch,hotfix branch 和 release branch。将这么一套复杂的 workflow 规范应用到团队中,不仅需要每个人都能正确地理解和选择正确的分支进行工作,还对整个团队的纪律性提出了很高的要求。毕竟规范越复杂,应用起来就越难。

二、在 Gitflow 规范中,新功能建议在 feature branch 上进行开发,当功能开发完成之后,featrue branch 才会被 merge 到 develop branch。如果这样管理分支的话,那我们如何做持续集成呢?毕竟持续集成不是自己在本地把所有测试跑一遍,持续集成是把来自不同 developer,甚至不同 team 的代码集成在一起,确保能构建成功通过所有的测试。按照持续集成的纪律,本地代码必须每日进行集成,如果基于 Gitflow 实践持续集成,有以下几种方案可选:

  1. 每个 feature branch 在一天内完成,然后集成回 develop branch。首先,大多数的功能都不可能在一天内完成开发。其次,如果一天内就可以完成一个功能的开发,我们为什么还要专门开一个分支呢?
  2. 每个分支有自己独立的持续集成环境,在分支内进行持续集成。然而为每个环境准备单独的持续集成环境是需要额外的硬件资源和虚拟化能力的。假设这点没有问题,不同分支间如果不进行集成,仍然不算真正意义上的持续集成,到最后 merge 的时候,big bang conflict 还是无法避免。
  3. 每个分支有自己独立的持续集成环境,在分支内进行持续集成,同时每日将不同分支 merge回 develop 分支进行集成。听起来很完美,不同分支间的代码也可以持续集成了。可是如果发生了冲突,CI 挂掉了谁来维护呢?也就是说我们还是得关心其他 developer 的开发情况。不是说好了用 feature branch 就可以不管他们自己玩吗,那我们要 feature branch 还有什么用呢?难道就是为了废弃掉未完成的功能时删除一个 branch 比较方便?

所以在实践 CI / CD 的过程中,你会发现 feature branch 是一件非常矛盾的事情。持续集成在鼓励更加频繁的代码集成和交互,让冲突越早解决越好。feature branch的代码隔离策略却在尽可能推迟代码的集成。延迟集成所带来的恶果在软件开发的历史上已经出现过很多次了,每个团队自己写自己的代码是挺 high,到最后不同团队进行联调集成的时候就傻眼了,经常出现写两个月代码,花一个月时间集成的情况,质量还无法保证。

更适合 CI / CD 实践的 Git workflow

除了 Gitflow 和 Github flow 之外,市面上主流的 Git workflow 还有 Gitlab flow。在 Gitlab flow 规范中,有 master,pre-production 和 production 三个长期分支,能够很好地对应上 CI / CD 中的开发环境、测试环境和生产环境。而且代码合并遵循 upstream first 原则,也就是确保代码被充分测试过,才会从上游分支合并到下游分支。
Developer 将代码提交到 master branch 上进行持续集成,如果 master branch 通过自动测试,则将新增代码 merge 到下游分支,逐层递进。这就可以保证 production branch 上的代码总是处于可用状态。使用 production branch 上的代码对外发布,并且打上 tag,当我们线上发生故障的时候,就可以利用 production branch 上的代码进行回滚。


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

推荐阅读更多精彩内容

  • 原文推荐: A successful Git branching model 这个文章讲的是Git分支模型的原理及...
    SonyaBaby阅读 1,492评论 0 0
  • 多种多样的工作流使得在项目中实施Git时变得难以选择。这份教程提供了一个出发点,调查企业团队最常见的Git工作流。...
    JSErik阅读 4,369评论 2 8
  • 在分享开始前... Hello, World! I am Tristan. (特里斯谭) 喜欢和优秀的人做挑战的事...
    特里斯谭阅读 6,316评论 2 51
  • 最近因为被迫要收拾家中的全部物品,只留下一小部分,我面临人生前所未有的判断难题。 起初,我给自己定的计划是,今天小...
    教在美国阅读 2,581评论 18 30
  • 人的一生,总会用心的经营过一份份情感,友情、爱情、亲情。对于这些情感你又是如何对待或看待的呢?我,是一个外表冷...
    雾夜忧魂阅读 459评论 3 17