技术编程|字节研发设施下的 Git 工作流( 二 )
一旦发现 release 分支有 hotfix 需求 , 则先在 trunk 分支上进行 fix 开发 , 测试完成后 , cherry-pick 到 release-_ 分支 , 确保修复代码即在 release-_ 中上线 , 又能被下一个 release 周期包含 。
本文插图
图片来源:https://paulhammant.com/2013/04/05/what-is-trunk-based-development/Aone Flow
按阿里云开发者社区描述:Aone Flow「基础玩法是将每条发布分支与具体的环境相对应 , 比如 release/test 分支对应部署测试环境 , release/prod 分支对应线上正式环境」 , 这种发布方式可保证每个 feature 都被测试 , 但不能保证 release/test CI 通过的 feature , 能在 release/prod 环境也通过(feature pick 组合不同) 。
「进阶点的玩法是将一个发布分支对应多个环境 , 比如把灰度发布和正式发布串在一起 , 中间加上人工验收的步骤」 。 实质是将基础玩法中的“release/test” , “release/prod” 改成 “release/combine-feature” , 固定了 feature pick 组合 , 保证 features 在各个环境测试的一致性 。
Aone Flow 的 pick 模式 , 适合复杂仓库大团队持续上线 , 避免了 Trunk-based Flow 引入未完成 feature 的问题 。 但似乎不适合周期发版的要求 。 一个发版周期内会创建多个 feature, 上一个发版周期可能遗留若干 feature , 随着时间推移 , feature 数越来越多 , 最终发版人在 pick feature 过程中疯掉 。
本文插图
图片来源:https://developer.aliyun.com/article/573549公司实践
字节跳动的 Web 服务都跑在私有云 CE (Compute Engine) 中 , 部署产物则由统一的代码编译发布和版本管理平台分发 , 每个构建产物都有一个 AR (Artifact Repository) 管理 。 多环境部署现状服务端视角
服务端微服务跑在 CE 上 , 代码编译由 AR 完成 , CE 和 AR 是 1:N 的关系 , 一个应用的运行依赖多个 AR , 在进行环境管理时 , 需要以 CE 为纬度来区分 。从 CE 视角来看 , 公司有 5 类环境(以国内产品为例):
本文插图
通过 headers -H 'x-env-tag:{env}' 将流量导向不同环境 , 满足“开发测试”、“QA 测试”、“预发测试”、“小流量测试”、“全量上线” 各阶段的测试需求 。
CE 测试环境服务示例:
本文插图
前端视角
前端和服务端有差异 , 一个 URL path 访问的资源通常由一个 AR 产出 , URL paths 和 AR 是 N:1 关系 , 所以前端部署以 AR 版本来区分环境:
本文插图
前端部署可为测试环境和产品预览环境生成独立的域名进行测试 , 也可通过设定 headers -H 'x-env-tag:{env}' 进行环境导流 。 团队实践的 Git 工作流
结合前后端的环境现状 , 可整理三类研发流程:
功能测试流程(测试环境)
QA 提测流程(测试环境)
上线发布流程(测试、预发、灰度、线上环境)
公司内目前有三种 Git 工作流与之对应:
? 小步快跑:单主干
本文插图
小步快跑:单主干
? 周期发版:双主干
推荐阅读
- 行业互联网|华为 | 车载以太网物理层及TSN发展现状 与技术趋势
- 技术编程|什么是Plesk虚拟主机控制面板?
- 电池技术|法国发明出世界最快的电极:可将锂电池的密度提高3倍
- 技术编程|人工智能在大视频运维中如何实现CDN硬盘故障预测?
- 电池技术|关于惠州赣锋建设高端聚合物锂电池研发及生产基地建设,赣锋锂业要干大事
- |加速冲刺世界级技术领先地位,大族机器人获1.65亿元A轮融资
- 解码器|苹果 ProRes 视频编解码器获 2020 技术工程艾美奖
- 数据|徐叶润:另类数据技术是驱动资管科技的核心
- 中年|《经济学人》封面文章解析蚂蚁集团:数字技术的崛起代表了金融的未来
- 行业互联网|北科院轻工所技术入选中关村论坛技术交易大会“产业创新领先技术百强项目榜单”