利用Git Hooks简单部署、更新Web应用

自己写的网站,每次push代码后都要ssh进入服务器手动同步代码,不喜欢这样的重复劳动,索性使用git hooks来自动完成代码同步。

1. 创建仓库

/home/yourname/repos/目录下,运行git init --bare test.git,在服务器端初始化一个远程的Git裸仓库。裸仓库里只有git索引,不包含工作目录。
通常来说,在Linux里Web项目是放在/var/www目录之下,我们在这目录下clone上面建立的仓库。

cd /var/www
git clone /home/yourname/repos/project.git

2. 添加钩子

在裸仓库中Git钩子存放于,hooks目录,如果是普通的git文件夹,则存放于.git/hooks目录内,每个Git仓库都会这个文件夹,里面放置一些实例脚本,所有的实例脚本都是shell脚本,只要是正确命名的可执行脚本都能使用,Ruby、Python或其他语言也是可行的。
hooks目录内默认包含如下文件。去掉文件后面的.example即可使用,别忘了chmod +x添加可执行权限。

➜  hooks git:(master) ls
applypatch-msg.sample     pre-commit.sample         prepare-commit-msg.sample
commit-msg.sample         pre-push.sample           update.sample
post-update.sample        pre-rebase.sample
pre-applypatch.sample     pre-receive.sample

文件名已经清楚地表述了每个钩子的作用。我们想做的是仓库被push后自动部署,所以要用到的是post-update钩子,修改的钩子是在/home/yourname/repos/project.git仓库里的钩子,不要修改到/var/www/project里了

3. 修改钩子

先用cp post-update.sample post-update复制一个新文件,再编辑此文件。每一行命令都已添加注释

# 进入项目目录
cd /var/www/project

# 获取仓库里的新提交
git fetch /home/yourname/repos/project.git

# 将代码与仓库同步,抛弃当前所有修改
git clean -f
git reset --hard origin/master

## 以下指令适用于laravel项目,可根据项目自由修改
# 更新依赖包
composer install
npm install
php artisan migrate

# 前端项目按生产环境生成前端文件
npm run production

最后一行命令如果遇到权限问题,则需要将用户添加到www-data中。使用命令usermod -G www-data yourname,并在最后一行添加chgrp www-data . -R

你可能感兴趣的:(利用Git Hooks简单部署、更新Web应用)