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

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 81

ServerAdmin localhost

DocumentRoot "/www/gitlab_web"

Options -Indexes +FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

RewriteEngine on

2、在服务端gitlab上面为客户端添加gitlab新账号,然后将生成好的公钥添加到gitlab好的账号里面(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

//作为接口传输的时候认证的密钥

$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 [2015-07-03 14:05:02] 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 [2015-07-03 14:13:37] from [12.123.12.3]

Data: Array

(

[object_kind] => push

[before] => e5988b5dce7a038

[after] => d8ce92ac4ab4ba046dd

[ref] => refs/heads/master

[checkout_sha] => d8ceefd5c4ab4ba046dd

[message] =>

[user_id] => 7

[user_name] => test

[user_email] => test@qq.com

[project_id] => 3

[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] => 10

)

[commits] => Array

(

[0] => Array

(

[id] => d8cec4ab4ba046dd

[message] => 测试gitlab的web hook接口。

[timestamp] => 2015-07-03T14:13:51+08:00

[url] => http://xxxx/test_api/commit/d8ce95c4ab4ba046dd

[author] => Array

(

[name] => test

[email] => test@qq.com

)

)

)

[total_commits_count] => 1

)

注意事项:

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

#su - webuser

#cd /path/project

#git pull

2、如果apache的用户无法执行命令或者无法更新git代码请检查一下apache用户的shell。

参考资料:

gitlab php自动化测试,自动化发布-GitLab WEB Hooks 配置相关推荐

  1. 自动化发布-GitLab WEB Hooks 配置

    钩子(hooks) Git是在特定事件发生之前或之后执行特定脚本代码功能(从概念上类比,就与监听事件.触发器之类的东西类似). Git Hooks就是那些在Git执行特定事件(如commit.push ...

  2. GitLab CI/CD 自动化构建与发布实践

    流程介绍 CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.这篇文章中,我将会介绍基于 GitLab CI/CD 的自动化 ...

  3. gitlab合并分支后需要提交吗_阿里前端,如何基于 GitLab 进行「自动化」构建及发布...

    在公司搭建内部 GitLab 平台后,前端活动项目从 SVN 迁移到 GitLab.本文介绍如何基于 GitLab CI/CD 实现自动化构建及发布. 在从 SVN 迁移到 GitLab 和接入 Gi ...

  4. gitlab 不打tag怎么查看随机tag_Jenkinsamp;Gitlab实现自动化测试脚本部署

    概述 持续集成是什么? 典型的工作流程包括以下几个步骤:开发-提交-编译-测试-发布持续集成是一个开发的实践,需要开发人员定期集成代码到共享存储库.持续集成要求开发人员有频繁的构建.最常见的做法是,每 ...

  5. Jenkins+Gitlab+Nginx实现自动发布与回退基于tag版本的静态项目(解决重复构建问题)

    环境拓扑:  Jenkins -192.168.1.30  Gitlab -192.168.1.31  LB -192.168.1.32  Nginx1 -192.168.1.33  Nginx2 - ...

  6. GitLab 8.3.3 发布 开源代码管理

    2019独角兽企业重金招聘Python工程师标准>>> GitLab 8.3.3 发布,包括 GitLab Community Edition (CE) 和 Enterprise E ...

  7. gitlab ci 自动化部署_前端gitLab加jenkins自动化构建和部署,以及服务器常用的linux命令行操作,免密登录...

    常用的linux命令行操作 将项目部署到服务器后,需要查看文件是否已经部署成功,已经对文件进行增删改查操作,就需要用到命令行操作,常用操作如下: ll 罗列出当前文件或目录的详细信息,含有时间.读写权 ...

  8. 配置gitlab环境实现代码管理及Web Hook测试和ldap认证

    前沿: 对于代码库感触有点多,用过redmine(差点忘了名字),还有就是gitweb,最后就是gitlab  . gitlab是我用的很舒服的东西,在2012就接触了,当时开发水平见不得人,主要上传 ...

  9. 基于Hyper-V、centos、搭建宝塔Linux结合gitLab实现前端自动化部署

    本文涉及内容较为繁杂,自己也是头一次接触这方面内容,主要也是作为记录以免睡一觉起来忘了.. 一.准备工作 1.在windows控制面板-程序和功能里开启Hyper-V相关功能: 2.在菜单栏管理工具里 ...

最新文章

  1. 苏炳添招研究生了!上课画面曝光,网友:千万不要逃课……
  2. 控制客户端对同一个服务端地址的连接端口数量
  3. pytorch one-hot转数组
  4. jQuery的JSONP
  5. centos7 批量创建samba用户_蜗牛星际基于centos7的NAS系统配置
  6. xaml语言建立首个win8 Metro应用,rss阅读器
  7. 第一章-从双向链表学习设计
  8. 探Button控件的Click事件发生始末
  9. 图解SQL inner join、left join、right join、full outer join、union、union all的区别
  10. OpenSea2月总交易额为9390.4万美元 用户总数突破5万人
  11. flux服务器推消息,服务端主动推送数据,除了 WebSocket 你还能想到啥?
  12. 6美元进公园随便挖钻石
  13. Java 死锁及解决方法
  14. 达内培训视频下载python
  15. STM32 GPIO模拟I2C的SHT20温湿度采样
  16. 【进程管理】进程资源图理解与化简
  17. 《黑马程序员》 category分类的使用(Objective - c语法)
  18. 运维学python用不上_运维朋友们,别再问需不需要学 Python 了!
  19. 深度学习基础:评价标准——TP、FN、FP、TN、AP、MAP
  20. PyTorch读取自己的本地图片数据集训练自编码器

热门文章

  1. 【ES】ES 好文档积累
  2. 【Janino】Janino Java表达式计算引擎 案例
  3. 【IDEA】idea 运行测试类报错 Failed to resolve org.junit.platform:junit-platform-launcher:1.5.2
  4. 08-R包那么多,怎么才能快速找到自己需要的包呢?
  5. 13-Java和Scala中的Future
  6. 设计一个成功的微服务,堪称必备的9大基础知识
  7. 关于支付回调的一些思考
  8. 面试经常被问到这 4 大开源框架,必须得好好研究一下了!
  9. 一个简单的例子带你理解HashMap
  10. 完全复制一个dict_关于Excel工作表复制里面列宽的介绍