zoukankan      html  css  js  c++  java
  • Gitlab配置webhooks实现自动化部署

    原理介绍

    1. 配置gitlab当push动作的时候,访问服务器上的一个链接比如www.xxxxxx.com/hook.php
    2. hook.php里面写着一行代码,会让服务器git pull相应项目的代码到web目录。
    3. pull结束,代码就在web目录了,我们只要重新访问网站就可以了。
        核心就是push的时候,gitlab会调用服务器上的脚本,服务器上的脚本就会从git重新拉取项目文件。同时还需要加入安全性的设计。
     
    配置ssh秘钥
        首先查看nginx和php的默认执行用户,分别查看对应的文件nginx.conf和php-fpm.conf即可,一般是www用户,以www用户为例。
        修改/etc/passwd文件,使www用户具有可登录权限,如下:
     
       将上图内容修改为:
       
      当自动化部署完成后,要该回到原来的配置,因为www用户默认是不允许登录服务器的。
    按以下步骤操作:
    1. 执行 su www 命令切换为www用户。
    2. 执行 ssh-keygen 命令(有确认项,有的输入yes,没有就回车),将生成的公钥(位置在/home/www目录下 cat /home/www/.ssh/id_rsa.pub),添加到gitlab中的项目

    注意:

    1. 这里一定要是www用户的秘钥!
    2. 进入到项目根目录所在目录,cd /home/wwwroot/  ,更改项目目录web所属用户和用户组,执行命令
      chown -R www:www web   web是你自己的项目文件  
    服务器脚本
        编写hook.sh 内容如下(这是简单版本):
       cd  你自己的项目路径     这个文件可以有多个,看你有几个项目,配合下面的php文件使用
    使用www用户进行测试,执行 bash hook.sh 命令,测试能否进行拉取代码。如果成功,下一步就是通过钩子执行此脚本。
    PHP执行脚本
        php通过exec函数执行脚本代码hook.php。需要调用exec函数,如果发现不成功,有可能php.ini配置中禁用了exec函数,重新开启即可。具体操作可自行百度。
        hook.php:
      
    <?php
    
    //作为接口传输的时候认证的密钥
    $valid_token  = 'shfdksjdakjshdfjknvkja';
    $client_token = $_GET['token'];
    $project      = $_GET['project'];   //多个项目
    $client_ip    = $_SERVER['REMOTE_ADDR'];
    
    $fs = fopen('./auto_hook.log', 'a');
    fwrite($fs, '============================开始==============================='.PHP_EOL);
    fwrite($fs, '时间:'.date("Y-m-d H:i:s", time()).',请求来自:['. $client_ip.']'.PHP_EOL);
    
    if ($client_token !== $valid_token) {
    	fwrite($fs, "TKOEN 错误-- [{$client_token}]".PHP_EOL);
    	fclose($fs);
    	exit(0);
    }
    
    $json = file_get_contents("php://input");
    $data = json_decode($json, true);
    fwrite($fs, 'Data: '.print_r($data, true).PHP_EOL);
    
    //这里也可以执行自定义的脚本文件updata.sh,脚本内容可以自定义
    switch ($project) {
    	case 'web':
    		$res = exec("/home/www/hook.sh", $result);
    		break;
    }
    
    fwrite($fs, 'Data:'. print_r($result, true).PHP_EOL);
    fwrite($fs, '============================结束==============================='.PHP_EOL);
    fclose($fs);
    var_dump($result);
    

      接下来通过浏览器访问测试:http://www.xxxxx.com/webhook.php?token=shfdksjdakjshdfjknvkja&project=web

    访问后,如果能返回git执行的信息,就表示成功了。接下来就是配置gitlab的webhooks。
    为支持多个项目 配置了project参数,可以部署多个项目。只需要在gitlab钩子中配置时,使用不同的project参数。
    触发事件自己选择
    部署完成后,修改/etc/passwd文件,将www用户修改为nologin即可!
  • 相关阅读:
    设计模式 23
    生活杂谈
    设计模式经典书籍
    ABP 样板开发框架系列
    关键字
    vs 2015
    优秀文章推荐
    Parallel 并行编程
    CSRF
    sql性能优化
  • 原文地址:https://www.cnblogs.com/zheart/p/14298745.html
Copyright © 2011-2022 走看看