Git实现代码自动部署
这段时间自己一直投身于Web的前后台开发,每每碰到需要部署到测试服务器或是线上服务器时,都是手工进行合并。但是这样会无形中增加我们部署的风险。而我们确实也由于这样的手动部署导致了不少线上问题。今天这里为大家推荐一个方法,就是利用push代码的时机对代码进行自动部署,这样我们每次只要有提交代码就会部署到测试服务器或者线上,方便快捷,降低出错率。
确定自动部署的时机
我们的代码采用的是Git Flow的形式,介于我们在本地开发测试,只有预发布状态才会进行线上部署,所以我们的时机就选择当master代码接收到push动作时触发。Git本身给我们提供了很多hook脚本来帮助我们在git的各个阶段做一些自定义的工作,由于我们是为了捕捉Git的push操作,所以git hook当然是我们的不二人选
git hooks是什么
git hooks==>钩子,在被特定的事件(certain points)触发后被调用。详细说明推荐大家参看git 官方给出的说明文档 git hooks 这里我们主要应用的是post-receive 这个hook脚本
这个hook脚本是服务端的hook,我们可以在git仓库的对应路径repositories/xxx.git/hooks中找到。初次进入时,我们可能会看到如下形式的目录结构 我们只需要将sample后缀去除,该hook就可正常工作
如何使用git hooks
根据git官方文档描述,我们需要的hook为post-receive,所以我们只需要将自己的事件添加至该文件即可.这里我们加入如下脚本
就是这么简单,这样每次当我们push代码到远程仓库时都会触发/web/git_hooks/xxx/post-receive脚本的执行
如何完成自动部署动作
我这里是将自动部署的动作全部放在了/web/git_hooks/xxx/post-receive脚本中了。其实接下来的工作就是shell脚本部分的工作了
到此我们已经完成了自动部署的所有流程工作,当然在部署过程中我们可能还会碰到一些问题,在文章的最后我会列举一些注意事项供大家参考
注意事项
- git用户必须有部署目录的写权限
由于git账号需要完成将目标代码clone至部署目录,所以必须拥有该目录的写权限。由于是代码部署目录,一般给777都行 - git用户必须有对代码仓库的访问权限
- git用户必须要有对部署脚本的执行权限