之前我的网站更新得比较频繁,而我是直接在服务器 git pull 来更新代码,所以每次本地开发完提交到远端后还要上服务器上去更新代码,非常麻烦。所以想到是否可以用git的webhook功能来自动拉取代码。
1. Git上配置webhook
如图,填写1、2的信息
2. 在上面配置的URL中处理钩子请求
我的网站是php开发,构建起来比较简单,基本上就两个步骤:
(1) git pull
更新项目代码
(2) 覆盖一些配置文件
处理方式也很简单,获取post请求信息
->签名校验
->执行shell命令
,简略代码如下
1 | // 1. 获取body |
3. 给nginx运行用户拉取代码的权限
假设nginx的运行用户是webuser
(1) 把webuser
用户的ssh-key添加到 Git 中
1 | 用webuser登录 Generating public/private ed25519 key pair |
(2) 给webuser
网站项目的.git文件夹的权限
不然会报错:error: cannot open .git/FETCH_HEAD: Permission denied
1 | cd /webroot && chown -R webuser:webuser .git/ |