如果有需求的可以看下我的小工具,用go写的,直接放服务器上运行就行了。
地址:https://github.com/HimiHL/webhook_go
webhook配置
之前就配置过Coding的Webhook,但是由于Linux上的权限问题没有设置成功;下面记录一下我的Webhook配置。
准备钩子文件
该文件,应该把权限给root
chown -R root:root git.sh
git.sh
请为该文件赋予777权限,否则无法执行
#!/bin/bash
WEB_PATH=$1 #这个代表项目所在目录,就是要生产的目录
WEB_USER='www' #用户, Nginx和Apache一般都是这个用户
WEB_USERGROUP='www' #用户组
echo "Start pull" #UI,这个无所谓
cd $WEB_PATH #进入目录
echo "pulling source code .. " #UI
sudo git reset --hard origin/master #回到这个版本
sudo git clean -f #清除文件
sudo git pull #拉文件下来
sudo git checkout master #回到master分支
echo "changing permissions .."
sudo chown -R $WEB_USER:$WEB_USERGROUP $WEB_PATH #防止pull下来过后出现权限问题,
echo "Finished."
hook.php (Coding版本)
$json=json_decode(file_get_contents('php://input'),true); #获取传送过后的数据,并转成JSON
$users = array(
'your token' => array(
'path' => 'your project path',
'name' => '随便写的以便标识项目'
),
);
if(!empty($json['token']) && array_key_exists($json['token'] , $users) !== false)
{
$path = $users[$json['token']]['path'];
if(!is_dir($path)){
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
exit;
}
echo shell_exec('./git.sh "'.$path.'"');
}else{
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
exit;
}
hook.php (GitHub版本) 暂未更新
<?php
$secret = ''; #在GitHub上填写的secret
//获取http 头
$headers = array();
//Apache服务器才支持getallheaders函数
if (!function_exists('getallheaders')) {
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_') {
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
}else
{
$headers = getallheaders();
}
//github发送过来的签名
$hubSignature = $headers['X-Hub-Signature'];
list($algo, $hash) = explode('=', $hubSignature, 2);
// 获取body内容
$payload = file_get_contents('php://input');
// 计算签名
$payloadHash = hash_hmac($algo, $payload, $secret);
$target = "/home/wwwroot/cxzfbAdmin";
// 判断签名是否匹配
if ($hash === $payloadHash) {
//调用shell
echo shell_exec("./git.sh");
}else{
http_response_code(404);//返回404,反正都执行了返回404也无所谓
}
GitHub上添加webhook 配置webhookGitHub中配置Webhook
切记,如果你的网站是免费的https配置,请将这个禁用掉,否则你会后悔不已
Coding中添加webhook 配置webhookCoding中配置Webhook
网友评论