浅谈Git在Web部署上的运用

近期尝试在服务器上实现Git部署方式,发现还蛮简单,效果也不错,写篇日志记录下。

Git是个好东西自不用说,对比SVN来,它有以下好处:

  1. 分支操作速度快,便于制定开发流程
  2. 每个节点都是完整的代码库,可以不受中心版本库的制约
  3. 使用开源类库框架一样可以随心所欲修改并且进行版本管理

做Web开发的时候,我一直想用Git进行部署。因为之前要么FTP,要么直接在服务器上修改,都会产生各种问题。最近尝试了下,发现还挺简单,记录下来。

明确几个概念

对于分支管理,我青睐“主干+开发”的策略,即一个master分支,保留可稳定运行的代码;开发和debug的时候,建立features和bugs分支,开发完测试完就合并到master。用户可以即时看到产品的演进,就不需要为大版本发布留分支了。从硬件架构来说,有如下几大块

  • 开发机,我的电脑,mac/pc/笔记本,都配好环境,基本和生产机保持一致
  • 测试机,用于测试各种功能、除错的服务器,配置也要和生产机保持一致
  • 生产机,真正用来跑产品的服务器
  • 代码库,用来存放所有产品代码的Git库

其中,开发机、测试机都有完整的分支,因为我们要开发产品,必然涉及分支管理;测试机更是需要能够在几个不同的分支之间切换,甚至能够支持标签化访问分支。而生产机则只保留master分支,也就是最稳定的分支,我们只需要操作它pull新的代码,或者做回滚动作即可。

大体步骤

  1. 接到需求,在开发机上建立分支“fea+问题号”或者“bug+问题号”
  2. 在专有分支进行开发、测试
  3. 每天推送新代码到统一的版本库
  4. 测试机将分支拉过来,进行测试(亦可在代码库添加hook,自动推送)
  5. 测试通过,合并分支到master
  6. 由统一的负责人确定上线时间,登录生产机pull master,完成代码部署
  7. 如果有问题,可以回滚到任何一个版本号

优点和适用范围

这样做,有不少优点:

  1. 保证代码的一致性
  2. 出了问题可以快速回滚
  3. 差异化部署,降低不必要的消耗
  4. 测试的时候,可以快速在不同分支间切换
  5. 所有代码都经过版本管理
  6. 可以通过先fetch再merge的方式,完成版本的快速切换

不过相应的,这种策略只适用于PHP这种部署在服务器端,且不需要编译的语言。另外,图片等二进制素材,也不合适用Git来管理;数据库设置与表结构,也会成为回滚的一个障碍。

不过,毕竟是第一次尝试这样的部署策略,以后再试着总结一些进阶的经验吧,比如:

  1. crontab等计划任务
  2. 二进制素材管理
  3. 数据库表结构管理
  4. 直接访问某个分支

作者: meathill

爱编程,爱旅游,爱吐槽。 今年的目标是完成并运营至少一个 Side Project。 《Electron + Vue 实战开发》龟速创作中……

《浅谈Git在Web部署上的运用》有一个想法

  1. 不过相应的,这种策略只适用于PHP这种部署在服务器端,且不需要编译的语言。另外,图片等二进制素材,也不合适用Git来管理;数据库设置与表结构,也会成为回滚的一个障碍。

欢迎吐槽,请勿装死

This site uses Akismet to reduce spam. Learn how your comment data is processed.