Git分支模型与开发部署流水线

分支模型

We firmly believe that long-lived version-control branches harm valuable engineering practices such as continuous integration, and this belief underlies our dislike for Gitflow.
—— ThoughtWorks Technology Radar 2015 Nov

Gitflow 是由 Vincent Driessen 在2010年提出的基于 Git 的软件开发工作流,但与持续集成(Continuous Integration,CI)的实践有不少冲突的地方,在团队开发中不推荐采用,具体分析可以参见 Gitflow有害论

Git Flow

我们采用单主干开发的 Git 分支模型(Trunk Based Development),所有的开发工作均在 master 分支上进行,同时利用 CI 流水线进行持续集成,保证 master 中的代码随时都可以发布到生产。除了利用 master 进行开发,我们利用 release 分支进行发布的跟踪。

Trunk Based Development

持续发布流水线

除了持续集成(CI),项目还涉及自动化测试与持续部署(Continuous Deployment,CD) 因此,我们会有开发环境与测试环境,而测试环境又可以分为 SIT 测试、UAT 测试与压力测试等等。那么代码应该在什么时候发布,发布什么样的版本,这些版本又如何追踪,发现 bug 之后如何处理呢?

Trunk Based Development with Release

我们的流水线模型如上图所示,采用单主干开发策略。

  1. 所有的开发人员都在 master 分支提交代码,每次提交都触发 CI 构建,并在 CI 环境执行自动化测试,测试通过之后可以由测试人员发布到 SIT 环境并进行测试。

  2. 发布人员根据项目进度,选取合适并通过 SIT 测试的 commit 节点,打上 tag 作为 SNAPSHOT 版本,并合并到 release 分支,在release分支中采用 RC (Release Candidate) 标记版本。

  3. 将 RC 版本发布到 UAT 环境进行测试,如果测试通过则发布到生产环境并将该版本标记为 release 版本,如果测试发现 bug:

    • 将该 RC 版本标记为不可靠。
    • 回滚到上一个可靠版本。
  • 在 master 分支进行修复,并 cherry pick 到 release 分支,并标记新的 RC 版本号。
  • 如果 master 分支有新的 commit 提交而不能重现 bug,则从原始 commit 节点拉取 hot-fix 分支,bug 修复完成后,cherry pick 到 release 分支,标记新的 RC 版本号,并将 hot-fix 上的修改 merge 到 master。

在 release 分支选择 RC 标记版本,主要理由如下:

  1. 假如在 release 分支采用 SNAPSHOT 版本并部署到 UAT 环境,由于 SNAPSHOT 可以不断被覆盖,我们无法回滚到前几次 hot fix 产生的 SNAPSHOT 版本。
  2. 加入使用 release 版本:由于每次 hot fix 产生一个新的 release 版本,但这个版本并没有通过 UAT 测试验证,如果验证失败,就属于不可靠版本,与 release 版本的原始语义相违背。
  3. 选用 RC 版本,每次 hot fix 都产生一个新的 RC 版本,部署到 UAT 发现问题之后,可以快速回滚到上个 RC 版本或者 release 版本;如果验证该 RC 版本不可靠,可以立即对其做不可靠标记。我们只对可靠的 RC 版本标记为 release 并部署到生产环境。

在 master 修复 bug 之后,选择 cherry-pick 而非 merge 的理由如下:

对于团队而言,发布人员在合并 master 到 release 之后,开发人员可以继续开发新的feature,这个时候 release 和 master 是有区别的。bug 修复完成之后,直接 merge 到 release 分支有可能在发布版本引入还没有测试的新的 feature,甚至是还没有完成的 feature,这是我们不想看到的。因此,我们只需要 cherry pick 修复 bug 的有关 commit 到 release 分支。

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

推荐阅读更多精彩内容

  • 原文推荐: A successful Git branching model 这个文章讲的是Git分支模型的原理及...
    SonyaBaby阅读 1,503评论 0 0
  • Git 仓库申请流程 1. 开发主管向Git 管理员提交Git 仓库申请【邮件:发送给Git 管理员,抄送给项目经...
    骚包霸天虎阅读 2,078评论 0 0
  •  git因为有分支的存在,才构成了多工作流的特色。在多人协作的项目开发中,分支很多,虽然各自在分支上互不干扰,但是...
    __cbc阅读 1,456评论 0 2
  • 简述 前阵子,掌上生活iOS客户端代码进行了Git迁移。踩了很多坑之后,终于在Git上成功的发布了一个版本,而且还...
    _木木_阅读 1,716评论 0 0
  • 第一节你知道自己的未来是什么样子的吗 复利曲线的样子。 在这个过程中,需要两件法宝:笃信+耐心 一定要通过学习以及...
    Gloria_2015阅读 163评论 0 0