使用 Git Hook 实现网站的自动部署
Posted wowchky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Git Hook 实现网站的自动部署相关的知识,希望对你有一定的参考价值。
参考
https://blog.csdn.net/u010837612/article/details/70825225?utm_source=itdadao&utm_medium=referral
https://blog.csdn.net/thriller/article/details/52794581
原理与流程
- git用户执行
git push
操作 - 远程仓库发现有用户执行了push操作,就会执行一个脚本
post-receive
(钩子) - 在
post-receive
脚本中,将git仓库的代码拷贝到web站点目录下
创建git仓库
我们可以在自己的服务器上创建git仓库,有两种方式:
git --bare init
(裸仓库)git init
两者区别:
- 普通git仓库的目录结构就和你的代码目录结构一致,只多了
.git
目录,.git
目录中包含了git的一些配置等数据 - 裸仓库只保存了一些配置信息等,肉眼是找不到我们所上传的代码的
建议使用裸仓库
执行钩子
git仓库和git裸仓库的钩子所在位置不同。
- git普通仓库钩子在
.git/hooks/
中 - git裸仓库钩子在
hooks/
中
钩子要做的事就是将代码从仓库中拷贝到web目录,有两种方式:
- 在web目录中,将git仓库的代码克隆过来:
git clone xxxxx
,需要部署代码的时候,执行git pull即可将代码同步过来了。 - 将git仓库中的代码打包,然后解压到web目录下
实现:
第一种方式实现:
在上述hooks目录中,创建post-receive
文件,内容如下
#!/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
第二种方式实现:
#!/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
最后,为 post-receive 添加可执行权限
chmod +x post-receive
为本地仓库添加 remote 源
这次的本地仓库就真的是你开发机上面的本地了。在你原有 Git 项目里面添加一条新的 remote 源,以后往这个 remote 源里面 push 代码就会自动触发上面那 bash 脚本了。
$ git remote add deploy user@server.ip:/home/user/testRepo
$ git push deploy master
以上是关于使用 Git Hook 实现网站的自动部署的主要内容,如果未能解决你的问题,请参考以下文章