从GitLab到Jenkins的Webhook返回HTTP 404



我正在努力让我的Jenkins作业在推送到gitlab存储库时自动构建。为此,我使用詹金斯的"GitLab插件"。

以下是工作原理:

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

问题如下:我配置了我的Jenkins项目,它给了我一个可以与GitLab网络挂钩使用的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 Job,除了你使用这个webhook而不是插件提供的webhook之外,提交状态无论如何都会在你的GitLab中更新。

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

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

如果仅用于测试,您也可以简单地在Jenkins Global Settings上禁用身份验证,但对于任何严重的情况,显然不建议这样做。

您可以为此在Jenkins中添加一个特殊用户,并配置相应地删除GitLab中的Webhook,或者您可以取消选中该复选框"启用"/项目"端点的身份验证;在GitLab部分全局Jenkins配置的。但这应该由违约

正如Jenkins Gitlab插件Github 上所说

最新更新