1:安装git
2:php同步脚本
3:配置webhook
一:安装git服务
// 查看是否安装了git
git --version
// 如果未安装,执行安装命令
yum install git
2:编写同步PHP脚本
<?php
//理发店钩子
error_reporting(1);
set_time_limit(0);
// 部署目录
$target = '/www/wwwroot/haircutapp';
// 部署密钥
$password = '123456';
// 部署分支
$branch = 'master';
// git 地址
$giturl = "https://gitee.com/xxx/xxss.git";
if(!file_exists($target)){
// 如果目录不存在 就clone 一个
$basedir = dirname($target) ;
$cmd = "(cd $basedir && git clone $giturl ) 2>&1 ";
shell_exec($cmd);
chmod($target,0777) ;
}
// token判断
// 分支判断
$arr = file_get_contents('php://input', 'r');
$arr = json_decode($arr, true);
if (JSON_ERROR_NONE !== json_last_error()) {
die("解析json失败");
}
// 验证提交密码是否正确
if (!isset($arr['password']) || $arr['password'] !== $password) {
echo '密码错误';
exit(0);
}
$ref = isset($arr['ref']) ? $arr['ref'] : die("没有分支信息");
$ref = explode('/', $ref);
$ref = array_pop($ref);
if ($branch != $ref) {
die("同步失败:不是分支" . $branch);
}
$cmd = "(cd $target && git pull ) 2>&1 ";
echo shell_exec($cmd);
$res_log = "---------------------------------------------------------------" . PHP_EOL;
$res_log .= PHP_EOL . "pull start ---------------------------------------------" . PHP_EOL;
$res_log .= '------------------------------------------------------------' . PHP_EOL;
$res_log .= '-----------当前时区:' . date_default_timezone_get();
$res_log .= $arr['user_name'] . ' 在' . date('Y-m-d H:i:s') . '向' . $arr['repository']['name'] . '项目的' . $arr['ref'] . '分支push了' . $arr['total_commits_count'] . '个commit:';
$res_log .= '------------------------------------------------------------' . PHP_EOL;
$res_log .= "pull end -----------------------------------------------------" . PHP_EOL;
file_put_contents("/www/wwwroot/webhook.yanghaifeng.top/logs/" . date('Y-m-d', time()) . ".txt", $res_log, FILE_APPEND);//写入日志到log文件中
echo '很棒:'.date('y-m-d H:i:s');
?>
3:如果使用公钥方式,需要配置一下公钥
- 配置公钥
- 首先查看服务器上是否已经存在公钥
id_rsa.pub
文件 - 如果存在,直接复制里面的内容,如果不存在,先生成
// 查看是否由公钥文件
ll ~/.ssh/
// 如果存在公钥,则执行
cat ~/.ssh/id_rsa.pub
// 如果不存在,则重新生成
ssh-keygen -t rsa
4:如果使用密码的方式,需要再码云后端设置一下密码就可以了