gitlabCommitStatus 损坏:无法更新项目 HTTP 400 错误请求的 Gitlab 提交状态

dev*_*ops 7 jenkins gitlab

我在 Jenkins 中间歇性地收到以下错误。到目前为止,一切都没有改变。Jenkins 版本 2.150.3 和 Gitlab 插件版本 1.5.11

20:31:01  Failed to update Gitlab commit status for project '10750': HTTP 400 Bad Request
Run Code Online (Sandbox Code Playgroud)

jenkins 服务器日志中的错误:

SEVERE: Failed to update Gitlab commit status for project '10750'
javax.ws.rs.BadRequestException: HTTP 400 Bad Request
        at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.handleErrorStatus(ClientInvocation.java:197)
        at org.jboss.resteasy.client.jaxrs.internal.proxy.extractors.DefaultEntityExtractorFactory$3.extractEntity(DefaultEn
tityExtractorFactory.java:50)
        at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invoke(ClientInvoker.java:104)
        at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:64)
        at com.dabsquared.gitlabjenkins.gitlab.api.impl.$Proxy152.changeBuildStatus(Unknown Source)
        at com.dabsquared.gitlabjenkins.gitlab.api.impl.ResteasyGitLabClient.changeBuildStatus(ResteasyGitLabClient.java:60)
        at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient$7.execute(AutodetectingGitLabClient.java:1
12)
        at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient$7.execute(AutodetectingGitLabClient.java:1
09)
        at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient$GitLabOperation.execute(AutodetectingGitLa
bClient.java:335)
        at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient$GitLabOperation.access$100(AutodetectingGi
tLabClient.java:332)
        at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.execute(AutodetectingGitLabClient.java:328
)
Run Code Online (Sandbox Code Playgroud)

sk1*_*lls 5

在调查这个问题后,我发现了这一点:

提交状态创建 (API):无法再使用 NAT 下带有“target_url”的链接

在我们的组织中,由于 Gitlab Community Edition 已更新到11.11.8,因此出现错误

Status: 400 Bad Request
Response body: {
  "message" : {
    "target_url" : [ "is blocked: Host cannot be resolved or invalid" ]
  }
}
Run Code Online (Sandbox Code Playgroud)

@devops 您使用的 Gitlab 版本是什么?你能提供 Jenkins 日志的响应正文吗?


Von*_*onC 1

看看jenkinsci/gitlab-plugin 问题 522的评论是否有帮助:

仅供其他可能偶然发现这一点的人使用。
我的问题是,我试图在我的主项目 SCM 签出之前描述 gitLabBuilds,然后再更新它们。
这产生了奇怪的副作用,即为包含我的 Jenkinsfile 的存储库创建 GitLab Pipeline 作业(与我的主存储库不同),因此尝试更新错误存储库的状态很可能导致此错误。

我花了一分钟时间来释放 gitlabBuilds 和 gitlabCommitStatus 更新最后签出的存储库,如果顺序错误,它将尝试更新 Jenkinsfile 存储库。


我相信如果您重新运行构建(手动重新发送挂钩或重建)到已合并/关闭的合并请求,也会发生这种情况。似乎您无法更新合并 PR 的状态,这是有道理的。可以为该场景添加一些信息性消息吗?


BadRequestException: HTTP 400 Bad Request当我们在管道中使用共享库时,总是会抛出 ,如此处所述
显然,Jenkins 克隆两个存储库来构建任何项目:(1) 共享库和 (2) 项目存储库。


阿斯洛jenkinsci/gitlab-plugin第885期

我们也看到过这个错误。
在我们的例子中,这是由于 Jenkins Web hook 在 GitLab 项目设置中为合并请求事件注册了两次。