持续集成下的开发分支模型.key

Similar documents
CloudNative应用实践V3

!"# $%& %!"# $%& %!"#$%& %! ( )***%% ) $)! +**+),,* -)+.* )( ) +, +*.*)+..**! )$,*)+$))$!"!#

02 微服务设计原则与生态系统-final.key


入 大 立立 手 口 面 耳 鼻 耳 鼻 子 耳 鼻 生 生 耳 鼻 耳 鼻 耳 鼻 小 手 入 大 一 支 手 入 支 立立 手 入 支 手 入 石 口 口 支 手 支 手 手 支 入 入 入 人 人 人 人 人 田 手 入 耳 鼻 手 入 小 一 支 人 見見 赤 十 耳 鼻 金金 口 手 支

《米开朗琪罗传》

第一章.FIT)

大 綱 最 有 利 標 目 的 及 類 型 最 有 利 標 之 辦 理 方 式 準 用 最 有 利 標 取 最 有 利 標 精 神 最 有 利 標 之 類 型 及 其 相 關 規 定 適 用 最 有 利 標 準 用 最 有 利 標 及 取 最 有 利 標 精 神 作 業 程 序 及 實 務 分 析

<4D F736F F D B0EAA5C1A470BEC7A4CEB0EAA5C1A4A4BEC7B8C9B1CFB1D0BEC7B9EAAC49A4E8AED7>

深圳-GOPS2018-微服务落地反思以及高效落地

Microsoft Word - FPKLSC_21.docx

untitled

Review

的 精 准 帮 扶 持 续 扩 大 有 效 投 入, 实 施 项 目 建 设 四 督 四 保 制 度, 积 极 对 接 国 家 重 大 工 程 包 和 专 项 建 设 基 金, 商 合 杭 高 铁 合 安 高 铁 京 东 方 10.5 代 线 等 一 批 重 大 项 目 开 工 建 设, 合 福 高

2012年海南党建第2期目录.FIT)

习 近 平 总 书 记 2016 两 会 新 语 一 年 一 度 的 两 会 已 经 落 下 帷 幕 会 议 期 间, 习 近 平 总 书 记 谈 改 革 聊 民 生, 在 供 给 侧 改 革 打 赢 脱 贫 攻 坚 战 保 护 生 态 环 境 和 实 现 强 军 目 标 等 多 个 方 面 发 表

标题

老 床 位 1267 张, 五 年 累 计 建 设 养 老 床 位 3394 张 年 初 确 定 的 24 项 重 大 项 目 总 体 进 展 顺 利,9 方 面 区 政 府 实 事 项 目 全 面 完 成 ( 一 ) 区 域 经 济 转 型 升 级 成 效 明 显 现 代 服 务 业 为 主 导

目 录 一 重 要 提 示... 3 二 公 司 主 要 财 务 数 据 和 股 东 变 化... 3 三 重 要 事 项... 6 四 附 录 / 21

Microsoft Word - 澎湖田調報告-昕瑤組.doc


菩提道次第廣論

路 上 沒 說 話, 車 子 被 爸 離 去 後 開 走 了, 沒 什 麼 變, 除 了 一 股 淡 淡 的 香 味, 我 不 太 習 慣, 像 空 氣 中 的 粉 塵, 左 飄 右 飄, 光 中 飛 舞 我 沒 提, 看 車 窗 外, 外 面 不 太 有 趣, 我 只 是 沒 事 幹, 我 們 本

繁 華 國 小 101 學 年 母 親 節 感 恩 惜 福 - 跳 蚤 市 場 暨 科 學 闖 關 遊 戲 親 子 活 動 實 施 計 畫 一 依 據 : 本 校 101 學 年 度 校 務 計 畫 及 行 事 曆 二 目 的 : 1. 培 養 學 生 感 恩 惜 物 知 福 惜 福 的 節 儉 觀

台 中 市 北 屯 區 東 山 里 橫 坑 9 林 志 明 巷 89-5 菜 豆 菜 大 漿 果 菜 豆 菜 大 漿 果 小 漿 果 核 果 柑 桔 無 陳 錦 生 新 竹 市 香 山 區


育儿小故事(四)


python_free

2016 年 地 质 工 程 系 教 学 工 作 安 排 2016 学 年 我 系 将 在 总 结 过 去 工 作 的 基 础 上, 结 合 今 年 学 院 以 抓 质 量 强 内 涵 促 改 革 调 结 构 建 品 牌 细 管 理 重 过 程 为 宗 旨, 以 规 范 管 理 深 化 内 涵 为

<4D F736F F D203136BCADBBD8D2E4D3EBD1D0BEBF2E646F63>

萧山中学课程建设方案.doc


Microsoft Word - 9pinggb_A4.doc

Microsoft Word - 9pinggb_A4-f4.doc

理 论 探 索 事 业 单 位 改 革 的 五 点 思 考 余 路 [ 摘 要 ] 事 业 单 位 改 革 是 中 国 改 革 的 重 要 环 节, 其 影 响 力 和 难 度 不 亚 于 国 有 企 业 改 革 本 文 着 重 围 绕 推 进 事 业 单 位 改 革 应 考 虑 的 五 个 方 面

日 本 位 于 亚 洲 东 部, 太 平 洋 西 北 角, 是 我 国 东 方 的 一 个 岛 国 在 洪 积 世 ( 注 1) 的 大 部 分 时 期 内, 日 本 与 大 陆 相 连 大 约 在 洪 积 世 晚 期 至 冲 积 世 ( 注 2) 初 期, 日 本 各 地 发 生 海 进, 出 现

2深化教育教学改革、创新人才培养模式


Microsoft Word - 9pinggb_let.doc

实 习 上 下 点 表 格 解 释 和 相 关 纪 律 要 求 : 1 表 格 中 所 有 名 词 都 为 简 称, 包 括 医 院 名 称 四 年 级 五 年 级 各 专 业 名 称 等 所 有 时 间 都 为 学 生 装 好 行 李 出 发 时 间, 请 提 前 0 分 钟 将 行 李 运 到

3 基 金 杠 杆 从 分 级 基 金 的 概 念, 我 们 知 道 了 分 级 基 金 的 A 份 额 是 每 年 获 得 固 定 收 益 的 稳 健 份 额,B 份 额 是 具 有 杠 杆 效 应 的 激 进 份 额 分 级 基 金 中 的 杠 杆 一 般 有 三 类 : 份 额 杠 杆 =(A

简报158期.doc

Microsoft Word - 9pingb5_let.doc

退休權益.ppt [相容模式]

Microsoft Word - 1.《國文》試題評析.doc

Ps22Pdf

$%%& ()*+, %&, %-&&%%,. $ %,, $,, & /$- 0(1 $%%& %& 234 %-%, 5&%6&633 & 3%%, 3-%, %643 -%%% :::; 7<9; %-%, 3$%$ :::;

# $# #!# # # # # # # %# # # &# # # # #! "

zt

由社會發展趨勢探討國人睡眠品質

响应式在iOS开发中的应用 For PDF


Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

$$% % $ (%) % %$ $ ( *+,)(-)-./0-1//0- %) %) % - $%2)33%0 $ % ((3./. 3/3 )3 / % (()33(1 % (()3(/ %89856%:;< % (()3 0()0 3 (. <<=330(<</ 3 3. ()

"# $ % & $# $ % & "!! " # $! %(() * )(

Intruduction to the NGINX stream subsystem and OpenResty's support

站在巨人的肩膀上 - 使用Symfony框架开发你的下一个项目.key


HSK(基础)样题

张炅轩-360基础架构之一:插件化漫谈-3.正式演讲.key

人生的滋味

管道建模基础.ppt

IXDC

2009 1

spacex-giac

[Table_MainInfo]

Tangram For GMTC 2017.key

Python 和 人 工智能基 础课程 ( 第 二课 ) 张威, 雷雷萧萧

國立中山大學學位論文典藏.PDF

( ) 16. 老 年 人 因 老 化 現 象 導 致 聽 力 較 差, 溝 通 時 應 以 高 頻 率 音 調 說 話 較 佳 編 碼 :01743 出 處 :0105 來 源 : 課 本 ( ) 17. 老 年 人 因 為 對 甜 鹹 的 味 覺 遲 鈍, 因 此 口 味 會 偏 重 此 時 可

中華民國青溪協會第四屆第三次理監事聯席會議資料

<4D F736F F D20C9CFBAA3CAD0B9FAC3F1BEADBCC3BACDC9E7BBE1B7A2D5B9B5DACAAEC8FDB8F6CEE5C4EAB9E6BBAEB8D9D2AA2E646F6378>

(a)(b) (c)(d) 25% 100% (i) (ii) (iii)(iv) 2

1

API网关在大数据开放中的应用-童剑-v0.3.key

<453A5CC2EDC0F6C5C5B0E6CEC4BCFE5CC3F1B7A8A1A4C9CCB7A8A1A4C3F1CAC2CBDFCBCFB7A8D3EBD6D9B2C3D6C6B6C8D5AACEC4BCFE574F52445CB9D9B7BDD0DEB6A9B5E7D7D3B7FECEF1A3A8A1B6C3F1CBDFBDE2CACDA1B7BACDA1B6C1A2B7A8B7A8A1B7A3A92E646F63>

Hippy-VueConf

ac2017-joeyguo-2.0.key

DDD_in_Microservics_V3

第二章.FIT)

[1] (p.28) / / 3 4 [1] (p.26) [2] (p.171)

不不可能完成的任务从 用户空间窃取内核数据 Yueqiang Cheng, Zhaofeng Chen, Yulong Zhang, Yu Ding, Tao Wei Baidu Security

<4D F736F F F696E74202D A67EB0EAA4A4B2A6B77EA5CDA668A4B8B669B8F4ABC5BEC9C2B2B3F82DA4A4A473A475B0D32E707074>

<4D F736F F F696E74202D20C8EDBCFEBCDCB9B9CAA6D1D0D0DEBDB2D7F92E707074>

NKN: 区块链技术开创 网络 传输领域新机遇

zt

住户表

Qcon北京2018-《唯快不破——高效定位线上 Node.js 应用内存泄漏》-黄一君

<4D F736F F D20A4ADA46AACA1B0CAA5DCA8D2A4BAAE E31312E3236>

构建高效的私有云平台V3

习题课

學 過 程 技 能 中 是 重 要 的 一 環, 雖 然 控 制 變 因 的 課 程 要 進 入 小 學 階 段 才 會 接 觸, 但 我 們 嘗 試 讓 孩 子 在 科 學 遊 戲 中, 察 覺 到 不 同 的 條 件 會 影 響 比 賽 結 果, 進 而 讓 孩 子 把 這 些 條 件 一 一

基于Electron-vue的桌应用实战2

A Community Guide to Environmental Health

July Fittie's 28

; ; ; ()1978~1985 : 1978~1985 : ( ) : % 73.9% 176.4% 87.8% 2.97 [1] 15.5% 1978~ % 14.8%

Bilibili海量监测平台的演进之路

江 苏 瑞 峰 建 设 集 团 有 限 公 有 限 公 江 苏 鲁 工 建 设 工 程 有 限 公 江 苏 溧 鸿 建 设 有 限 公 江 苏 明 创 科 技 园 发 展 有 限 公 公 公 有 限 公 江 苏 茂 盛 建 设 有 限 公 江 苏 鼎 洪 建 工 有 限 公 富 强 机 电 安 装

LC3-分布式事务-姜宁

Transcription:

持续交付下的开发分 支模型 姚 文杰 wjyao@thoughtworks.com 1

概览 - 为什什么我们要谈持续交付和开发分 支模型 - 什什么样的开发分 支模型更更有利利于持续交付 - 主流的三种分 支模型 - 演进 优缺点 工具 - 总结及值得注意的事情

我们为什什么要做持续交付 更更短的交付周期 生产环境部署频率越来越快, 简化 生产部署流程, 且 自动化不不停机部署 更更好的质量量保障 在代码检查, 功能和 非功能验证, 以及部署各 方 面建 立较完善的质量量保障体系, 尤其是 自动化测试集 更更 高绩效的团队 包含业务, 开发测试, 和运维职能在内的 一体化团队, 以产品交付为共同 目标紧密协作, 共同承担责任 更更 高价值的产品 形成特性提出到运营数据 用户反馈验证的实验性交付闭环, 基于实际 用户反馈调整计划和需求

为什什么要谈开发分 支模型 团队代码库持续交付流 水线线上产品 产品代码

为什什么要谈开发分 支模型 代码版本管理理是 CI/CD 的基 石, 分 支模型是代码版本管理理的核 心

什什么样的开发分 支模型更更有利利于持续交付 你们是如何做代码版本管理理的?

理理想与现实 最近写了了 一堆 代码, 千万不不能 和他们冲突呀 我这两天什什么也没做, 一直在解决代码冲突 感觉 又得做 一次回归测 试才能放 心了了 提交代码 触发持续交付流 水线 提交代码 触发持续交付流 水线 DEV 远程代码库 一群 DEV 远程代码库 我应该提交到哪 里里 ( 哪 个分 支 )? 他的代码把 pipeline 又 搞挂了了! 你的代码影响到我 这 一块, 导致我的功能有 问题了了!

什什么样的开发分 支模型更更有利利于持续交付 常 见的问题 遵循的规则 集成的痛 : 1. 不不断出现的代码冲突 2. 解决冲突时的沟通和技术成本 CI/CD 的坏影响 : 3. 破坏流 水线的提交出现频率更更 高 4. 功能互相影响 5. 测试需更更加全 面仔细 ( 尤其是重复的 手 工测试 ) 合作上的坏影响 : 6. 人以及团队之间的互相指责 - 尽早集成, 尽早发现冲突 - 功能之间能够保持 一定隔离 - 尽量量将重复的事情 自动化 - 保证团队成员的每 一次提交都具有原 子性 - 以代码事实为基础, 不不追究个 人

项 目 V1.0 Tech Lead 小张 15 个 人团队 要敏敏捷 : 全功能团队, 站会, 故事卡, 回顾会议 前后端 2 个模块, 有 4 个 大功能和 一些 小功能 要持续交付 :CD 流 水线 30+ 天上线 一次

开发分 支模型

GITFLOW Dev QA QA Dev

GITFLOW 的优点以及 PIPELINE 的设计 分 支之间清晰的职责区分 功能隔离和安全性 持续交付流 水线的设计 每个功能分 支及主分 支 一条 pipeline 发布期间, 需要为 release 分 支创建 一条对应的分 支 用于测试和部署 pipeline 的 生命周期和分 支 一样 长 较多 手动更更改流 水线配置的步骤

项 目 V2.0 Tech Lead 小张 30 个 人团队 要敏敏捷 : 全功能团队, 站会, 故事卡, 回顾会议 前后端 8 个模块, 有 十 几个 大功能和 一些 小功能 要持续交付 :CD 流 水线 15-20 天上线 一次

GITFLOW 的困扰与缺陷 Dev 集成还是 一个 大的 工作量量呀, 好头疼 别 人那么多代码, 不不敢重构呀 好困惑, 什什么时候删分 支, 什什么时候合分 支, 什什么时候删这个 pipeline 我是新 人, 我只知道我当前 工作的这条分 支是 干什什么的 QA PM 每次都要重复测试 一些功能点 测试 工作太密集,QA 都不不够 用了了 这个上线的周期还是有点 长呀 大家抱怨 比较多呀, 是不不是我们的模式有点什什么问题 上线周期太 长 巨 大的 Merge, 不不敢做重构 大量量的回归测试 流 水线数量量与分 支强相关, 维护成本 高 本身 比较复杂, 有 一定学习成本

GITHUB FLOW Version/Release Tag

GITHUB FLOW 的优点与 PIPELINE 的设计 交付周期更更短了了 团队关于代码的交流更更多了了, 共识也逐渐产 生了了 测试的 工作也减少了了

GITHUB FLOW 的困扰与缺点 Dev 他怎么这么不不负责, 看都没看就 merge 这个 PR 他的这次提交简直太多了了, 我今天 一天就 review 这份代码吧 他总是不不同意我的 PR, 是不不是对我有意 见 这个分 支还有没有必要存在? 对 人的依赖很 大 Code Review 周期太 长 很棒, 这减少我的很多重复劳动 无法避免代码和功能冲突, 隔离 QA 性不不够好 很棒! 但是, 这个 交付周期可不不可以再快 一点 PM

改善的 方法 - 特性分 支 Important rule 开关在代码中存在的地 方越少越好 删除不不再被需要的开关, 以免留留下技术债 Side benefits A/B 测试 始终处于可发布状态 Side effect 随着代码的膨胀, 隔离的准确性会进 一步降低, 维护成本变 高

项 目 V3.0 Tech Manager 小张 100+ 个 人,4+ 个团队 要敏敏捷 : 全功能团队, 站会, 故事卡, 回顾会议 前后端 十 几个模块, 有 几 十个 大功能和 一些 小功能 要持续交付 :CD 流 水线 最快 2 天上线 一次

TRUNK BASED DEVELOPMENT

TBD 的优点及 PIPELINE 的设计 容易易理理解, 易易于实施 集成迅速, 快速失败 方便便测试 发布可控

HOW TO GET FROM GIT FLOW TO TRUNK BASED DEVELOPMENT 特性开关 (Feature toggle) 代码审查 (Code review) 抽象分 支 (Branch by abstraction)

BRANCH BY ABSTRACTION "Branch by Abstraction" is a technique for making a large-scale change to a software system in gradual way that allows you to release the system regularly while the change is still in-progress. - Martin Fowler

BRANCH BY ABSTRACTION Original structure

BRANCH BY ABSTRACTION Step 1 Step 2 Step 3 Step 4

CODE REVIEW 结对编程 Pull Request ( 与 Github Flow 结合使 用 ) 定期的团队代码审查 ( 代码审查优先于开发新需求 )

SUMMARY

SUMMARY Name Git Flow Github Flow Trunk Based 集成周期 较 长, 取决于功能的 大 小, 往往会 比较 长 较短, 依赖 reviewer 的 review 时 长 最短, 每次原 子性提交就是 一次集成 代码隔离性 较好, 各个功能之间没有代码和逻辑的牵扯 需要借助 feature toggle 等 工 具保证隔离性 需要借助 feature toggle 等 工具 保证隔离性 对 pipeline 的影响与维护 要么不不健全 要么不不容易易维护 ( 数量量和动作上 ) 运作在主分 支上,PR 上也可 以进 行行简单代码测试 / 检查 运作在主分 支上 对测试的影响较多重复的回归测试集中在主分 支上集中在主分 支上

需要注意的事情 往往存在多种模式混合使 用的场景 小步提交和原 子性是保证所有内容的基础

REFERENCE Gitflow: http://nvie.com/posts/a-successful-git-branching-model/ Github flow: https://guides.github.com/introduction/flow/ Trunk based development: http://trunkbaseddevelopment.com Feature toggles: https://martinfowler.com/articles/feature-toggles.html Branch by abstraction: https://martinfowler.com/bliki/branchbyabstraction.html Code Review: 超越 审 查 评 的代码回顾 : http://insights.thoughtworks.cn/code-review/

THANKS Questions?