如何创建一个GitLab Web Hooks?

Git Hooks
Git 能在特定的重要动作发生时触发自定义的脚本。
这些脚本都被存储在 Git 目录下的 hooks 子目录中(.git/hooks)。当 git init 初始化一个仓库时,Git 默认会在这个目录中放置一些示例脚本。这些脚本一般都是 shell 脚本。不过自定义的可执行脚本可以使用你喜欢的脚本语言,如 Ruby、Python 等。
这些示例的名字都是以 .sample 结尾,如果需要启用它们,首先要移除这个后缀:
cd .git/hooks
ls
applypatch-msg.sample
commit-msg.sample
post-update.sample
pre-applypatch.sample
pre-commit.sample
pre-push.sample
pre-rebase.sample
prepare-commit-msg.sample
update.sample
cp applypatch-msg.sample applypatch-msg
钩子按功能分来两类:客户端和和服务器端的。
客户端钩子由诸如提交(commit)和合并(merge)这样的操作所调用,而服务器端钩子作用于诸如接收被推送(push)的提交这样的联网操作。
GitLab Web Hooks

顾名思义,Web Hooks 的含义是将本地脚本接口化。GitLab 能在特定的重要动作发生时调用自定义的接口。接口的内部逻辑实现自动化部署或自动化测试的代码。
搭建接口服务
以 nginx + supervisor 部署 flask 应用作为我们的接口服务。
基于 flask 框架搭建接口服务
创建 python 文件:
vi web_hooks_flask.py
写入以下代码:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask, request
import json
import os
app = Flask(__name__)
@app.route('/', methods=['POST'])
def index():
path = '/home/www/test/' # 项目目录
return _hooks(path, request.data)
def _hooks(path, data):
post_data = json.loads(data)
ref = post_data['ref']
branch_name = ref.split('/')[-1]
status = os.system("cd %s && git checkout %s && git pull --rebase" % (path, branch_name,))
if status == 0:
return 'success'
else:
return 'error'
if __name__ == '__main__':
app.run(threaded=True, debug=True)
保存后,启动服务:
python web_hooks_flask.py
启动成功:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 569-323-263
supervisor 管理进程
supervisor 是一个进程管理程序,能将一个普通的命令行进程变为守护进程,并监控进程状态,异常退出时能自动重启。
在 supervisor 的配置文件中追加:
[program:web_hooks_flask]
command=python /path/web_hooks_flask.py # path 改为具体部署的绝对路径
redirect_stderr=true
stdout_logfile=/path/web_hooks_flask.log # path 改为具体部署的绝对路径
更新配置文件:
supervisorctl update
启动进程:
supervisorctl start web_hooks_flask
查看进程:
supervisorctl
web_hooks_flask RUNNING pid 29526, uptime 2 days, 20:58:51
nginx 作为反向代理服务器
向 nginx 配置文件中追加配置:
server {
listen 80;
server_name hooks.test.com; # 修改为服务器的ip或域名
location / {
proxy_pass http://127.0.0.1:5000; # 反向代理
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
重启 nginx 服务。
在 GitLab 中配置 web hooks

在上图的URL中,填入hooks.test.com保存即可。
参考
Git Hooks 文档可以访问:Hooks used by Git
GitLab Web Hooks 文档可以访问:GitLab Documentation: Webhooks
nginx 反向代理 文档可以访问:Module ngx_http_proxy_module
flask 文档可以访问:flask docs
supervisor 文档可以访问:supervisor docs
如何创建一个GitLab Web Hooks?的更多相关文章
- 创建一个maven web project
几经周折总算是找到了和高杨学长一样的web project的方法.感谢学长的一语点醒.我之前以为,既是maven又是web project的项目得要是通过dynamic web project转换到 ...
- Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72566261 本文出自[赵彦军的博客] Java web 开发填坑记 1-如何正确 ...
- Eclipse创建一个Maven Web项目
在这篇文章中,我们将演示如何在Eclipse IDE中使用maven创建一个动态Web项目. 使用的工具和技术 - Eclipse Jee Oxygen Maven 3.3.3 JavaSE 1.8 ...
- struts2官方 中文教程 系列一:创建一个struts2 web Application
先贴了本帖地址,以免被爬 http://www.cnblogs.com/linghaoxinpian/p/6898779.html 本教程将会通过安装struts2框架来创建一个简单的应用程序.虽然 ...
- 创建一个动态Web项目:
开始你的Eclipse,然后进入“文件”>“新建”>“动态Web项目,然后输入项目名称为HelloWorldStruts2和设置其他的选项,在下面的屏幕: 选择在屏幕上的所有默认选项,最后 ...
- 带你使用Visual Studio 2019创建一个MVC Web应用
工欲善其事必先利其器,我们既然有Visual Studio2019这样的IDE为什么不用?学.Net Core而不用Visual Studio进行开发可谓是多么另类呀!既然你已经安装了VS2019的话 ...
- maven 学习---用Eclipse创建一个Maven Web项目
下面是使用 Eclipse 来创建一个Maven Web项目的说明.这是相当简单的. 现在让我们开始吧! 1: 启动 Eclipse, 点击 File->New->Other 2: 在弹出 ...
- 使用 TypeScript,React,ANTLR 和 Monaco Editor 创建一个自定义 Web 编辑器(二)
译文来源 欢迎阅读如何使用 TypeScript, React, ANTLR4, Monaco Editor 创建一个自定义 Web 编辑器系列的第二章节, 在这之前建议您阅读使用 TypeScrip ...
- jenkins 设置 gitlab web hooks
背景 接口自动化期望代码push后触发实现持续集成,代码push后,自动化执行jenkins的job. 步骤 准备工作 工具:jenkins,gitlab jenkins需要安装插件:git plug ...
随机推荐
- 与类相关基本概念----Beginning Visual C#
span.kw { color: #007020; font-weight: bold; } code > span.dt { color: #902000; } code > span. ...
- Azure Backup (2) Azure备份服务
<Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China. 本文介绍的Azure管理界面是Classic Model,网址:h ...
- winform只允许一个应用程序运行 2014-12-08 09:51 31人阅读 评论(0) 收藏
使用互斥体Mutex类型 导入命名空间 using System.Threading; //声明互斥体 Mutex mutex = new Mutex(false, "ThisShouldO ...
- python处理空格脚本
博客园上传代码时拷贝vs里面的代码不能直接粘贴,否则空格会不符合要求 去掉空格代码 # -*- coding: utf-8 -*- '''打开delSpace.txt文本并删除每行开头的八个空格''' ...
- 各种类型转换为字符串类型(ToString())
更详细请参考:http://blog.csdn.net/wanzhuan2010/article/details/8478904 // C 货币 2.5.ToString("C") ...
- Git合并分支操作
1. 添加自己的文件 git add .; 2. 缓存自己的文件 git stash; 3. 查看状态 git status; 4. 获取别的分支 git pull origin master(分支名 ...
- workman源代码阅读 - 使用信号处理器实现定时器
<?php /** * SIGALRM信号处理器注册成功后,在什么情况下进程会收到该信号呢? * * 在Linux系统下,每个进程都有惟一的一个定时器,该定时器提供了以秒为单位的定时功能.在定时 ...
- codevs 1021 玛丽卡(spfa)
题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...
- Thinkcmf:页面常用函数
Thinkcmf:页面常用函数 全站seo: 文章列表: {$site_seo_title} <!--SEO标题--> {$site_seo_keywords} < ...
- Pro HTML5 Programming(Second Edition)2.Canvas API(2)
1.在页面中加入canvas元素 eg: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...