使用GIT自动化部署
配置说明
项目分为测试版和线上版,
仓库存放在gitee上新建的私有仓库;
建2个分支,master对应测试版,online分支对应线上版;
online分支只有管理员有PR和push权限;
在服务器初始化git仓库
命令全部使用www身份来执行!!!切记不要用root执行,否则钩子拉取时会出问题!
sudo -u www git init
sudo -u www ssh-keygen -t rsa -C "xxx"
cat /home/www/.ssh/id_rsa.pub //此处的公钥配置到gitee仓库里面
sudo -u www ssh -T git@gitee.com //公钥配置后,检测是否可以登陆
sudo -u www git config --global user.email "xx@xx.com"
sudo -u www git config --global user.name "xxx"
sudo -u www git remote add origin git@gitee.com:xxx/xxx.git
sudo -u www git stash //如果不是空仓库,需要执行暂存
sudo -u www git pull origin master:master
sudo -u www git pull origin online:online //如果其他分支
sudo -u www git checkout online //切换分支
配置web_hook钩子
在gitee里面添加请求网址,例如:http://xxx.com/web_hook.php,设置密码
web_hook.php代码如下
<?php
/**
* 自动更新钩子
* 修改验证码及项目路径即可使用,
* 修改项如下:
* 1、您的自定义密码
* 2、/home/wwwroot/app您的项目A路径
**/
// 接收码云POST过来的信息
$json = file_get_contents("php://input");
$data = json_decode($json, true);
// 打开网站目录下的hooks.log文件 需要在服务器上创建 并给写权限
$fs = fopen('webhooks_pull.log', 'a');
fwrite($fs, '================ Update Start ===============' . PHP_EOL . PHP_EOL);
// 自定义密码 用于验证 与码云后台设置保持一致
$access_token = 'xxxx';
$client_token = $data['password'];
// 请求ip
$client_ip = $_SERVER['REMOTE_ADDR'];
// 把请求的IP和时间写进log
fwrite($fs, 'Request on [' . date("Y-m-d H:i:s") . '] from [' . $client_ip . ']' . PHP_EOL);
// 验证token 有错就写进日志并退出
if ($client_token !== $access_token) {
echo "error 403";
fwrite($fs, "Invalid token [{$client_token}]" . PHP_EOL);
$fs and fclose($fs);
exit(0);
}
// 如果有需要 可以打开下面,把传送过来的信息写进log 可用于调试,测试成功后注释即可
//fwrite($fs, 'Data: ' . print_r($data, true) . PHP_EOL);
// 执行shell命令并把返回信息写进日志
exec('cd /www/wwwroot/xxx; git pull 2<&1; chown -R -f www:www /www/wwwroot/xxx/*;', $output);
fwrite($fs, 'Info:' . print_r($output, true) . PHP_EOL);
fwrite($fs, PHP_EOL . '================ Update End ===============' . PHP_EOL . PHP_EOL);
$fs and fclose($fs);
// 调试时打开
// echo json_encode($output);
多分支钩子代码如下
<?php
/**
* 自动更新钩子
* 修改验证码及项目路径即可使用,
* 修改项如下:
* 1、您的自定义密码
* 2、/home/wwwroot/app您的项目A路径
**/
// 接收码云POST过来的信息
$json = file_get_contents("php://input");
$data = json_decode($json, true);
$branch = 'online';
// 打开网站目录下的hooks.log文件 需要在服务器上创建 并给写权限
$fs = fopen('webhooks_pull.log', 'a');
fwrite($fs, '================ Update Start ===============' . PHP_EOL . PHP_EOL);
// 自定义密码 用于验证 与码云后台设置保持一致
$access_token = 'xxx';
$client_token = $data['password'];
// 请求ip
$client_ip = $_SERVER['REMOTE_ADDR'];
// 把请求的IP和时间写进log
fwrite($fs, 'Request on [' . date("Y-m-d H:i:s") . '] from [' . $client_ip . ']' . PHP_EOL);
// 验证token 有错就写进日志并退出
if ($client_token !== $access_token) {
echo "error 403";
fwrite($fs, "Invalid token [{$client_token}]" . PHP_EOL);
$fs and fclose($fs);
exit(0);
}
//target_branch
if(isset($data['ref'])){
//push
if($data['ref']!='refs/heads/'.$branch){
echo "error branch";
fwrite($fs, "Invalid branch [{$branch}] push ref ".$data['ref'] . PHP_EOL);
$fs and fclose($fs);
exit(0);
}
}
if(isset($data['target_branch'])){
//pull request
if($data['target_branch']!=$branch){
echo "error pull request branch";
fwrite($fs, "Invalid branch [{$branch}] push target_branch ".$data['target_branch'] . PHP_EOL);
$fs and fclose($fs);
exit(0);
}
}
// 如果有需要 可以打开下面,把传送过来的信息写进log 可用于调试,测试成功后注释即可
//fwrite($fs, 'Data: ' . print_r($data, true) . PHP_EOL);
//exit(0);
// 执行shell命令并把返回信息写进日志
exec('cd /www/wwwroot/xxx; git pull origin online:online 2>&1; chown -R -f www:www /www/wwwroot/xxx/*;', $output);
fwrite($fs, 'Info:' . print_r($output, true) . PHP_EOL);
fwrite($fs, PHP_EOL . '================ Update End ===============' . PHP_EOL . PHP_EOL);
$fs and fclose($fs);
// 调试时打开
// echo json_encode($output);
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »