gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:29:22 25 4
gpt4 key购买 nike

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

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

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

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

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

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

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

  • Web Hooks - execute only for specified branches
  • Ability to select a specific branch in webhook

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

    但是 GitHub 没有办法以某种方式配置这种行为似乎是不合理的。

    帮助将不胜感激。

    最佳答案

    我已经联系了 GitHub 支持。

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

    这是他们的答案:

    The behavior you observed is expected and there are no plans to change it in the near future.

    When you create a webhook on a repository and subscribe it to the push event -- the webhook will trigger when any branch or tag is pushed to, as documented here:

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

    There are no per-branch webhooks.

    So, instead of creating multiple webhooks subscribed on the push event on the same repository, you should create only one, and check which branch was pushed to from the payload you receive (as you noticed, the name of the branch is passed via the ref field in the payload).



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

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

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

    You can create up to 20 webhooks for each event on each installation target (specific organization or specific repository).



    它取自这里:

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

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

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

    关于GitHub WebHooks 全局触发,而不是每个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46140233/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com