GitHub钩子同步项目代码到网站目录

标签: 网站同步 github钩子 项目部署 webhook 代码同步
121人阅读 评论(0) 收藏 举报
分类:

   对于个人项目而言,有的人项目托管在github上,线上访问地址放在自有服务器上。

    平时自己开发的话,要先push到github,在到自己服务器上pull下来(服务器上装了git),特别麻烦。

    github有个webhook,可以在push之后触发,这样我们就可以利用钩子出发服务器脚本,执行pull命令拉取最新代码了。

blob.png

    

但配置这个钩子,有几点坑需要提一下

    1.我们服务器上的web文件,大多是用户和用户组都是www(我用的一键lnmp脚本配置的lnmp环境),

    所以平时运行那些PHP文件,也都是www用户运行的。那么我们就必须以www用户来吧代码仓库clone下来

    然后以www的身份去生成ssh密钥 

ssh-keygen -t rsa -C "your_email@youremail.com"

        生成之后记得把公钥放在github里的项目配置里。

    2.github的钩子,是在操作成功后header里带着密钥以POST方式请求一个你的URL,所以密钥算法需要你在代码里自己写

blob.png

    这里需要注意下,github里有两种请求方式可供选择,一种是表单式post,我们可以正常用$_POST接收,还有一种是json式post,PHP只能用

php://input去接收了,每次调取url都是带着密钥的,你需要判断密钥对,在pull,否则任何人都可以pull了,下面是github密钥的算法PHP版本

$github_signa = $_SERVER['HTTP_X_HUB_SIGNATURE'];
list($hash_type, $hash_value) = explode('=', $github_signa, 2);
$payload = file_get_contents("php://input");$secret = '你在github配置的secret';$hash = hash_hmac($hash_type,$payload,$secret);if($hash && $hash === $hash_value)
{
	echo '认证成功,开始更新';
    echo exec("./github_pull.sh");

	echo date("Y-m-d H:i:s");
}

    3.由于执行shell命令涉及到 php的exec方法,默认是不开启这个方法的,需要你去php.ini开启它

下图是钩子访问url的时候的返回数据

blob.png


最后 小贴士:为什么我的提交记录不被github记录呢,为什么无法点亮小绿点?

git config --global user.name "your name" //配置用户名和github名称一致 否则不计入提交次数
git config --global user.email "your email" //配置email
查看评论

三分钟教你学Git(十七) - 钩子

Git可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为Client端的钩子和Server端的钩子。Client端钩子被operation触发,比如commit,merge等,Server端钩子...
  • hongchangfirst
  • hongchangfirst
  • 2015-07-02 16:20:16
  • 14310

github的webhooks简记

webhooks简记.
  • YQXLLWY
  • YQXLLWY
  • 2017-08-30 10:20:30
  • 216

钩子在git服务器端的配置

post-receive介绍 post-receive钩子在客户端完成push动作之后被触发,它只执行一次,且不接受参数。它会接收一个标准输入,包含3个参数: SP SP LF SP是空格,L...
  • a420344
  • a420344
  • 2017-12-04 18:49:33
  • 114

git钩子 github在安装liunx 自动化部署 同步提交指定目录

前言:作为一个开发者,希望能够在本地把代码提交到服务器指定目录,同时在本地进行单文件或多文件增删改查,甚至部署之后出bug需要回退到某个版本。另本文作者是php开发者,自动部署我们重启php-fpm和...
  • guoyanga1
  • guoyanga1
  • 2017-08-05 10:39:48
  • 391

git之-git钩子搭建,同步提交到指定目录

通常我们提交网站代码,需要同步代码到站点根目录,这时git的钩子就派上用场了,其实简单理解就是一有推送就触发脚本的git实现 仓库路径为/home/git/testgit 1、首先进入testgi...
  • guoguicheng1314
  • guoguicheng1314
  • 2016-10-28 11:48:59
  • 3039

带你玩转Github

转载地址:https://github.com/xirong/my-git/blob/master/how-to-use-github.md作为一名开发者,Github上面有很多东西值得关注学习,可是...
  • MakeYourChance
  • MakeYourChance
  • 2016-06-03 23:51:03
  • 3102

消息钩子使用总结 .

1、  SetWindowsHookEx 功能:安装(install)消息钩子。 原型: HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINS...
  • deng0zhaotai
  • deng0zhaotai
  • 2011-11-03 17:54:38
  • 288

使用VisualSVN 钩子脚本,同步到web应用目录

废话不说 配置钩子吧首先在apache的www目录下创建一个文件夹,进行checkout,输入需要用户名和密码,将项目取出到该文件夹中。我的是svn文件夹(必不可少) 右键点击 Repositori...
  • a2227232928
  • a2227232928
  • 2016-07-13 14:58:02
  • 422

SVN配置 - 钩子(Hooks)提交后自动同步

首先要详细学SVN的话: SVN BOOK 中文 这本书是一定要先读的。钩子的目的我们面临这样一个问题,就是我们在本地写的代码是个网站,而在修改完之后,提交之后立即在服务器的网址上能看到修改的内容...
  • chenfs1992
  • chenfs1992
  • 2015-10-29 20:39:32
  • 3690

分享一波一些github安全资源

http://www.lofter.com/lpost/1d62028f_10025f91 作者:贝米少年 链接:http://www.lofter.com/lpost/1...
  • wjy397
  • wjy397
  • 2017-06-29 18:44:22
  • 1386
    个人资料
    专栏达人
    等级:
    访问量: 37万+
    积分: 5821
    排名: 5532
    个人中心
    微信公众号
    微信公众号
    博客技术交流群
    想要源码加群,群文件里下载
    私信不能及时回复,进群@群主
    个人网站:www.yunyii.cn
    GitHub:点击进入
    博客专栏