近日,极狐(Gitlab)江狐会·北京站在极狐北京 Demo Center 如期开展。
会上,极狐(Gitlab)高级解决方案架构师杨周带来了《研发管理 DevOps 最佳实践》主题分享,解答了如下备受关注的问题:
Git Flow 过时之后推荐用什么?
Java/VUE 老项目如何落地代码规范?
为什么不该用 CI 做部署,而是 CD、GitOps?
希望给普遍面临这些问题的开发人员尤其是研发负责人、架构师,以及开源和 DevOps 的爱好者们提供一些参考。
以下内容整理自本次分享,enjoy~
Git Flow 是一种诞生于 2010 年的工作流,一篇名为《一个成功的 Git 分支模型》的文章将 Git Flow 推入了开发团队的视野。但在 2020 年,其作者 Vincent Driessen 宣布 Git Flow 不适合「持续交付」。
原因是 Git Flow 适合当年多版本共存的软件,而现代软件大部分只有「最新版」,比如网站打开永远是「最新版」、App 会提示升级而不会维护旧版本。所以 Git Flow 的发布分支(如 release/1.2.0
)和支持分支(如 support/1.x
)不再常用。
那么问题来了:Git Flow 过时了,我们应该用什么呢?
现在业界常用的 Git Workflow 有「简易 Git Flow」、「GitHub Flow」、「GitLab Flow」,个人总结它们的特点如下,大家可应需选用。
main
和 develop
)、几个临时分支(feature/xxx
、bugfix/xxx
、hotfix/xxx
),而舍弃 release
和 support
;
如何做一名优秀的研发工程师?从改善每一行代码开始。若有《程序猿的自我修养》,缩进、换行、大小写、注释,应该大写加粗印在扉页上。😄
图片来源:电影《喜剧之王》
而经验告诉我们,规范写在纸上或者口头传达依然不尽人意,因此,强制自动执行的自动检查代码规范(lint)出圈了。业界知名的代码规范都有配套的 lint,比如 VUE 用 eslint,Java 用 checkstyle。新项目可以直接扫描整个目录,把检查命令放在 CI 里,即可实现在代码合并请求时强制检查规范。比如:
但是,如果老项目的规范报错太多,就需要所有人暂停手头工作,一起清理。这样做的成本太高了,哒咩🙅,所以很多老项目只能越来越差。
新的解决方案是采用增量扫描,即只扫描本次修改的文件。这样,随着时间的推移,只要老项目还在维护,代码就会越来越干净漂亮。
CI (Continuous Integration)和 CD(Continuous Deployment) 都是自动化流水线,但 CD 更适合部署。区别在于:
但 CD 仍然有缺点,即因为它缺少基础设施的完整信息(比如 K8s yaml),在灾难恢复、为客户私有化部署时,无法瞬间创建新环境。
GitOps 解决了 CD 的这个缺点,实现了:
极狐 GitLab 同时支持 CI、CD、GitOps,建议大家使用 CD 和 GitOps 进行部署。