使用私有 Jenkins 和私有 repo 设置 Github 接收后 webhook

使用私有 Jenkins 和私有 repo 设置 Github 接收后 webhook

我正在尝试设置一个私有 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 的行中删除用户:密码。

相关内容