繁体   English   中英

从 GitLab 到 Jenkins 的 Webhook 返回 HTTP 404

[英]Webhook from GitLab to Jenkins returns HTTP 404

我正在努力做到这一点,以便在我推送到 gitlab 存储库时自动构建我的 Jenkins 工作。 为此,我为 Jenkins 使用了“GitLab 插件”。

这是有效的:

  • 我可以手动构建工作。
  • Jenkins 可以使用 API 密钥访问我的 GitLab 项目。

这就是问题所在:我配置了我的 Jenkins 项目,它给了我一个与 GitLab webhook 一起使用的 URL。 我也使用秘密令牌。

在 GitLab 中,我使用插件给我的完全相同的 url 添加这个 webhook,我也添加了秘密令牌。 我禁用 SSH。 经测试,它返回 HTTP 404 和以下消息:

 Hook executed successfully but returned HTTP 404 <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <title>Error 404 Not Found</title> </head> <body><h2>HTTP ERROR 404 Not Found</h2> <table> <tr><th>URI:</th><td>/project/UnitTestFramework%20-%20Gaspar%20Tamas</td></tr> <tr><th>STATUS:</th><td>404</td></tr> <tr><th>MESSAGE:</th><td>Not Found</td></tr> <tr><th>SERVLET:</th><td>Stapler</td></tr> </table> <hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.30.v20200611</a><hr/> </body> </html>

作为参考,URL 如下所示:

http://jenkins.server.address.com:8282/project/My%20Project%20Name

当然,替换服务器名称和项目名称后,空格会使用 %20 进行转义。 我看不出这个 URL 有什么问题,因为 GitLab 插件给了我它,所以不会有错字或任何东西。

我自己在浏览 SO 时找到了一个解决方案。 它完全绕过了 GitLab 插件,因为我无法让那个 URL 工作。 看到这个答案,它对我有用。

如果这里的链接失效了,请使用这个 webhook url:

http://(jenkins_user):(jenkins_api_token)@(jenkins_server_address):(port)/job/(job_name)/build?delay=0sec

实际上,如果您按照 GitLab 插件的建议设置 Jenkins 作业,除非您使用此 webhook 而不是插件提供的 webhook,否则提交状态将在您的 GitLab 中更新。

请注意,上面的答案将在 url / Webhook 页面中公开您的密码或 API 密钥。

如果您不想使用该插件,则必须在 Jenkins 中定义一个用户并在 GibLab Webhook 上配置该用户。

如果只是为了测试,你也可以简单地在 Jenkins 全局设置上禁用身份验证,但这显然不推荐用于任何严重的事情。

您可以为此在 Jenkins 中添加一个特殊用户并相应地在 GitLab 中配置 Webhook,或者您可以取消选中全局 Jenkins 配置的 GitLab 部分中的复选框“为 '/project' 端点启用身份验证”。 但默认情况下应该取消选中。

正如 Jenkins Gitlab Plugin Github 上所说

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM