Jenkins Gerrit-Trigger 在成功完成作业后未报告 +1 已验证 运行

Jenkins Gerrit-Trigger not reporting +1 verified after successful job run

我目前正在尝试使用 Jenkins Gerrit-Trigger 发出“+1 已验证”,但由于某些原因 +1 失败了。

权限似乎是有序的,因为插件能够成功地向相关的 Gerrit 变更集发出“-1 Verified”和 "Build Started" 评论。

当工作成功时,“+1 已验证”永远不会出现。检查 Jenkins 日志显示与作业相关的最后一个条目显示 403 响应错误:

Jenkins 日志也显示相同的请求:

com.sonymobile.tools.gerrit.gerritevents.workers.rest.AbstractRestCommandJob run
SEVERE: Gerrit response: Forbidden

Gerrit 也收到请求和 403 响应:

"POST /a/changes/tdmdev~develop~Id917dda3449bf9af738ad7f122adaecba70004bd/revisions/7eab7e90c6b7e66f23faaac7cbfd40d8c9c93726/review HTTP/1.1" 403 46 - "Apache-HttpClient/4.5.2 (Java/1.8.0_77)"

我已经测试过 API 是否有任何古怪的事情发生,并且使用 Gerrit 日志中的 URL 成功报告了“+1 验证”:

curl -v -X POST -d '{"reviewer":"srv_devops_jenkins","labels":{"Verified":"+1"}}' -H "Content-Type: application/json" --user "srv_devops_jenkins:***" --digest http://foobar.com:8080/a/changes/tdmdev~develop~Id917dda3449bf9af738ad7f122adaecba70004bd/revisions/7eab7e90c6b7e66f23faaac7cbfd40d8c9c93726/review

Gerrit 触发器配置为支持 RESTClient 请求,我确保了以下内容:

我成功的唯一方法是禁用 "REST API" 并通过 SSH 连接发出请求,唯一的缺点是我们需要在自定义标签上发布 +1,这是最好的我的知识不通过 Gerrit-Trigger 通过 SSH 得到支持。

Versions:
Jenkins: 2.48
Gerrit-Trigger: 2.23.0
Gerrit: 2.12

感谢您提供的任何帮助。

简而言之,这是 Jenkins 用户的 Gerrit 权限问题。

通过 RESTAPI 提交请求时的 Gerrit 触发器包括 "Verify" 和 "Code Review" 投票。现在我们的 Jenkins 用户只有 Verify 权限,所以任何 "Code Review" 修改都被禁止(解释 403 响应代码)。

现在作为一种解决方案,简单地授予 Jenkins 用户 "Code Review" 权限是不切实际的。相反,有一个选项可以在 Jenkins 作业中配置 Gerrit 投票设置:

"Gerrit Trigger" > 点击 "Advanced..." > "Gerrit Reporting Values"

在 "Verify" 标题下,添加“1”表示成功,同时确保所有其他字段为空允许 RESTAPI 仅在构建后发送验证 +1 投票。

在 Jenkins >> Gerrit 触发器 >> 您的服务器名称 >> Gerrit 报告值 >> 高级 >> 重置 api,请勾选“启用已验证”。