钩子(hooks)

hooks是在特定事件发生之前或之后执行特定脚本代码功能(从概念上类比,就与监听事件、触发器之类的东西类似)。

Git hooks就是那些在Git执行特定事件(如commit、push、receive等)后触发运行的脚本。

gitlab的web hooks跟git hook类型。也是当项目发生提交代码、提交tag等动作会自动去调用url,这个url可以是更新代码,或者其他操作。

配置目的

由于系统属于后台接口系统,开发提交完git仓库后要实时的部署到测试环境,这时候就需要用到gitlab的web hooks自动更新部署了。

  • 客户端:要自动更新的测试服务器IP:192.168.1.2
  • 服务端:gitlab服务器IP:192.168.1.1
  • Gitlab Version 7.13.0.pre
  • Gitlab-Shell Version:2.6.3

步骤如下:

  1. 在客户端上配置Apache配置文件,为web hooks添加一个访问接口
#vim /usr/local/apache/conf/httpd.conf

listen
<VirtualHost *:>
ServerAdmin localhost
DocumentRoot "/www/gitlab_web"
<Directory "/www/gitlab_web">
Options -Indexes +FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
RewriteEngine on
</VirtualHost>

  2.在服务端gitlab上面为客户端添加gitlab新账号,然后将生产的公钥添加到gitl的账号里面

(profile setting→SSH  Keys →add ssh key)
#su - webuser
#ssh-keygen -t rsa
进入项目目录
#cd /path/project
初始化git仓库
#git clone git@192.168.1.1:test/test_api.git

  3.在客户端上面添加接口文件

#vim /www/gitlab_web/index.php

<?php
//作为接口传输的时候认证的密钥
$valid_token = 'd49dfa762268687eb2ca59498ce852';
//调用接口被允许的ip地址
$valid_ip = array('192.168.1.1','10.17.10.175','112.112.112.112');
$client_token = $_GET['token'];
$client_ip = $_SERVER['REMOTE_ADDR'];
$fs = fopen('./auto_hook.log', 'a');
fwrite($fs, 'Request on ['.date("Y-m-d H:i:s").'] from ['.$client_ip.']'.PHP_EOL);
if ($client_token !== $valid_token)
{
echo "error 10001";
fwrite($fs, "Invalid token [{$client_token}]".PHP_EOL);
exit(0);
}
if ( ! in_array($client_ip, $valid_ip))
{
echo "error 10002";
fwrite($fs, "Invalid ip [{$client_ip}]".PHP_EOL);
exit(0);
}
$json = file_get_contents('php://input');
$data = json_decode($json, true);
fwrite($fs, 'Data: '.print_r($data, true).PHP_EOL);
fwrite($fs, '======================================================================='.PHP_EOL);
$fs and fclose($fs);
//这里也可以执行自定义的脚本文件update.sh,脚本内容可以自己定义。
//exec("/bin/sh /root/updategit.sh");
exec("cd /path/project;/usr/bin/git pull");

  4.访问接口,测试接口是否成功。

http://192.168.1.2:81/?token=d49dfa7622681425fbcbdd687eb2ca59498ce852

  5.查看客户端日志

#cat /www/gitlab_web/auto_hook.log
=======================================================================
Request on [-- ::] from [112.122.112.112]
Data:
=======================================================================

  6.在服务端gitlab服务器上面添加web hooks

admin area->projects->test/edit->WEB Hooks->add WEB Hooks

  7.提交修改代码到gitlab仓库,然后查看日志、查看测试环境是否更新

#cat /www/gitlab_web/auto_hook.log
Request on [-- ::] from [12.123.12.3]
Data: Array
(
[object_kind] => push
[before] => e5988b5dce7a038
[after] => d8ce92ac4ab4ba046dd
[ref] => refs/heads/master
[checkout_sha] => d8ceefd5c4ab4ba046dd
[message] =>
[user_id] =>
[user_name] => test
[user_email] => test@qq.com
[project_id] =>
[repository] => Array
(
[name] => test_api
[url] => git@192.168.1.1:test/test.api
[description] => test.com product code
[homepage] => http://xx./test_api
[git_http_url] => http://xx./test_api
[git_ssh_url] => git@112.23.23.1:test.git
[visibility_level] =>
) [commits] => Array
(
[] => Array
(
[id] => d8cec4ab4ba046dd
[message] => 测试gitlab的web hook接口。 [timestamp] => --03T14::+:
[url] => http://xxxx/test_api/commit/d8ce95c4ab4ba046dd
[author] => Array
(
[name] => test
[email] => test@qq.com
) ) ) [total_commits_count] =>
)

 PS:注意事项:

1:配置完成后。调用接口的时候没有自动更新到测试环境。可以使用apache的运行用户测试命令是否可以执行成功

#su - webuser
#cd /path/project
#git pull

2:如果Apache的用户无法执行命令或者更新git代码,请检查一下Apache的用户的shell以及PHP是否支持exec调用shell命令。

原文地址:https://mp.weixin.qq.com/s?__biz=MzIxNDE4NDg0Ng==&mid=405872601&idx=2&sn=1b7392ef541e044e8e60bd0695cf430a&scene=24&srcid=0407Gq48cxRCWvJmt1qV5Klb#rd

自动化发布-GitLab WEB Hooks 配置的更多相关文章

  1. 如何创建一个GitLab Web Hooks?

    Git Hooks Git 能在特定的重要动作发生时触发自定义的脚本. 这些脚本都被存储在 Git 目录下的 hooks 子目录中(.git/hooks).当 git init 初始化一个仓库时,Gi ...

  2. jenkins 设置 gitlab web hooks

    背景 接口自动化期望代码push后触发实现持续集成,代码push后,自动化执行jenkins的job. 步骤 准备工作 工具:jenkins,gitlab jenkins需要安装插件:git plug ...

  3. 【Hello CC.NET】自动化发布时 Web.config 文件维护

    在 <[Hello CC.NET]CC.NET 实现自动化集成> 的 HellowWorld 中经实现: 1.获取源码 2.编译项目 3.集成测试 4.Ftp发布项目 5.创建安装包 6. ...

  4. Tomcat基于虚拟路径的发布和web.xml配置

    <Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000" ...

  5. CC.NET-自动化发布时 Web.config 文件维护

    [Hello CC.NET]自动化发布时 Web.config 文件维护   在 <[Hello CC.NET]CC.NET 实现自动化集成> 的 HellowWorld 中经实现: 1. ...

  6. Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)

    上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...

  7. 使用 Gitlab CI/CD 实现自动化发布站点到 IIS

    说明 这里先介绍下两个东西 CI/CD.GitLab Runner,当然在此之前你需要对 git 有所了解,关于 git 这里不做说明,可以自行百度. 首先介绍 CI/CD :随着我们开发方式的转变, ...

  8. svn + nginx unit + python3自动化发布web服务方法

    本周将python web服务管理更换成nginx unit以后发现接口性能有了明显的提升,访问速度快了不少.不过有个很大的问题就是使用svn自动化发布以后,服务并没有刷新使用新的代码运行,而又不懂得 ...

  9. IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统

    原文:IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统 asp.net 网站有三种常用的发布方式:分别是拷贝开发机上发布好的 ...

随机推荐

  1. java【基础】正则表达式

    1 字符串判断 java的正则使用的是Pattern以及Matcher来配合使用的. 如果只是用来判断输入的字符串是否符合格式,推荐使用Matcher的matches方法. public static ...

  2. centos 安装解压工作

    解压工具: yum install ark 编辑器: yum install gedit

  3. 大型互联网 b2b b2c o2o 电子商务微服务云平台

    鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 分布式.微服务.云架构电子商务平台 java ...

  4. Android手机上浏览器不支持带端口号wss解决方案

    首先抄个示例过来,命名为wss-test.html,然后传到服务器: <!DOCTYPE HTML> <html> <head> <meta http-equ ...

  5. python_paramiko

    目录: paramiko模块介绍 paramiko模块安装 paramiko模块使用 一.paramiko模块介绍 paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件 ...

  6. SpringMVC学习 十三 拦截器栈

    拦截器栈:就是有多个拦截器同时拦截相同的控制器(controller)请求,这写拦截器就构成了拦截器栈. 栈的特点是先进后出,在拦截器栈中也是如此,如果先执行了preHandle方法,也就是意味着先进 ...

  7. jQuery三级联动

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. validatord的使用方法理解

    今天是周日,自己已经在公司上班一周啦,可是这是我感觉最难熬 一周之一,上一次还是在高考失利的时候,自己整整一个月没有出去,在家里呆着,不知道干什么,这一此自己也是,感觉自己很难在这个公司熬下去,但是, ...

  9. Python开发——2.基本数据类型之数字和字符串

    一.基本数据类型 基本数据类型包括:数字(int).字符串(str).列表(list).元祖(tuple).字典(dict).布尔值(bool). 查看输出数据的类型 a = "123&qu ...

  10. Linux命令之tee - 重定向输出到多个文件

    http://codingstandards.iteye.com/blog/833695 tee 将标准输出复制一份 ls -al | tee -a tmpls.log ls -al >> ...