我们的产品在GitHub上创建了WebHooks。每个客户项目一个。
每个此类项目都链接到一个分支。
当执行push
到GitHub时,会触发相应的WebHook,而WebHook又会向我们这边的端点发出请求以执行某个操作。
一种常见的情况是,客户将拥有多个项目,这些项目连接到同一存储库的多个不同分支。因此,几个不同的WebHook连接到同一个存储库。
问题是当对其中一个分支执行push
时,GitHub会触发所有与存储库相关的WebHook。
我们希望当推送到某个分支时,只会触发一个相应的WebHook。
我发现两个帖子(其中一个是2012年)似乎引用了这个问题:
一种可能的解决方案是解析在webhook请求中发送的ref
参数,并控制何时采取相应的行动(尚未检查该方向,希望ref
确实始终存在并保持正确的分支路径/名称)。但那将太晚了#34; - 因为当时所有WebHooks都会被触发......
但GitHub无法以某种方式配置此行为,这似乎是不合理的。
帮助将不胜感激。
答案 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可以消除这个问题。