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

本文介绍如何利用Git Hooks实现代码的自动部署,通过设置服务器上的裸仓库及post-update钩子脚本,实现每次push代码后的自动更新,包括项目同步、依赖安装及数据库迁移等。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值