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

时间:2017-09-10 11:30:49

标签: github github-api webhooks

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

每个此类项目都链接到一个分支。

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

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

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

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

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

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

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

帮助将不胜感激。

1 个答案:

答案 0 :(得分:14)

我已经达成了GitHub的支持。

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

以下是他们的答案:

  

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

     

在存储库中创建webhook并订阅它时   event - 当推送任何分支或标记时,webhook将触发,   如此处所述:

     

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

     

没有每个分支的webhook。

     

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

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

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

 {
  "ref": "refs/heads/branch_name",
  ...

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

  

每次安装时,每个事件最多可以创建20个webhook   目标(特定组织或特定存储库)。

这是从这里拍摄的:

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

在这种情况下,这很重要,导致为push事件创建每个分支的WebHook,使我们达到20个WebHook的限制,从而在尝试创建其他WebHook时导致错误。

将它保存在每个存储库的一个WebHook可以消除这个问题。