Fork me on GitHub

利用Git钩子实现自动部署

当某些重要事件发生时,Git 以调用自定义脚本。有两组挂钩:客户端和服务器端。客户端挂钩用于客户端的操作,如提交和合并。服务器端挂钩用于 Git 服务器端的操作,如接收被推送的提交。

此教程的前提是要求你服务器上必须有个 git 仓库,创建 git 仓库的教程可以参考这篇文章
在CentOS7上搭建自己的Git服务器

以我的 git 仓库 /srv/GitLibrary/blog.git 为例

创建钩子脚本

1
2
3
cd /srv/GitLibrary/blog.git/hooks
# 创建钩子脚本,该脚本会在push完成后运行
vim post-receive

写入两句话

1
2
#!/bin/sh
git --work-tree=/srv/www/blog --git-dir=/srv/GitLibrary/blog.git checkout -f

然后

1
2
3
4
# 赋予可执行权限
chmod +x ./post-receive
# 设置所有者为git用户
chown -R git:git ./post-receive

过程很简单,总结一下:
当客户端 push 完成以后,紧接着远端仓库触发我们定义的钩子脚本,
那句命令会将 /srv/GitLibrary/blog.git 最新版本 checkout 到 /srv/www/blog 中。
你可以自定义这俩目录路径,但是需要注意一点的是该目录必须有写入权限,否则会因为没有权限导致部署失败。
可以使用 chmod 命令赋予权限,以我的文件夹 /srv/www/blog 为例

1
chmod -R 777 /srv/www/blog

OK,大功告成,当客户端 push 完成以后,最新代码就会自动部署到你指定的目录了。🎉🎉🎉