我试图build立一个私人的GitHub项目发送一个post-receive请求到一个私人的Jenkins实例来触发一个项目build立分支推。 使用最新的Jenkins和GitHub插件。
我相信我在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
我把这个解释为一个正确的Jenkinsconfiguration。 这两个请求也会导致Jenkins日志中的条目。 但是,当从上面粘贴完全相同的URI到Github存储库Post-Receive URLs Service Hook中,并单击Test Hook时 ,我的服务器上绝对没有任何事情发生。 Jenkins日志和GitHub钩子在Jenkins项目中没有任何logging说Polling还没有运行。
我已经用尽了想法,不知道如何进一步发展。
尝试在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,所以var [AJP | HTTP]可以用于代理。 [JENKINS]和[PORT]variables应该是直观的。
现在困难的部分,[AUTHSTRING]!
以USERNAME:PASSWORD部分并通过以下命令运行它:
$ echo -n 'username:password' | base64 dXNlcm5hbWU6cGFzc3dvcmQ=
(echo -n对于删除换行符非常重要。)将结果存入[AUTHSTRING]
你应该能够从github的行删除用户:密码。