11

我在家里的私人网络中运行一个 Jenkins 实例。此实例(每小时)轮询 github 上的各种存储库以进行更改并根据这些更改进行操作。

为了减少我的网络和 github 上的负载,我想实现 webhook,但是对于将我的 Jenkins 安装开放到互联网,甚至是我可以期待 webhook 调用的特定几个 IP 地址,我不太高兴.

是否有一种代理可以安装在牺牲主机上,将请求转发到我网络中的真实服务器?调用参数卫生将是一个很好的额外。

4

1 回答 1

16

我们有一个类似的设置,我们有一个暴露在互联网上的主机,它从我们的各种 git 提供商那里接收 webhook,如果需要,会进行一些重写,然后在内部将 hook 转发给 Jenkins(或任何地方)。

这是通过一个非常简单的 nginx 配置完成的:

# Allow *only* the notifyCommit endpoint, and don't expose any other info
location = /git/notifyCommit {
  proxy_pass              http://jenkins.int.example.com:8080/git/notifyCommit
  proxy_hide_header       X-Powered-By;
  proxy_intercept_errors  on;
  error_page              500 /;
}

语法的使用location =意味着只有准确的 URL(加上查询参数)被匹配。其他一切都会抛出 404 错误。


或者,您可以尝试在暴露的主机上运行git-webhook-proxy ;这是我创建的一个网络服务器,它将拦截 webhook,然后在本地缓存存储库,然后通过内部网络将 webhook 转发到 Jenkins。

于 2014-04-22T12:21:31.903 回答