Webhook -> 点击订阅Github仓库特定事件
Introduction
- 你在作什么: 开发网页,开发App
- 你想要什么: 关注我仓库的一些行为,例若有人push我代码了怎样
- Webhook作什么: 当这些行为发生的时候咱们发一个HTTP请求过去
- 请求? 什么请求? 为你的服务器设定好,收到什么请求作什么,那么这个HTTP请求就能为你作不少事,更新镜像,触发CI活动,本身想
你能够选择订阅如下事件
- 关于代码自己的事件
- Push
- Branch/tag的建立与删除
- Issue产生/删除/被评论了/被贴标签
- 产生了Pull requests
- 关于代码仓库的事件
- Deployment
- 完成部署
- 建立/删除 Deployment Keys
- 部署状态发生改变
- 更多
用户订阅Webhook会产生什么影响
1. 在Github页面上定义一个Webhook
Jenkins-Git
插件执行的操做
- git rev-parse --is-inside-worktree 检查咱们如今是否是在一个有效的工做目录下
- git config remote.origin.url http.... 配置仓库地址
- git fetch 获取全部tag/分支相关信息
- git rev-parse ..^{commit} 得到头部hash(最新提交ID)
- git checkout 切换到最新提交ID上
- 能够发现Webhook并不支持,也就是说fetch的时候并不会触发一个Webhook
- 就算触发了,也就是 Github -- HTTP --> 某URL
- 这里的全部执行过程并不涉及编译机自己
比Webhook更加普遍 -> Hooks
1.1 Hooks的分类
Hook一样它们也能针对特定行为作出反应,只是这里的反应不仅是发送URL请求,而是执行一个脚本,Webhook的行为一样能够被hook原模原样的表演出来,Hook能分红两种,他们都会位于.git/hooks目录下
- 本地 -> 本地仓库 -> .git/hooks 上定义
- 你在本地执行完相应的操做之后,本地为你执行的脚本
- 这里的hook包含有 Patch类 + commit类 + push类 ,基本上都是针对代码修改后提交可能须要的hook,没有一个是关于 fetch 相关的hook
- Git服务端 -> 远程仓库 -> .git/hooks 上定义
- 服务端可能会接受到一些请求,例如你commit了或者push了,服务端去执行的脚本
- 这二者是互相不关联的,也就是说:
- 修改了本地的 .git/hooks/XXX后,下一次push不会提交,远程不知道,只能本地用
- 修改了服务器上的 .git/hooks/XXX后,下一次clone不会同步到本地
1.2 因此为何Webhook & Hook是安全的
- 假设如今有一我的但愿在编译机Fetch的时候,触发一些什么操做,他须要解决这些问题
- 你须要有一个你本身的Git客户端,不然你修改不了远程 .git目录
- 没有针对Fetch的 Webhook & Hook,根据这个stack overflow回答
- 你没有可能创造出一个Fetch-Hook
- Merge却是可能触发一个本地Hook,可是Hook是没法被下载下来的,因此你必须在第一次编译的时候下载并人为创造一个Merge-Hook, 第二次编译人为触发Merge-Hook
- 惋惜咱们每次都清空你的代码,你的Merge-Hook留不到下一次
- Hook本质是执行脚本,若是你都能建立出Hook,你大能够直接执行脚本