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

   对于个人项目而言,有的人项目托管在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值