热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GitHubWebHooks全局触发而不是每个分支触发

如何解决《GitHubWebHooks全局触发而不是每个分支触发》经验,为你挑选了1个好方法。

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

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

当执行push到GitHub时,会触发相应的WebHook,而WebHook又会向我们端的端点发出请求以执行某个操作.

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

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

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

我发现两个帖子(其中一个是2012年)似乎引用了这个问题:

Web Hooks - 仅针对指定分支执行

能够在webhook中选择特定分支

一种可能的解决方案是解析refwebhook请求中发送的参数并控制何时采取相应的操作(尚未检查该方向,并希望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上实现过一次) 。
推荐阅读
author-avatar
LeoWang
帅气鄙人的PHP程序员
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有