用git的webhooks同步更新网站

最近在弄Git Flow + Git Webhooks。

在测试服务器上checkout develop后结合WebHooks实现自动Pull。弄了一个最简单的hooks.php,命令也对(git pull origin develop),为啥就不起作用了呢?

研究了阵,妥妥的权限问题。总结下放上来!

首先要了解git所在位置,并且记住这个目录,接下来要用到。

在项目里创建hooks.php,给个最简单的例子:

接下来就开始GIT与WEB项目的权限折腾之旅…

你要了解你的apache/nginx的用户组是谁,比如说我的是www。

将~/.ssh 整个复制到你的DocumentRoot下。比如说apache默认是htdocs目录,nginx默认是www目录。而我是阿里云ECS,我的根目录是/alidata/www

 

设置.ssh的权限与网站相同。

 

将项目目录权限修改为www,我的项目在/alidata/www/crazyphper/

 

进入项目并初始化git并设置权限。注意,你一定不能漏了这一步!你也许之前在服务器上已经可以通过git pull成功更新代码。但是WebHooks是利用www用户并且基于http去请求的,与你在Bash下的情景不同。所以不要忘了这一步,不然在更新的时候也会提示你要初始化user.name和user.email的。

git eee

为了测试权限是否正常,直接在命令行测试下。

 

如果成功拉取到代码,说明配置成功。

接下来使用浏览器访问 hooks.php 执行更新命令,再回到服务器输入git log看看?

 

 

想要WebHooks运作重点有2个地方

  • ~/.ssh 必须在DocumentRoot下,并且具有与项目目录一致的用户组;因为更新命令是从这里拿ssh的。
  • hooks.php 里所使用的命令需要指定git可执行文件位置,并带上运行用户。

 

补充

如果脚本执行后没有任何报错和输出,你可能只改变了项目目录里所有文件的所有者,却忘了改变项目目录自身的所有者。

 

之后,执行脚本或cd … & git pull origin develop 命令。你可能会遇到error: insufficient permission for adding an object to repository database ./objects错误。

 

原创文章,转载请注明: 转载自konakona

本文链接地址: 用git的webhooks同步更新网站

团哥

继续玩我的CODE,让别人说去。 低调,就是这么自信。

You may also like...