• 搭建基于码云gitee平台代码自动部署


      很多大公司的系统新功能发布部署使用jenkins服务,个人小项目使用jenkins太重,jenkins对机器配置要求较高,我这服务器1G没法用。

      不使用jenkins的话,码云平台gitee上可以使用提供的webhook来触发系统部署构建。

       首先需要注册一个gitee码云平台的账号,新建仓库后,仓库的“管理” - “webHooks” 点击新建。

       URL输入更新脚本地址,比如我这里是http://deploy.xxx.com/easyswoole_secret.php,可以选择WebHook密码或者签名密钥。

       使用WebHook密码可能导致请求被截获泄漏,这里采用签名密钥。

    构建脚本内容:

    <?php
    /**
     * 自动更新钩子
     * 修改密钥及项目路径即可使用
     **/
    
    //以流的方式读取
    $requestBody = file_get_contents("php://input");
    
    if (empty($requestBody)) {
        die('send fail');
    }
    
    //file_put_contents('./requestBody.log', $requestBody);
    
    $requestBody = json_decode($requestBody,true);
    
    //加密字符串
    $secret_post = $requestBody['sign'];
    
    //时间戳参数,单位毫秒级
    $time_stamp = $requestBody['timestamp'];
    
    //在WebHooks签名密钥一栏填写的密钥信息
    $access_token = 'xxx';
    
    //加密文档
    //https://gitee.com/help/articles/4290
    $secret_join = $time_stamp . "
    " . $access_token;
    
    //file_put_contents('./join.log', $secret_join);
    
    $base64 = base64_encode(hash_hmac('sha256', $secret_join, $access_token, true));
    
    //file_put_contents('./base64.log' , $base64);
    
    //看推送的是哪个分支就构建哪个分支
    //如有需要可以更改规则,比如屏蔽某些分支不构建
    $branch = str_replace('refs/heads/', '', $requestBody['ref']);
    
    $requestBody = null;
    
    // 打开网站目录下的hooks.log文件 需要在服务器上创建 并给写权限
    $fs = fopen('/opt/log/deploy_webhooks_pull.log', 'a');
    
    fwrite($fs, date('Y-m-d H:i:s') . ' ================ Update Start ===============' . PHP_EOL);// 请求ip
    $client_ip = $_SERVER['REMOTE_ADDR'];
    
    // 把请求的IP和时间写进log
    fwrite($fs, date('Y-m-d H:i:s') . ' Request on [' . date("Y-m-d H:i:s") . '] from [' . $client_ip . ']' . PHP_EOL);
    
    // 验证token 有错就写进日志并退出
    if ($base64 !== $secret_post) {
        fwrite($fs, date('Y-m-d H:i:s') . " Invalid token [{$client_token}]" . PHP_EOL);
    
        $fs and fclose($fs);
    
        header("HTTP/1.1 404 Not Found");
    
        header("Status: 404 Not Found");
    
        exit;
    }
    
    // 如果有需要 可以打开下面,把传送过来的信息写进log 可用于调试,测试成功后注释即可
    // fwrite($fs, 'Data: ' . print_r($data, true) . PHP_EOL);
    
    // 执行shell命令并把返回信息写进日志
    $output = shell_exec('cd /opt/www/kunswoole/; git pull origin ' . $branch . ' 2<&1; chown -R www:www /opt/www/kunswoole/*;');
    fwrite($fs, date('Y-m-d H:i:s') . 'Info:' . print_r($output, true) . PHP_EOL);
    
    fwrite($fs, date('Y-m-d H:i:s') .  '================ Update End ===============' . PHP_EOL . PHP_EOL);
    
    $fs and fclose($fs);
    
    // 调试时打开
    // echo json_encode($output);

    首次构建前需要/opt/www目录下使用git clone命令将仓库代码克隆到服务器上。

    本地mac修改代码提交后,可在gitee上看到构建记录:

  • 相关阅读:
    用户空间与内核空间,进程上下文与中断上下文[总结]【转】
    select、poll、epoll之间的区别总结[整理]【转】
    v4l2驱动文档之——streaming IO【转】
    Linux网络编程一步一步学【转】
    V4L2驱动的移植与应用(二+三)【转】
    【PHP面向对象(OOP)编程入门教程】20.PHP5接口技术(interface)
    【PHP面向对象(OOP)编程入门教程】19.抽象方法和抽象类(abstract)
    【PHP面向对象(OOP)编程入门教程】18.__call()处理调用错误
    【PHP面向对象(OOP)编程入门教程】17.克隆对象__clone()方法
    【PHP面向对象(OOP)编程入门教程】16.__toString()方法
  • 原文地址:https://www.cnblogs.com/wscsq789/p/13139031.html
Copyright © 2020-2023  润新知