钩子(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添加一个访问接口
  1. #vim /usr/local/apache/conf/httpd.conf
  2.  
  3. listen
  4. <VirtualHost *:>
  5. ServerAdmin localhost
  6. DocumentRoot "/www/gitlab_web"
  7. <Directory "/www/gitlab_web">
  8. Options -Indexes +FollowSymLinks
  9. AllowOverride None
  10. Order allow,deny
  11. Allow from all
  12. </Directory>
  13. RewriteEngine on
  14. </VirtualHost>

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

  1. (profile settingSSH Keys add ssh key)
  2. #su - webuser
  3. #ssh-keygen -t rsa
  4. 进入项目目录
  5. #cd /path/project
  6. 初始化git仓库
  7. #git clone git@192.168.1.1:test/test_api.git

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

  1. #vim /www/gitlab_web/index.php
  2.  
  3. <?php
  4. //作为接口传输的时候认证的密钥
  5. $valid_token = 'd49dfa762268687eb2ca59498ce852';
  6. //调用接口被允许的ip地址
  7. $valid_ip = array('192.168.1.1','10.17.10.175','112.112.112.112');
  8. $client_token = $_GET['token'];
  9. $client_ip = $_SERVER['REMOTE_ADDR'];
  10. $fs = fopen('./auto_hook.log', 'a');
  11. fwrite($fs, 'Request on ['.date("Y-m-d H:i:s").'] from ['.$client_ip.']'.PHP_EOL);
  12. if ($client_token !== $valid_token)
  13. {
  14. echo "error 10001";
  15. fwrite($fs, "Invalid token [{$client_token}]".PHP_EOL);
  16. exit(0);
  17. }
  18. if ( ! in_array($client_ip, $valid_ip))
  19. {
  20. echo "error 10002";
  21. fwrite($fs, "Invalid ip [{$client_ip}]".PHP_EOL);
  22. exit(0);
  23. }
  24. $json = file_get_contents('php://input');
  25. $data = json_decode($json, true);
  26. fwrite($fs, 'Data: '.print_r($data, true).PHP_EOL);
  27. fwrite($fs, '======================================================================='.PHP_EOL);
  28. $fs and fclose($fs);
  29. //这里也可以执行自定义的脚本文件update.sh,脚本内容可以自己定义。
  30. //exec("/bin/sh /root/updategit.sh");
  31. exec("cd /path/project;/usr/bin/git pull");

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

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

  5.查看客户端日志

  1. #cat /www/gitlab_web/auto_hook.log
  2. =======================================================================
  3. Request on [-- ::] from [112.122.112.112]
  4. Data:
  5. =======================================================================

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

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

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

  1. #cat /www/gitlab_web/auto_hook.log
  2. Request on [-- ::] from [12.123.12.3]
  3. Data: Array
  4. (
  5. [object_kind] => push
  6. [before] => e5988b5dce7a038
  7. [after] => d8ce92ac4ab4ba046dd
  8. [ref] => refs/heads/master
  9. [checkout_sha] => d8ceefd5c4ab4ba046dd
  10. [message] =>
  11. [user_id] =>
  12. [user_name] => test
  13. [user_email] => test@qq.com
  14. [project_id] =>
  15. [repository] => Array
  16. (
  17. [name] => test_api
  18. [url] => git@192.168.1.1:test/test.api
  19. [description] => test.com product code
  20. [homepage] => http://xx./test_api
  21. [git_http_url] => http://xx./test_api
  22. [git_ssh_url] => git@112.23.23.1:test.git
  23. [visibility_level] =>
  24. )
  25.  
  26. [commits] => Array
  27. (
  28. [] => Array
  29. (
  30. [id] => d8cec4ab4ba046dd
  31. [message] => 测试gitlabweb hook接口。
  32.  
  33. [timestamp] => --03T14::+:
  34. [url] => http://xxxx/test_api/commit/d8ce95c4ab4ba046dd
  35. [author] => Array
  36. (
  37. [name] => test
  38. [email] => test@qq.com
  39. )
  40.  
  41. )
  42.  
  43. )
  44.  
  45. [total_commits_count] =>
  46. )

 PS:注意事项:

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

  1. #su - webuser
  2. #cd /path/project
  3. #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. charles本地调试之map和rewrite功能

    charles是一款mac下代理调试工具,对于前端开发同学来说是相当方便的一个调试接口的工具:不过charles需要收费,不过在天朝几乎收费的软件都能找到破解方法: 使用charles前,需要将cha ...

  2. spring rabbitmq集成

    pom.xml加 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-clien ...

  3. [Python] 怎么把HTML的报告转换为图片,利用无头浏览器

    How to convert HTML Report to picture format in Email? So that we can see the automation report also ...

  4. HQL数据查询基础

    HQL定义 1.Hibernate Query Language, Hibernate查询语言 2.HQL是面向对象的查询语言(HQL查询的主体是映射配置的持久化类及其属性而SQL查询主体是数据库表) ...

  5. 在Windows上安装Arduino的步骤

    在64位Windows 10机器上测试 Windows Installer从arduino.cc下载并安装最新的Arduino IDE 从git-scm.com下载并安装Git 开始Git GUI并运 ...

  6. 18.数组(一)之认识java数组

    数组是一个简单的复合数据类型,它是一组有序数据的集合,它当中的每一个数据都具有相同的数据类型,我们通过数组名再加上一个不会越界的下标值来唯一确定数组中的元素. 还有就是,数组是一个特殊的对象. 不管在 ...

  7. Gitlab配置、备份、升级、迁移

    0.Gitlab安装 1.安装和配置必要的依赖关系 在CentOS7,下面的命令将在系统防火墙打开HTTP和SSH访问. yum install curl openssh-server postfix ...

  8. 1.Spring框架入门案例

    一.简单入门案例 入门案例:IoC 1.项目创建与结构 2.接口与实现类 User.java接口 package com.jd.ioc; /** * @author weihu * @date 201 ...

  9. uniGUI动态建立Form及释放

    uniGUI动态建立Form及释放 (2015-10-01 14:51:12) 转载▼   分类: uniGUI 用uniGUI开发的项目中,难免要遇到动态建立一个Form,再释放掉,与传统Delph ...

  10. C# 多线程 举例使用

    使用多线程的几种方式 (1)不需要传递参数,也不需要返回参数 ThreadStart是一个委托,这个委托的定义为void ThreadStart(),没有参数与返回值.   /// <summa ...