我正在尝试设置一个私有 GitHub 项目,以将后接收请求发送到私有 Jenkins 实例,以触发分支推送上的项目构建。使用带有 GitHub 插件的最新 Jenkins。
我相信我在 Jenkins 端正确设置了一切,因为当使用 curl 从公共服务器发送如下请求时:
curl http://username:password@ipaddress:port/github-webhook/
结果是:
Stacktrace: net.sf.json.JSONException: null object
这没问题,因为缺少 JSON 负载。在 URI 中发送错误的用户名和密码会导致:
Exception: Failed to login as username
我认为这是正确的 Jenkins 配置。这两个请求也会导致 Jenkins 日志中出现条目。但是,当将上面完全相同的 URI 粘贴到 Github 存储库 Post-Receive URLs Service Hook 中并单击测试钩,我的服务器上似乎什么都没有发生。Jenkins 日志和 Jenkins 项目中的 GitHub Hook Log 中都没有显示投票尚未开始。
我已经没有什么主意了,不知道如何继续下去。
答案1
尝试在 Jenkins 前面使用 Apache 作为代理。我使用 NameVirtualHost...
<VirtualHost>
--Snip---
<Proxy *>
AddDefaultCharSet Off
Order deny,allow
Allow from all
--snip-- #You can tighten this to only allow from GITHUB ips.
</Proxy>
RequestHeader unset Authorization
RequestHeader set Authorization "Basic [AUTHSTRING]"
ProxyPass / [AJP|HTTP]://[JENKINS]:[PORT]/
ProxyPassReverse / [AJP|HTTP]://[JENKINS]:[PORT]/
</VirtualHost>
我在 tomcat 容器中运行 Jenkins 并使用 AJP,因此变量 [AJP|HTTP] 可以用于代理。[JENKINS] 和 [PORT] 变量应该是直观的。
现在是最困难的部分,[AUTHSTRING]!
取出 USERNAME:PASSWORD 部分并通过以下命令运行:
$ echo -n 'username:password' | base64
dXNlcm5hbWU6cGFzc3dvcmQ=
(echo -n 对于删除换行符很重要。)获取结果并输入 [AUTHSTRING]
您应该能够从 github 的行中删除用户:密码。