【问题标题】:GitHub WebHooks triggered globally instead of per branchGitHub WebHooks 全局触发,而不是每个分支
【发布时间】:2018-02-18 18:46:36
【问题描述】:

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

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

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

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

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

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

我发现两篇帖子(其中一篇来自 2012 年)似乎涉及到这个问题:

一种可能的解决方案是解析在 webhook 请求中发送的 ref 参数并控制何时采取相应的行动(尚未检查该方向,希望 ref 确实始终存在并保持正确的分支路径/姓名)。但这将“为时已晚”——因为届时所有 WebHook 都将被触发......

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

我们将不胜感激。

【问题讨论】:

  • 解析单个 webhook 以获取推送事件并按分支过滤。或者,您可以分叉每个客户项目,其中每个 repo 都有单独的 webhook。
  • @osowskit 这将如何在 Jenkins 工作中实现?您是否只需要在 repo 的 refspec 字段中指定分支?如果不是,我不知道用于解析有效负载和匹配 refs 以确定是否构建的构建触发器插件(但也许存在一个?)

标签: github github-api webhooks


【解决方案1】:

我已经联系了 GitHub 支持。

我希望这篇文章能帮助那些误解 WebHooks 和存储库/分支之间关系的人。

这是他们的答案:

您观察到的行为是预期的,没有改变的计划 在不久的将来。

当您在存储库上创建 webhook 并将其订阅到推送时 event -- 当任何分支或标签被推送到时,webhook 将触发, 如此处所述:

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

没有每个分支的 webhook。

因此,与其创建多个订阅推送事件的 webhook 在同一个存储库上,您应该只创建一个,并检查哪个 从您收到的有效负载推送到分支(如您所见, 分支的名称通过负载中的 ref 字段传递)。

这个答案让我们意识到我们的想法是错误的。

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

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

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

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

取自这里:

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

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

将其保留在每个存储库一个 WebHook 将消除该问题。

【讨论】:

  • 您的问题有什么解决方案吗?我面临同样的问题。 任何推送到 repo 都会触发 devstage 构建。非常烦人。
  • 您是否按照我关于“ref”属性的回答?
  • 是的,我做到了。但是问题似乎出在github上,以及何时触发了钩子。
  • 仔细检查您的代码以及您如何阅读“参考”。我有一种强烈的感觉,那就是你的实现,而不是 GitHub 的问题......
  • 推送到某些分支触发某些东西是一种常见的场景。 GitHub 的设计选择(不支持)会产生很多不必要的网络请求,并且,更重要的是,迫使任何需要此功能的 webhook 接收器实现解析 ref 逻辑(它可能只实现一次在 GitHub 上)。
猜你喜欢
  • 2019-01-08
  • 2019-12-06
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-14
  • 2019-10-16
  • 2021-12-29
相关资源
最近更新 更多