GitHub WebHooks触发全局而不是每个分支
我们的产品在GitHub上创建WebHooks。每个客户项目一个。GitHub WebHooks触发全局而不是每个分支
每个这样的项目都链接到一个分支。
当执行push
到GitHub时,会触发相应的WebHook,它反过来向我们端点执行某个操作。
一种常见的情况是客户将有多个项目连接到同一个存储库的多个不同分支。因此,几个不同的WebHooks连接到同一个存储库。
问题是,当push
执行到其中一个分支时,GitHub触发所有与存储库相关的WebHooks。
我们期望当对某个分支进行推送时,只会触发一个对应的WebHook。
我发现了两个职位(其中一个是从2012年开始),这似乎是指这个问题:
一个可能的解决方案是解析ref
参数发送到webhook请求中,并控制何时相应采取行动(尚未检查该方向,并且希望ref
确实始终存在并保存正确的分支路径/名称)。但是,这将是“太晚了” - 因为所有WebHooks将被触发,然后...
但似乎不合理,GitHub不会有办法配置此行为以某种方式。
帮助将不胜感激。
我已经伸出GitHub支持。
我希望这篇文章能够帮助那些误解WebHooks和版本库/分支之间关系的人。
这里是他们的回答:
您观察到的行为预期,也没有计划改变 它在不久的将来。
当您创建一个存储库中的网络挂接,并订阅推送 事件 - 当任何分支或标签被推向了网络挂接将触发, 作为记录在这里:
https://developer.github.com/v3/activity/events/types/#pushevent
有没有每个分支的webhooks。
所以,而不是创建订阅对同一存储库中的推送事件 多个网络挂接,您应该只创建一个,并检查哪个 分行收到您的有效载荷推到(因为你注意到没有,的 名该分支通过有效载荷中的ref域传递)。
这个答案让我们意识到我们的观念是错误的。
分支没有映射到webhooks。 每个网络挂接连接到存储库,并在提交到分支而成,该分公司表示网络挂接web请求内ref
属性里面,像这样:
{
"ref": "refs/heads/branch_name",
...
另一个要注意的是,GitHub上限制每个存储库的事件来创建网络挂接的数量:您可以创建多达20个网络挂接对每个安装 目标(特定组织或特定库)每个事件
。
这是采取从这里:
https://developer.github.com/webhooks/
这就是在这种情况下重要的是,可以从每个分支网络挂接的创建为push
事件,更让我们达到20个网络挂接这个限制,从而尝试创建其他WebHook时会导致错误。
将它保存在每个存储库的一个WebHook中可以消除这个问题。
解析推送事件的单个webhook并按分支过滤。或者,您可以为每个客户项目分配每个回购单独分开的WebHooks。 – osowskit