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


支持 monorepo 。 不同方向不同人参与的项目 , 可能会共用一个仓库 , 方便复用代码和基础设施 。 所以仓库中不同项目可能有不一样的上线节奏和上线需求 。
鼓励持续集成(CI) , 集成不等同于部署 , 发 MR 集成代码的时候不用有压力 , 不会在不知情的情况下被上线 。 也鼓励持续部署(CD) , 部署不等于发布 , 不能发布的代码 , 在正式上线前有机会关掉 。
上线过程必须是固定、重复、能统一改进 , 能逐步增加自动化的 , 不能每次上线时重新、临时规划或修改上线方法 , 增加负担和成本 。
CI 是 CD 的前提 , 没经过 CI 的修改不能进入 CD 环节 。
不能有任何修改不经过 staging(预发布 , 尽可能跟线上一致)测试 , 直接上线 。
CI 和 CD 的历史记录要绝对可靠、可追溯 , 只能增加 , 不能减少和修改 。
尽可能减少手动操作环节 , 避免在特定的个人机器上做上线操作 。 三主干实践亿级 App
App 发版应该是目前为止最为复杂的分支管理场景了 。 客户端安装包一旦下发到渠道被用户下载 , 如果无法通过热更新修复 , 将严重影响 App 用户留存 。App 发版具有更规范的发版规律 , Feature Toggle 必不可少 , 当我们觉得 CR , CI/CD 麻烦时 , 对比开发上线一个影响上亿用户的 App feature , 是不是感觉做 Web 的 CI/CD 简单多了?

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

总结
本文尽可能从多角度阐述 Git 工作流的使用姿势 , 希望对大家有帮助 。 Git 工作流是为了上线有保障 , 上线过程中充分测试必不可少 , 良好的 Git 工作流能保障测试是渐进且可靠的 。 环境管理和 Git 工作流结合在头条内部也形成了很多规范 , 包括「环境部署」、「流量调度」、「连通性测试」等使用规范;「限定场景允许」、「暂时场景允许」、「限定流程允许」等环境约束规范 。 再结合 CI/CD , 我们就可以全链路保障业务的快速迭代、安全上线 。 参考资料
Trunk-based Development vs. Git Flow (https://www.toptal.com/software/trunk-based-development-git-flow)
Please stop recommending Git Flow!(https://georgestocker.com/2020/03/04/please-stop-recommending-git-flow/)
Understanding the GitHub flow(https://guides.github.com/introduction/flow/index.html)
Introduction to GitLab Flow(https://docs.gitlab.com/ee/topics/gitlab_flow.html)
https://cn.trunkbaseddevelopment.com
在阿里 , 我们如何管理代码分支? (https://developer.aliyun.com/article/573549)
谷歌的代码管理 (http://www.ruanyifeng.com/blog/2016/07/google-monolithic-source-repository.html)
欢迎关注「字节前端」
简历投递联系邮箱「tech@bytedance.com」


推荐阅读