我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

此版本的 GitHub Enterprise 已停止服务 2021-03-02. 即使针对重大安全问题,也不会发布补丁。 要获得更好的性能、改进的安全性和新功能,请升级到 GitHub Enterprise 的最新版本。 如需升级方面的帮助,请联系 GitHub Enterprise 支持

配置服务器以接收有效负载

了解如何设置服务器来管理传入的 web 挂钩有效负载。

本文内容

现在,我们的 web 挂钩已准备好传递消息,我们将设置一个基本的 Sinatra 服务器 来处理传入的有效负载。

回想一下,我们专门将 web 挂钩 URL 设置为 http://localhost:4567/payload。 由于我们在本地进行开发,因此我们需要将本地开发环境暴露给互联网,以便 GitHub 可以发送消息,而我们的本地服务器可以处理它们。

注:您可以从平台样本仓库下载此项目的完整源代码。

使用 ngrok

首先,我们将安装一个程序,将本地主机暴露给互联网。 我们将使用 ngrok 实现此目的。 ngrok 可免费下载,适用于所有主流操作系统。

完成此工作后,您可以在命令行上运行 ./ngrok http 4567 以暴露本地主机。 您应该会看到如下所示的行:

$ Forwarding    http://7e9ea9dc.ngrok.io -> 127.0.0.1:4567

复制那个不寻常的 *.ngrok.io URL! 现在,我们将回到有效负载 URL,并将此服务器粘贴到该字段中。 它应该如下所示:http://7e9ea9dc.ngrok.io/payload

通过这些设置,我们就将路径 /payload 上的本地主机暴露给了互联网。

编写服务器

有趣的来了! 我们希望服务器在 /payload 处侦听 POST 请求,因为这是我们告诉 GitHub 我们的 web 挂钩 URL 所在位置。 由于 ngrok 在暴露我们的本地环境,因此我们无需在线上某个位置设置真正的服务器,就可以在本地愉快地测试我们的代码。

让我们设置一个小 Sinatra 应用程序来处理信息。 我们的初始设置可能如下所示:

require 'sinatra'
require 'json'

post '/payload' do
  push = JSON.parse(request.body.read)
  puts "I got some JSON: #{push.inspect}"
end

(如果您不熟悉 Sinatra 的工作方式,建议您阅读 Sinatra 指南)。

启动此服务器。

我们已经设置了 web 挂钩来侦听涉及 Issues 的事件,现在,我们在要测试的仓库上创建一个新议题。 创建后,切换回终端。 您应该会在输出中看到以下内容:

$ ~/Developer/platform-samples/hooks/ruby/configuring-your-server $ ruby server.rb
> == Sinatra/1.4.4 has taken the stage on 4567 for development with backup from Thin
> >> Thin web server (v1.5.1 codename Straight Razor)
> >> Maximum connections set to 1024
> >> Listening on localhost:4567, CTRL+C to stop
> I got some JSON: {"action"=>"opened", "issue"=>{"url"=>"...

成功! 您已成功配置服务器以侦听 web 挂钩。 您的服务器现在可以按照您认为合适的任何方式处理此信息。 例如,如果要设置“真实的” Web 应用程序,则可能需要将一些 JSON 输出记录到数据库中。

有关使用 web 挂钩的乐趣和好处的更多信息,请参阅测试 web 挂钩指南。