Jenkins 自动提交审核(如果已验证和批准)

Jenkins 自动提交审核(如果已验证和批准),jenkins,gerrit,Jenkins,Gerrit,我有Gerrit2.5服务器和Jenkins服务器(带有Gerrit触发器) 对于一些分支,我配置了Jenkins-Gerrit触发器,这样,如果构建和测试成功,它不仅可以验证,还可以批准审查 我的问题是:如何配置Gerrit或Jenkins,以便Jenkins验证和批准的审查自动合并 尝试过的解决方案: 使用“构建后任务”Jenkins插件添加脚本以合并评论(如中所建议)。问题:它将生成与失败的测试合并 添加Gerrit“comment added”钩子进行检查,如果审查得到验证和批准,则合

我有Gerrit2.5服务器和Jenkins服务器(带有Gerrit触发器)

对于一些分支,我配置了Jenkins-Gerrit触发器,这样,如果构建和测试成功,它不仅可以验证,还可以批准审查

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

尝试过的解决方案:

  • 使用“构建后任务”Jenkins插件添加脚本以合并评论(如中所建议)。问题:它将生成与失败的测试合并
  • 添加Gerrit“comment added”钩子进行检查,如果审查得到验证和批准,则合并。问题:它很复杂,不能很好地配置为仅从指定的分支自动提交

我找到的解决方案是使用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 ..."

这是我目前使用的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")
}

$GIT\u COMMIT的内容是什么?它应该是COMMIT ID。您可以通过添加
manager.listener.logger.println(“GIT\u COMMIT:'$GIT\u COMMIT')将其打印出来。