git hooks 实现自动部署

我们 需要两个目录

  1. git 服务器仓库目录 例如: /mnt/test.git
  2. web服务器目录 例如: /data/test

Git Hooks

我们使用的是服务端钩子
post-receive,它位于/mnt/test.git/hooks

当我们在本地执行push命令到git服务器的时候,服务器会自动触发post-receive钩子。

配置post-receive

先在 /data/test目录执行git clone /mnt/test.git
post-receive 脚本的内容为

#!/bin/sh
cd /data/test || exit
unset GIT_DIR #还原环境变量
git pull origin master

保存后赋予可执行权限

chmod +x /mnt/test.git/hooks/post-receive

如果不加 unset GIT_DIR #还原环境变量 就会报出 remote: fatal: not git respository:’.’ 错误

修改web服务器根目录的权限

因为执行拉取的时候是git用户所以要把web服务器根目录( /data/test) 的权限设定为git用户

chown -R git:git /data/test

如果没有做上述操作就会报:

cannot open .git/FETCH_HEAD:Permission denied

这样执行 git push 服务器的git仓库会更新,同时服务器上的网站服务器根目录 /data/test也会自动执行git pull 同步本地的推送

Paste_Image.png

完成!!!

推荐阅读更多精彩内容