Git Hook实现代码自动部署

原理与流程

1
2
3
1、git用户执行git push操作
2、远程仓库发现有用户执行了push操作,就会执行一个脚本post-receive(钩子)
3、在post-receive脚本中,将git仓库的代码拷贝到web站点目录下

创建git仓库

我们可以在自己的服务器上创建git仓库,有两种方式:

1
2
1、git --bare init (裸仓库)
2、git init

两者区别:

1
2
1、普通git仓库的目录结构就和你的代码目录结构一致,只多了.git目录,.git目录中包含了git的一些配置等数据
2、裸仓库只保存了一些配置信息等,肉眼是找不到我们所上传的代码的

执行钩子

git仓库和git裸仓库的钩子所在位置不同:

1
2
1、git普通仓库钩子在.git/hooks/中
2、git裸仓库钩子在hooks/中

钩子要做的事就是将代码从仓库中拷贝到web目录,有两种方式:

1
2
1、在web目录中,将git仓库的代码克隆过来:git clone xxxxx,需要部署代码的时候,执行git pull即可将代码同步过来了。
2、将git仓库中的代码打包,然后解压到web目录下

实现

第一种方式实现:

在上述hooks目录中,创建post-receive文件,内容如下

1
2
3
4
5
6
7
8
#!/bin/sh
DEPLOY_PATH=/home/wwwroot/default/myproject/

unset GIT_DIR ##这条命令很重要
cd $DEPLOY_PATH
git reset --hard
git pull
chown www:www -R $DEPLOY_PATH

第二种方式实现:

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
DEPLOY_PATH=/home/wwwroot/default/myproject/

git archive --format zip --output /path/to/file.zip master ##将master以zip格式打包到指定文件(裸仓库中执行)
mv /path/to/file.zip $DEPLOY_PATH ##将打包好的剪切到web目录
unset GIT_DIR
cd $DEPLOY_PATH
unzip -o file.zip ##解压覆盖
rm -rf file.zip ##删除
chown www:www -R $DEPLOY_PATH

注意:要给钩子脚本执行的权限

博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%