我在家里的私人网络中运行Jenkins实例。此实例在github上轮询(每小时)各种存储库以进行更改并对这些更改进行操作。
为了减少我的网络和github上的负载,我想实现webhooks,但是不要觉得开放我的Jenkins安装到互联网,或者甚至到我能用的特定几个IP地址都太高兴了期待webhook电话。
我是否可以在牺牲主机上安装一种代理,将请求转发到我网络中的真实服务器?呼叫参数卫生将是一个很好的额外。
答案 0 :(得分:13)
我们有一个类似的设置,我们有一个暴露在互联网上的主机,它接收来自我们各种git提供者的webhooks,必要时进行一些重写,然后在内部将钩子转发到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;这是我创建的一个网络服务器,它会拦截webhooks,然后在通过内部网络将webhook转发到Jenkins之前在本地缓存存储库。