gitlab配置自动同步

如果需要同步到生产环境,请做额外处理,如自动化测试,测试通过再同步。

<?php

$project = trim($_GET[‘project‘]);

if (empty($project)) {
    die(‘project not exist.‘);
}

//网站目录
$www_file=‘/home/wwwroot/‘ . $project . ‘/‘;

//打开网站目录下的hooks.log文件 需要在服务器上创建 并给写权限

$fs = fopen(‘./hooks.log‘, ‘a‘);

fwrite($fs, ‘================ Update Start ===============‘.PHP_EOL.PHP_EOL);

//自定义字串掩码 用于验证

$access_token = ‘s7kjjhh8767laq29KLJK9089883hjjkgfdrrpipoinmw‘;

//接受的ip数组,也就是允许哪些IP访问这个文件 这里是gitlab服务器IP
$access_ip = array(‘8.8.8.8‘, ‘119.23.153.156‘);

//获取请求端的ip和token

$client_token = $_GET[‘token‘];
$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);
    exit(0);
}

//验证ip
if ( !in_array($client_ip, $access_ip))
{
    echo "error 503";
    fwrite($fs, "Invalid ip [{$client_ip}]".PHP_EOL);
    exit(0);
}

//获取请求端发送来的信息,具体格式参见gitlab的文档

$json = file_get_contents(‘php://input‘);
$data = json_decode($json, true);

//如果有需要 可以打开下面,把传送过来的信息写进log
//fwrite($fs, ‘Data: ‘.print_r($data, true).PHP_EOL);

//执行shell命令并把返回信息写进日志

$output=shell_exec("cd $www_file && git checkout dev-master && git pull origin dev-master 2>&1");
fwrite($fs, ‘Info:‘. $output.PHP_EOL);

fwrite($fs,PHP_EOL. ‘================ Update End ===============‘.PHP_EOL.PHP_EOL);

$fs and fclose($fs);

  

实际上gitlab的钩子post的数据包含了更多内容,上面只是做一个简单的同步。

nginx配置

server {
                listen       80;
                server_name  你的ip;
                charset utf-8;
                #access_log  logs/host.access.log  main;
                root /home/wwwroot/hooks;
                index  index.html index.htm index.php ;

                error_log logs/hooks.err.log;
                location / {
                        if (!-e $request_filename) {
                                rewrite ^(.*)$ /index.php?s=$1 last;
                                break;
                        }
                }
                error_page   500 502 503 504  /50x.html;
                location = /50x.html {
                        root   html;
                }

                location ~ [^/]\.php(/|$) {
                   fastcgi_pass   unix:/tmp/php-cgi.sock;
                   fastcgi_index index.php;
                   include fastcgi_params;
                   set $real_script_name $fastcgi_script_name;
                   if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                           set $real_script_name $1;
                           set $path_info $2;
                   }
                   fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                   fastcgi_param SCRIPT_NAME $real_script_name;
                   fastcgi_param PATH_INFO $path_info;
                }
                location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
                        expires 30d;
                        access_log off;
                }
                location ~ .*\.(js|css)?$ {
                        expires 7d;
                        access_log off;
           }
}

  

项目配置

为项目设置自动更新

  • 在gitlab项目设置里面,点击"Web钩子"
  • 链接填写http://ip地址/hooks.php?token=s7kjjhh8767laq29KLJK9089883hjjkgfdrrpipoinmw&project=xiaomi
  • 上面链接的xiaomi是对应服务器的/home/wwwroot/下的xiaomi目录
  • 私密授权码填写: s7kjjhh8767laq29KLJK9089883hjjkgfdrrpipoinmw
  • 触发选项:
    • 勾选 "推送事件"
    • 勾选 "标签推送事件"
    • 其余留空
    • 反选 "开启SSL证书验证"
  • 点击 "增加Web钩子" 按钮
  • 在最下面的Web钩子列表,点击测试,200则没有问题

token和上面php代码里面的一致,project是服务器上的项目目录名,默认路径/home/wwwroot

时间: 2024-08-21 13:02:58

gitlab配置自动同步的相关文章

RubyMain2016.2配置自动同步代码到服务器功能

可以参考rubymain帮助文档:https://www.jetbrains.com/help/ruby/deployment-in-rubymine.html 在rubymain工具的Tools>Deployment>Configuration打开如下界面 我的rails工程代码放在192.168.2.71(我是在vmware上装的redhat系统)的/usr/local/jianbo/demo目录下 里面的重要配置说明一下: 1.创建我就不讲了,按提示来操作(注意:创建的时候要选sftp)

GIT服务器项目部署和自动同步

1.1.初始化Git仓库首先我们选定一个目录作为Git仓库,假定是/home/data/share/share.git,在/home/data/目录下输入命令: $ cd /home/data/ $ mkdir share $ chown git:git share/ $ cd share $ git init --bare share.git Initialized empty Git repository in /home/data/share/share.git/ 以上命令Git创建一个空

Hadoop集群配置心得(低配置集群+自动同步配置)

本文为本人原创,首发到炼数成金 http://f.dataguru.cn/thread-138720-1-1.html. 情况是这样的,我没有一个非常强劲的电脑来搞出一个性能非常NB的服务器集群,相信很多人也跟我差不多,所以现在把我的低配置集群经验拿出来写一下好了. 我的配备:1)五六年前的赛扬单核处理器2G内存笔记本 2)公司给配的ThinkpadT420,i5双核处理器4G内存(可用内存只有3.4G,是因为装的是32位系统的缘故吧...) 就算是用公司配置的电脑,做出来三台1G内存的虚拟机也

Jenkins+Gitlab配置Webhook实现提交自动部署

一.概述 在上一篇文章,链接如下: https://www.cnblogs.com/xiao987334176/p/11434849.html 已经实现了 Jenkins+harbor+gitlab+k8s 自动部署功能,但是最终发布的时候,是手动的. 现在需要实现每次GitLab上有提交事件的时候,都能触发Jenkins执行相应的操作,比如:构建并自动部署. 二.Jenkins配置 安装Gitlab Hook插件 登录后台,点击 Manage Jenkins --> Manage Plugin

gitlab + jenkins 自动部署

一.安装gitlab 和 jenkins 直接克隆项目 git clone [email protected]:GH16/devops.git 进入项目,直接运行, 等待五分钟左右部署(显示出错也会重启继续初始化) ? ~ cd devops ? devops git:(master) ls README.en.md docker-compose.yml jenkins stop.sh README.md gitlab start.sh ? devops git:(master) bash st

配置的同步机制是如何实现的?

配置的同步机制是如何实现的? 配置的同步涉及到两个方面:第一,对原始的配置文件实施监控并在其发生变化之后从新加载配置:第二,配置重新加载之后及时通知应用程序进而使后者能够使用最新的配置.要了解配置同步机制的实现原理,先得从认识一个名为ConfigurationReloadToken的类型开始. [ 本文已经同步到<ASP.NET Core框架揭秘>之中] 目录一.从ConfigurationReloadToken说起二.Configuration对象与配置文件的同步三.应用重新加载的配置四.同

ASP.NET Core的配置(5):配置的同步[设计篇]

本节所谓的"配置同步"主要体现在两个方面:其一,如何监控配置源并在其变化的时候自动加载其数据,其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步:其二.当Configuration对象承载的配置放生变换的时候如何向应用程序发送通知,最终让应用程序使用最新的配置. 一.配置与配置源的同步 配置模型提供了三个原生ConfigurationProvider(JsonConfigrationProvider.XmlConfigurationProvider和IniC

ASP.NET Core的配置(5):配置的同步[ 实例篇]

ConfigurationBuilder在生成以Configuration对象的时候会利用注册其中的ConfigurationProvider加载原始的配置数据,那么一旦配置源中的数据发生变化,应用程序中的使用的配置信息如何与之同步呢?如果需要在应用程序中实现对配置信息的实施同步,就需要对原始配置数据的进行监控,并在数据改变的时候重新加载配置数据.除此之外,重新加载的配置需要应用到程序中,我们必然需要一种通知机制. 为了让读者朋友们对配置同步机制在具体项目中的应用有个感官认识,我们先通过一个简单

rsync结合inotify实现数据自动同步

rsync+inotify rsync介绍 rsync是一个远程数据同步工具,可通过lan/wan快速同步多台主机间的文件.它使用所谓的"rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.所以通常可以作为备份工具来使用. 运行rsync server的机器也叫backup server,一个rsync server可同时备份多个client的数据:也可以多个rsync server备份一个client的数