ubuntu Gitlab 利用webhook实现push时项目自动部署

前提:已经安装git

本次服务环境是 lamp apache运行用户是www-data

  1. 在gitlab创建一个普通用户,加入到目标项目里的成员里,只需要有pull权限即可
  2. 在生产服务器上为www-data用户生成 SSH 公钥,路径一般在在apache的根目录,把生成的公钥 id_rsa.pub 复制粘贴到Git服务器上第一步里的普通用户的ssh公钥里
    sudo -u www ssh-keygen
  3. 首次从git服务器上抓取资源用clone,指定目录需要为空:
    sudo -u www-data git clone git@xxx:xxx/xxx.git
    4.先cd到项目根目录,后续再抓取直接pull ; 模拟www-data用户身份执行:
    sudo -u www-data git pull
    5.网站根目录下放置 git-webhook-handler.php 自动部署文件,然后Git服务器的对应项目的 webhooks 配置上该文件的网址(Push events),需启用php的shell_exec函数。
    在这里插入图片描述
    自动部署文件 git-webhook-handler.php 代码如下:
 <?php
    //git webhook 自动部署脚本
    //项目存放物理路径
    $path = "/home/www/ceshi/";
    
    $requestBody = file_get_contents("php://input");
    $token = $_SERVER['HTTP_X_GITLAB_TOKEN'];
    if ($token != "cc17c30cd111c7215fc8f51f8790e0e1") {
        //$res_log .= "token is error".PHP_EOL;
        //file_put_contents("git-webhook-ceshi.txt", date("Y-m-d H:i:s"), FILE_APPEND);//追加写入
        //file_put_contents("git-webhook-ceshi.txt", $res_log, FILE_APPEND);//追加写入
        
         die();
    
    }
    if (empty($requestBody)) {
        die('send fail');
    }
    $content = json_decode($requestBody, true);
    //若是主分支且提交数大于0
    if ($content['ref']=='refs/heads/master' && $content['total_commits_count']>0) {
        $res = shell_exec("cd {$path} && git pull 2>&1");//以www用户运行
        $res_log = '-------------------------'.PHP_EOL;
        $res_log .= $content['user_name'] . ' 在' . date('Y-m-d H:i:s') . '向' . $content['repository']['name'] . '项目的' . $content['ref'] . '分支push了' . $content['total_commits_count'] . '个commit:' . PHP_EOL;
        $res_log .= $res.PHP_EOL;
        file_put_contents("git-webhook-ceshi.txt", $res_log, FILE_APPEND);//追加写入
    }

http://www.piaoyi.org/linux/Gitlab-GitHub-webhook-push-auto-deployment.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值