GitHub WebHooks全局触发而不是每个分支触发

ila*_*ans 13 github webhooks github-api

我们的产品在GitHub上创建了WebHooks.每个客户项目一个.

每个这样的项目都链接到一个分支.

当执行push到GitHub时,会触发相应的WebHook,而WebHook又会向我们端的端点发出请求以执行某个操作.

一种常见的情况是,客户将拥有多个项目,这些项目连接到同一存储库的多个不同分支.因此,几个不同的WebHook连接到同一个存储库.

问题是,当push对其中一个分支执行a时,GitHub会触发所有与存储库相关的WebHook.

我们希望当推送到某个分支时,只会触发一个相应的WebHook.

我发现两个帖子(其中一个是2012年)似乎引用了这个问题:

一种可能的解决方案是解析refwebhook请求中发送的参数并控制何时采取相应的操作(尚未检查该方向,并希望ref确实始终存在并保持正确的分支路径/名称).但这将"为时已晚" - 因为当时所有WebHooks都会被触发......

但似乎不合理的是,GitHub无法以某种方式配置此行为.

帮助将不胜感激.

ila*_*ans 20

我已经达成了GitHub的支持.

我希望这篇文章可以帮助其他人,他们误解了WebHooks和存储库/分支机构之间的关系.

这是他们的答案:

您观察到的行为是预期的,并且没有计划在不久的将来更改它.

当您在存储库上创建webhook并将其订阅到push事件时 - 在推送任何分支或标记时将触发webhook,如下所述:

https://developer.github.com/v3/activity/events/types/#pushevent

没有每个分支的webhook.

因此,不是在同一个存储库上的push事件上创建多个webhooks,而是应该只创建一个,并检查从您收到的有效负载推送到哪个分支(正如您所注意到的,分支的名称通过ref传递有效载荷中的字段).

这个答案让我们意识到我们的观念是错误的.

分支未映射到webhooks.每个WebHook都链接到一个存储库,当提交分支时,分支ref在WebHook Web请求内的属性内声明,如下所示:

 {
  "ref": "refs/heads/branch_name",
  ...
Run Code Online (Sandbox Code Playgroud)

另外需要注意的是GitHub限制了每个Repository-Event创建的WebHook数量:

您可以为每个安装目标(特定组织或特定存储库)上的每个事件创建最多20个webhook.

它取自这里:

https://developer.github.com/webhooks/

这就是在这种情况下重要的是,可以从每个分支网络挂接的创建push活动,使我们达到20个网络挂接这个限制,从而导致错误试图创建额外的网络挂接时.

将它保存在每个存储库的一个WebHook将消除该问题.

  • 推送到某些分支会触发某些情况。GitHub的设计选择(不支持它)会产生很多不必要的网络请求,并且更重要的是,**强制要求此功能的任何Webhook接收器实现解析引用逻辑(它可能只在GitHub上实现过一次) 。 (2认同)