作者:LeoWang | 来源:互联网 | 2023-01-19 10:44
我们的产品在GitHub上创建了WebHooks.每个客户项目一个.
每个这样的项目都链接到一个分支.
当执行push
到GitHub时,会触发相应的WebHook,而WebHook又会向我们端的端点发出请求以执行某个操作.
一种常见的情况是,客户将拥有多个项目,这些项目连接到同一存储库的多个不同分支.因此,几个不同的WebHook连接到同一个存储库.
问题是,当push
对其中一个分支执行a时,GitHub会触发所有与存储库相关的WebHook.
我们希望当推送到某个分支时,只会触发一个相应的WebHook.
我发现两个帖子(其中一个是2012年)似乎引用了这个问题:
Web Hooks - 仅针对指定分支执行
能够在webhook中选择特定分支
一种可能的解决方案是解析ref
webhook请求中发送的参数并控制何时采取相应的操作(尚未检查该方向,并希望ref
确实始终存在并保持正确的分支路径/名称).但这将"为时已晚" - 因为当时所有WebHooks都会被触发......
但似乎不合理的是,GitHub无法以某种方式配置此行为.
帮助将不胜感激.
1> ilans..:
我已经达成了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",
...
另外需要注意的是GitHub限制了每个Repository-Event创建的WebHook数量:
您可以为每个安装目标(特定组织或特定存储库)上的每个事件创建最多20个webhook.
它取自这里:
https://developer.github.com/webhooks/
这就是在这种情况下重要的是,可以从每个分支网络挂接的创建push
活动,使我们达到20个网络挂接这个限制,从而导致错误试图创建额外的网络挂接时.
将它保存在每个存储库的一个WebHook将消除该问题.
推送到某些分支会触发某些情况。GitHub的设计选择(不支持它)会产生很多不必要的网络请求,并且更重要的是,**强制要求此功能的任何Webhook接收器实现解析引用逻辑(它可能只在GitHub上实现过一次) 。