技术编程|字节研发设施下的 Git 工作流( 三 )

技术编程|字节研发设施下的 Git 工作流
本文插图

周期发版:双主干
? 周期发版:三主干

技术编程|字节研发设施下的 Git 工作流
本文插图

周期发版:三主干
对比“双主干”和“单主干” ,
有联系:
处于 MR 状态的迭代分支 ≈≈ 研发主干 Dev
单主干 Master ≈≈ 发布主干 Master
也有区别:
单主干的“研发分支”不存在一个固定的测试环境(相较于双主干 dev 分支)
多个 feature 同时发测试环境时需要组合成新分支 , 管理不便
单主干迭代分支在 MR /非 MR 状态下的 CI 流水线有差异单主干实践前端微服务管理平台
字节前端微服务平台属于成熟业务 , 只需做少量 feature/fix 开发 , 在工作流上采用单主干模式 。

技术编程|字节研发设施下的 Git 工作流
本文插图

本地测试后 , 不再经过功能测试环境测试 。 发起 Merge Request , CR 通过合码后 , 上测试基准环境进行测试 , 如发现问题 , 回滚 , 进入下一轮 CR 。
虽然小修小改影响风险小 , 但流程缺乏进入功能测试环境的流程 , 还是存在隐患 , 有可能影响测试环境的业务方使用 , 不是很好的实践 。
单主干只适应于业务规模小 , 成熟度高无大改动的项目 。 但无论业务规模如何 , 执行上线发布流程前 , 都必须先经过线下环境验证 。 双主干实践私有云平台
云平台的 Git 工作流是由繁入简的过程 。 最开始为每个部署环境设定了一个部署分支 。 feature 分支的 commit 点需要和三个环境的部署分支发生 merge , 起不到串联测试的目的 。

技术编程|字节研发设施下的 Git 工作流
本文插图

经过改进后 , 采用标准的 Trunk-based Flow , 仍能满足 online/sandbox/boe 三个环境的部署要求 。

技术编程|字节研发设施下的 Git 工作流
本文插图

云平台参与业务方有上百个(类似阿里云平台) , 虽然图中仅展示了三个环境 , 但实际上 5 大环境的使用都融入了日常开发中 。 某业务中台
某业务中台的 Git 工作流重点阐述了同一个项目多人协作开发时会遇到的问题:
多个 feature 各自独立提测, 临近上线合码时有较多冲突, 可能导致线上 bug
提测前和提测中, 如果 master 更新了, 可能没有及时同步下来, 上线前合入 master 可能会导致冲突或 bug
在流程设计上 , master 作为发布分支 , release-* 为提测分支 , 结合了单主干的便捷(hotfix 直接和 master 交互)和双主干对 feature 的管理
和 Trunk-based Flow 刚好相反 , 主分支是发布分支 , 提测分支是短期的
另一个比较有特点的是 , 在 release 测试过程中 , 发现某个 feature 的 bug ,直接从 release 分支 checkout 出来进行修复 , 并再次合入 release

技术编程|字节研发设施下的 Git 工作流
本文插图

Jupiter 工作流规范
Jupiter 是字节 Web 开发引擎 , 覆盖 Web、组件库、BFF、SSR 等前端开发领域 。 Jupiter 推荐 Trunk-based Flow 类似的 Flow , 并从 CI/CD 角度出发 , 在开发新需求、hotfix 等时机给出 Git 操作建议 。
有重叠人员参与的各项目之间有一致的流程和模式 , 避免增加认知负担 , 避免同一个人在不同项目之间切换时混淆和迷惑 , 也能集中力量做实践和改进 , 共享经验和基础建设 。
上线节奏要灵活 。 既照顾早期的项目 , 也照顾规模化落地的项目 , 考虑到项目在追求不同里程碑时 , 上线频率会有变化 。 所以每周上线一次、每天上线一次(适合人多、稳定性要求高的项目)、一天内分多次上线多个 feature , 都有可能 , 不能限定一个固定的节奏 。 任何人 , 在任何时候都可以发起上线 。


推荐阅读