{大冰}

使用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」版。查看和发表评论请点击:完整版 »