关于 Webhook 和 GitHub 应用
Webhook 使您的 GitHub 应用能够在 GitHub 上发生事件时接收实时通知,例如当有人推送提交或在您的应用可以访问的存储库中打开拉取请求时。有关 Webhook 的更多信息,请参见“关于 Webhook”。有关使用 GitHub 应用的 Webhook 的教程,请参见“构建响应 Webhook 事件的 GitHub 应用”。
您可以配置您的 GitHub 应用以接收 GitHub 上特定事件的 Webhook,并自动对其采取行动。有关您可以接收的 Webhook 类型的信息,请参见“Webhook 事件和有效负载”。
要接收 GitHub 应用中的 Webhook 事件,您必须为您的 GitHub 应用注册启用 Webhook,并指定一个 Webhook URL,GitHub 将向该 URL 发送 Webhook 有效负载。
如果您的 GitHub 应用不需要响应 Webhook 或仅用于身份验证,则可以关闭 GitHub 应用注册的 Webhook 功能。您不需要指定 Webhook URL。
有关注册 GitHub 应用程序的更多信息,请参阅“注册 GitHub 应用程序”。有关更改 GitHub 应用程序注册订阅的 Webhook 的更多信息,请参阅“修改 GitHub 应用程序注册”。
选择 Webhook URL
当您为 GitHub 应用程序注册激活 Webhook 时,您需要指定一个 Webhook URL。Webhook URL 是将接收发送到您的 GitHub 应用程序的 Webhook 事件有效负载的 Web 服务器的地址。然后,服务器可以根据有效负载的内容采取行动。您应该选择一个适合您的 GitHub 应用程序将遇到的 Webhook 流量量的 Web 服务器。
选择用于开发和测试的 Webhook URL
在您开发和测试应用程序时,您可以使用像 Smee 这样的 Webhook 有效负载传递服务来捕获和转发 Webhook 有效负载到您的本地开发环境。切勿将 Smee 用于生产环境中的应用程序,因为 Smee 通道未经身份验证或不安全。或者,您可以使用像 ngrok、localtunnel 或 Hookdeck 控制台 这样的工具,这些工具将您的本地机器暴露给互联网以接收有效负载。
使用 Smee 创建 Webhook URL
您可以使用 Smee 创建一个唯一的域,GitHub 可以将 Webhook 有效负载发送到该域,而无需将您的本地开发暴露给互联网。Smee 将此唯一域称为“Webhook 代理 URL”。您可以将 Smee 的 Webhook 代理 URL 用作 GitHub 应用程序的 Webhook URL。
- 要使用 Smee 创建一个唯一的域,请访问 https://smee.io 并点击“启动新通道”。
- 在 Smee 通道页面上,按照“使用 CLI”下的说明安装并运行 Smee 客户端。
- 要将您的 Smee Webhook URL 连接到您的 GitHub 应用程序,请在 GitHub 应用程序注册页面上的“Webhook URL”字段中输入您的唯一 Smee 域。有关更多信息,请参阅“注册 GitHub 应用程序”和“修改 GitHub 应用程序注册”。
选择用于生产的 Webhook URL
对于生产环境中接收少量 webhook 流量的应用程序,您可以将其托管在任何动态应用程序服务器上。处理 webhook 的服务器端代码可以接收事件,反序列化其 JSON 负载,并决定采取什么操作,例如将数据存储到数据库或调用 GitHub API。
为了处理生产环境中大型应用程序的更高数量的 webhook 流量,请考虑在专用服务器上使用异步 webhook 处理。您可以通过使用队列来实现这一点,其中 webhook 处理程序将数据推送到队列,而单独的进程根据事件执行后续操作。此外,您可以使用云函数,例如 Azure Functions、AWS Lambda 或 Hookdeck 来帮助扩展应用程序以处理大量 webhook 事件。
使用 webhook 密钥保护您的 webhook
配置好服务器接收负载后,它将监听发送到服务器的任何负载。出于安全原因,您应该将传入请求限制为仅来自 GitHub 的请求。您可以通过为您的应用程序创建 webhook 密钥来做到这一点。
要为您的 GitHub 应用程序创建 webhook 密钥,请在 GitHub 应用程序注册页面上的“Webhook 密钥”下键入一个密钥令牌。您应该选择一个具有高熵的随机文本字符串。有关更多信息,请参阅“注册 GitHub 应用程序”和“修改 GitHub 应用程序注册”。
为您的应用程序创建 webhook 密钥后,您需要配置您的服务器以安全地存储和验证 webhook 密钥令牌。有关更多信息,请参阅“验证 webhook 传递”。
订阅 webhook 事件
您可以订阅您的 GitHub 应用程序以接收特定事件的 webhook 负载。您可以为 GitHub 应用程序注册选择的特定 webhook 事件取决于您为应用程序选择的权限类型。您首先需要选择您希望应用程序拥有的权限,然后您可以订阅与该权限集相关的 webhook 事件。有关更多信息,请参阅“为 GitHub 应用程序选择权限”。
例如,如果您希望您的应用程序在您的存储库中打开新问题时接收 webhook 事件负载,您首先需要授予您的应用程序访问“存储库权限”下的“问题”的权限。然后,在“订阅事件”下,您可以选择“问题”。
有关每个 webhook 事件所需的权限的更多信息,请参阅“Webhook 事件和有效负载”。