3

我有 Gerrit 2.5 服务器和 Jenkins 服务器(带有 Gerrit Trigger)。

对于一些分支,我配置了 Jenkins Gerrit Trigger,如果构建和测试成功,它不仅会验证而且还会批准评论。

我的问题是:如何配置 Gerrit 或 Jenkins,以便 Jenkins 验证和批准的审查自动合并?

尝试过的解决方案:

  • 使用“Post Build Task”Jenkins 插件添加一个脚本来合并评论(如Gerrit 中所建议的 - 如何在 Jenkins 运行后自动发布更改)。问题:它将构建与失败的测试合并。
  • 添加 Gerrit "comment-added" 钩子来检查,如果一个评论被验证和批准,然后合并。问题:它很复杂,不能很好地配置为只从指定的分支自动提交。
4

2 回答 2

3

这是我目前使用 gerrit 2.10-rc0 的有效命令

if(manager.build.result.isBetterThan(hudson.model.Result.UNSTABLE)) {
    def cmd = 'ssh -p 29418 $host gerrit review --verified +1 --code --review +2 --submit $GERRIT_CHANGE_NUMBER,$GERRIT_PATCHSET_NUMBER'
    cmd = manager.build.environment.expand(cmd)
    manager.listener.logger.println("Merge review: '$cmd'")
    def p = "$cmd".execute()
    manager.listener.logger.println(p.in.text)
    manager.addShortText("M")
}
于 2014-10-16T17:43:59.650 回答
3

我找到的解决方案是使用 Groovy Postbuild 插件。在 JUnit 构建后操作之后执行的以下脚本可以解决问题:

if(manager.build.result.isBetterThan(hudson.model.Result.UNSTABLE)) {
    def cmd = 'ssh -p 29418 HOST gerrit review --verified +1 --code-review +2 --submit --project $GERRIT_PROJECT $GIT_COMMIT'
    cmd = manager.build.environment.expand(cmd)
    manager.listener.logger.println("Merge review: '$cmd'")
    def p = "$cmd".execute()
    manager.listener.logger.println(p.in.text)
    manager.addShortText("M")
}

您的 Jenkins 帐户当然需要 +1 验证、+2 审核和提交权限。您还必须设置公钥身份验证。

在 Windows 上:您可以使用以下命令从 git 发行版运行 ssh

"C:\Program Files (x86)\Git\bin\sh.exe" --login -c "ssh -p 29418 HOST ..."
于 2013-07-22T07:30:41.503 回答