钩子(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. 单系统登录机制SSO

    一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...

  2. str 转 md5

    @interface NSString (MD5) + (NSString *)md5To32bit:(NSString *)str; @end @implementation NSString (M ...

  3. apache提示make_sock?

    [root@localhost apache]# /etc/init.d/*_apache restart 停止 *_apache: [失败] 正在启动 *_apache:(98)Address al ...

  4. centos7 mysql的安装与配置

    用yum直接安装,不用更改配置 1. #yum install mysql #yum install mysql-server #yum install mysql-devel yum运行报错的化有可 ...

  5. Python3实战系列之九(获取印度售后数据项目)

    项目现状:已经部署在服务器上并正常运行了. 1.服务器上的部署 2.下载到服务器的文件列表 3.转存在到数据库SQL Server中的数据 项目总结:这次项目采用python来实现,刚开始还是有点担忧 ...

  6. Django高级篇三。restful的解析器,认证组件,权限组件

    一.rest=framework之解析器 1)解析器作用. 根据提交的数据.只解析某些特定的数据.非法数据不接收,为了系统安全问题 比如解析的数据格式有 有application/json,x-www ...

  7. 《MarkMark学习笔记学习笔记》html学习笔记

    iframe里有一个srcdoc属性,很有用! window.location.href=document.referrer//可以实现返回上一级页面并刷新 HTML5权威指南©®,比较老的书了,有些 ...

  8. python之路(六)-函数相关

    在没有学习函数之前我们的程序是面向过程的,不停的判断,不停的循环,同样的代码重复出现在我们的代码里.函数可以更好的提高我们的 代码质量,避免同样的代码重复出现,而只需要在用的时候调用函数即可执行.此为 ...

  9. Forward团队-爬虫豆瓣top250项目-模块开发过程

    项目托管平台地址:https://github.com/xyhcq/top250 开发模块功能: 爬虫对信息的处理部分 开发时间:5天的下午空余时间(每天大约1小时,边学模块的使用边开发) 实现了:爬 ...

  10. Django——用户认证和判断用户是否登录

    用户认证 必须通过认证之后才能login(request,user)这样才能保存会话到request中,注销后会话结束 注意 自定义的用户登陆时只不止需要验证用户名和密码的需要写认证,就例如在线教育平 ...