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

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

webhook是个在特定情况下触发的一种api. 越来越多在web上的操作被描述为事件.


配置目的:

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


Webhook 允许第三方应用监听 Coding.net 上的特定事件,在这些事件发生时通过 HTTP POST 方式通知( 超时5秒) 到第三方应用指定的 Web URL。 例如项目有新的内容 Push,或是 Merge Request 有更新等。 WebHook 可方便用户实现自动部署,自动测试,自动打包,监控项目变化等。

设置触发事件

Coding.net 用户可以在自己的项目 -> 设置 -> Webhook 中创建、设置 Webhook 所需监听的事件,并配置第三方应用的 Web URL 。

目前我们支持如下的事件:

Event说明
Push任何时间项目内的 Push 操作
MR/PR任何时间项目内的 Merge Request 和 Pull Request 操作
Topic任何时间项目内的讨论创建,评论
Task任何时间项目内的任务操作
Document任何时间项目内的文档操作

注:为防止您填写的 URL 被第三方恶意调用,我们 WebHook 提供了一个预先填写的 Token ,这个 Token 将会随 Post 请求信息一起发送给您,您可验证此 Token 来确认此请求确实是 Coding.net 发出的。

Webhook请求说明

Webhook 的每个 POST 请求都有包含特殊的 Header, 默认超时时间为 2s

POST 请求 Header 说明

Header说明
X-Coding-Event事件名(例如: push, Merge Request, Task)

首次绑定,系统会向您所填写的 url 地址,发送一个简单的请求,以验证该 WebHook 是有效的,请求如下:

{
    "token": "123", 
    "zen": "Coding! 让开发更简单"
}

关于WebHook 更多例子,请参看 Coding 开放平台

hook 常见排错

填写完成 url 地址后 Coding 会发送一条测试 http 信息到,如果有 response 则 webhook 会变成勾。 也可以通过手动点击 “测试” 完成这个过程。

如果收不到测试信息或者其他正常的 hook 信息,请尝试在 http://requestb.in/ 上建立一个 url ,然后看看是否可以收到请求信息。 如果可以收到,证明 Coding 的 Webhook 服务正常。请检查你的 hook 程序。

注意: webhook 有5秒的超时设置,你的程序必在超时时间内返回。

假设,我们有三个环境:

  1. 线上仓库。如Github、GitLab或Gitee(开源中国)
  2. 本地仓库。日常开发用的。
  3. 服务器仓库。一般是自动在测试服务器,或者生产服务器。

这里我们要达到的目的是,

当有新的本地 commit push 到线上仓库时,服务器仓库自动pull最线上仓库新的代码。

之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台。通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布。这种方式每次在发版的时候,需要人工去执行jenkins上的构建动作,有时显得过于繁琐。于是就想到了Gitlab的Webhook功能,通过Webhook的相关设置,可以实现代码Push后,自动去触发jenkins上的构建动作,这样就不需要人工干预去执行发版操作了。设置如下:

1)Jenkins上的操作
通常,jenkins在项目配置时是可以配置远程构建触发器,设置好jenkins的回调url后就可以让jenkins进行自动构建。这就需要先下载Gitlab Hook Plugin 插件。登陆Jenkins,分别点击"系统管理"->"插件管理"->"可选插件",选择Gitlab Hook Plugin

然后构建相应的项目工程,比如下面的test-wx(下面最关键的是第2步中查看url,然后用这个url回调地址去Gitlab的webhook上添加)
a)先设置代码的git下载路径,这里通过ssh方式(需要提前将Jenkins本机的key添加到Gitlab上)

b)查看jenkin生成回调地址。在任务重构建触发器下获取回调URL。下面的URL那一行只有Gitlab Hook Plugin插件下载成功后才能显示。

c)然后设置代码发布的推送脚本

2)Gitlab上的操作
登陆Gitlab上的testwx3项目中,添加webhook(用上面Jenkins中生成的回调url)

然后点击这个项目的"Settings"

添加成功后,点击此webhook后面的test进行测试

如果返回Hook successfully executed.表示配置成功。
这样,下次push代码后,就会自动触发jenkins上相关的构建工程进行自动发布了!无需人工干预~

------------------------------------------------------------------------------------------------------
如上设置后,比如在gitlab的testwx3项目代码库中push一个test.txt文件,然后测试下是否自动发布了

然后去Jenkins上查看,如下发现已经自动发布了!

最后去目标机器192.168.1.19的/tmp/testwx目录下发现test.txt文件已经发布过来了~

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************


【参考资料】

1、钉钉webhook实现告警通知 - 运维之路 http://www.361way.com/dingding-zabbix-webhook/5526.html

2、使用webhooks自动部署Github、GitLab、Gitee代码 - 歪麦博客 https://www.awaimai.com/2203.html

3、钩子(hooks)—webhook-使用钩子自动触发部署 -  https://blog.csdn.net/iiiiher/article/details/70255934

4、使用 GitHub / GitLab 的 Webhooks 进行网站自动化部署 – https://www.lovelucy.info/auto-deploy-website-by-webhooks-of-github-and-gitlab.html

5、自动化发布-GitLab WEB Hooks 配置- http://blog.51cto.com/fighter/1670667

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐