Git Hook 是 Git 提供的一个钩子,能被特定的事件触发后调用。其实,更通俗的讲,当你设置了 Git Hook 后,只要你的远程仓库收到一次 push 之后,Git Hook 就能帮你执行一次 bash 脚本。
# Pre
# Deploy User
useradd -m web
# SSH 密钥免登录
可以参考https://linsir.org/post/manage-multi-ssh-keys
# Remote Server
mkdir /home/web/blog.git
cd /home/web/blog.git
git init --bare
在 hooks/post-receive 文件中写入以下内容:
#!/bin/sh
#
WEB_DIR=/home/www/deploy-blog
# remove any untracked files and directories
git --work-tree=${WEB_DIR} clean -fd
# force checkout of the latest deploy
git --work-tree=${WEB_DIR} checkout --force
chown www:www -R /home/www/deploy-blog
最后加权限:
chmod +x hooks/post-receive
这里可以新建多个仓库,比生产环境,及测试环境(略).
# Local
git remote add prod deploy_server:/var/web/blog.git
git remote add test deploy_server:/var/web/blog-test.git
git add *
git commit -m 'new post'
# 提交到测试服务器
git push test master
# 提交到生产环境
git push prod master
# 部署
fabric 实现服务重启,数据库备份更新,清除缓存等操作,当然也可以写在 hooks/post-receive 文件中。