钩子(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秒的超时设置,你的程序必在超时时间内返回。
假设,我们有三个环境:
- 线上仓库。如Github、GitLab或Gitee(开源中国)
- 本地仓库。日常开发用的。
- 服务器仓库。一般是自动在测试服务器,或者生产服务器。
这里我们要达到的目的是,
当有新的本地 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
所有评论(0)