git hook自动发布代码
前一阵子小马在深入学习CI、CD,几乎吐血。整理了一下最实用的一步基本功,git hook发布代码。
一、什么是git钩子
这点git和svn一样,都具备hook功能,使用也大相径庭,在特定的重要动作发生时触发自定义脚本。 有两组这样的钩子:客户端的和服务器端的。客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。
二、如何开启一个钩子

可以在钩子里写py脚本等自由实现各种git操作时需要做的动作。例如还可以根据tag版本来发布代码到不同的环境。
三、利用钩子实现发布代码
1、服务器端:首先在服务器端创建一个目录git-room,在该目录下创建裸版本库,比如git init -bare webroot.git。
2、服务器端:一鼓作气,在webroot该目录下找到hook目录,vim post-receive代开文件编辑钩子生效脚本,比如:
#!/bin/bash
git --work-tree=/home/website/webroot checkout -f
这里注意使用git init -bare而不是git init的区别,小马觉得当然也可以git init,但就是少了对目录的git操作限制,就不是很合理。--work-tree=/home/website/webroot 假定是我们指定的web站点目录。

2、服务器端:创建一个web项目目录/home/website/webroot,在这个目录下克隆我们刚刚创建的远程版本库代码, git clone ssh://root@xxx.xxx/usr/local/git-room/webroot.git。
3、本地工作区:此时,在本地版本库工作区里开发,然后使用git push指令推送到远程裸版本库,钩子会post-receive自动生效,将文件检出到--work-tree目录里,即代码一经提交就会自动同步到web项目目录/home/website/webroot下。
OK,看起来似乎很简单。可拉倒吧,这就是一个示例,实际场景考虑的因素还有很多,比如文件授权等等...

Scrum敏捷开发:Git版本管理流程及规范 参考文章。



参考文章: