Keuin's

配置GitHub向通过Nginx反向代理的Jenkins发送WebHook

最近在尝试配置Jenkins来自动化编译、测试、部署我的一个项目。

如欲在push后自动调用Jenkins启动CI/CD流程,需要使用GitHub的WebHook功能,其基本原理是GitHub服务器调用Jenkins服务器的一个REST API。然而,为了让GitHub服务器能够访问到Jenkins服务器,后者需要拥有一个公网IP地址,我的Jenkins服务器并没有一个独立的IPv4地址(由于复杂的原因,IPv6在本例中不可用)。

这样看来,似乎没有公网IP地址就没法使用WebHook了。实际上,还是有解决方案的。我有一个公网的反向代理,这个反向代理所代理的服务可以访问到Jenkins服务器。我们只需要让这个反向代理去代理一个Nginx,让Nginx把一个子目录转发到Jenkins所提供的REST API、其余目录仍不变,不就可以把Jenkins的Hook开到公网去了?

由于Nginx会过滤一些非标准请求头,而Jenkins需要用到一些自定义的请求头,所以需要在server一节中添加

ignore_invalid_headers off;

来禁用Nginx的过滤。

最后再添加代理规则:

location /real-hook-path/ {

    proxy_pass http://path-to-your-jenkins-hook/;

    proxy_set_header X-Real-IP $remote_addr;

    proxy_method POST;

}

就可以了。