Git Web Hooks 的部署
- [Web Hooks 的介绍](#Web Hooks 的介绍)
- [Web Hooks 在Linux中的坑](#Web Hooks 在Linux中的坑)
- [Web Hooks 在Windows Server中的坑](###Web Hooks 在Windows Server中的坑)
Web Hooks 的介绍
Git钩子功能(callback),是帮助用户push了代码后,自动回调一个您设定的http地址。 这是一个通用的解决方案,用户可以自己根据不同的需求,来编写自己的脚本程序(比如发邮件,自动部署等)
Web Hooks 在Linux中的坑
流程大概是这样的:
- 编写含有git pull的Shell脚本;
- 创建http入口文件(我用PHP写的)
- 通过PHP调用Shell脚本进行代码更新
- 在git仓库那里设置git web hooks
我linux上是nginx,以nginx为例子
坑:
git pull需要帐号验证 解决办法:需要添加ssh Key;(添加ssh Key教程自行查找)
PHP 调用 git pull 失败,错误不显出 解决办法 : 使用
exec('git pull 2>&1', $outpur); print_r($output);
打印错误信息。错误提示:Permission denied(明明添加了ssh Key,还提示这个) 原因:因为我的PHP是nginx进程去调用git pull,nginx进程对应的用户是www
www 30016 0.0 1.4 21236 15100 ? S Aug10 0:00 nginx: worker process
好吧,切换到www创建ssh Keysu www
什么?This account is currently not available.
哦,不可用。去改咯。vim /etc/passwd
找到www把/sbin/nologin改成/bin/bash 切换到www用户添加ssh Key ok了。其实方法有很多,以上只是其中一种,例如:可以直接使用已有ssh Key的用户去启动nginx或者可以直接把已有的.ssh文件复制到www用户目录下(前提是知道用户目录在哪).
有时候git pull会出错,完整的shell贴出来参考一下
#!/bin/bash
PATH='/home/www/xxx' USER='www' USERGROUP='www'
echo "Start." cd $PATH git reset --hard origin/master git clean -f git pull git checkout master chown -R $USER:$USERGROUP $PATH echo "Emd."
Web Hooks 在Windows Server中的坑
流程和Linux上差不多,问题还是在git pull上面; 我Windows Server装的是Apache,以apache为例;
坑:
启动apache的用户是System。什么鬼,System的用户目录在哪,然而我不知道,也不会切换成System用户,不知道能不能切换,来个这样的提示。 Could not create directory '/home/SYSTEM/.ssh'. Host key verification failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
#####然后 我去服务那里找出apache对应的服务(如果用集成环境的可能名字不一样,wamp下的叫wampapache),选中->属性->登录->帐户改为已添加ssh Key的用户,保存,重启服务。成功执行git pull。
后面的和linux上的一样了