如何 post 对来自 jenkins gerrit 触发器的自定义标签进行投票?

How to post votes on custom labels from jenkins gerrit trigger?

我正在使用 jenkins gerrit-trigger 插件。它确实触发了工作。问题是工作完成后,jenkins 无法发送评论,因为我在 gerrit 中没有 'verified' 标签。

我发现在配置中有 Gerrit Reporting Values 部分(Jenkins -> Manager -> Gerrit Trigger -> 点击你的 gerrit "edit" 按钮)。 在该部分中,有 "Verify" 和 "Code Review" 的硬编码小节。另一个小节是 "Gerrit Verified Commands",命令如下:

gerrit review <CHANGE>,<PATCHSET> --message 'Build Successful <BUILDS_STATS>'  --verified <VERIFIED> --code-review <CODE_REVIEW>

如何在此处添加自定义标签?

我尝试将命令更改为:

gerrit review <CHANGE>,<PATCHSET> --message 'Build Successful <BUILDS_STATS>'  --acceptance-tests $ACCEPTANCE_TESTS_VOTE --code-quality $CODE_QUALITY_VOTE

来自文档:

The variables and will have the values defined above. The variable will have the URL to the build result.

You can also use any environment variable from the build that was started with the $ENV_VAR syntax.

如何添加新的"parameter"点赞或如何传递环境变量?

我试过使用EnvInject插件,但是好像环境变量没有填值(jenkins的报错信息说没有$VAR参数)

$ENV_VAR 语法仅可用于构建 started 消息,因为这是唯一一次在上下文中可能只有一个构建。

该插件目前(v. 2.12)对于它所知道的审查标签有点固执己见,它假设经过验证和代码审查。但是通过编辑经过验证的命令,您可以更改 Jenkins 中经过验证和代码审查在 Gerrit 中的含义。 例如

gerrit review <CHANGE>,<PATCHSET> --message 'Build Successful <BUILDS_STATS>'  --acceptance-tests <VERIFIED> --code-quality <CODE_REVIEW>

该插件的开发人员一直在讨论添加可配置标签支持,但代码审查和验证假设在代码中运行很深,因此修复起来并不容易。

这个问题很老了,但我遇到了同样的问题,想分享我的解决方案:

安装 Groovy Postbuild 插件: https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin

使用以下脚本作为 PostBuild-Action。

它会为你做:

  • 收集必要的环境变量和作业状态
  • 构建反馈消息
  • 构建 ssh 命令
  • 执行 ssh 命令 -> 向 gerrit 发送反馈

    //Collect all environment variables of the current build job
    def env = manager.build.getEnvironment(manager.listener)
    
    //Get Gerrit Change Number
    def change = env['GERRIT_CHANGE_NUMBER']
    
    //Get Gerrit Patch Number
    def patch = env['GERRIT_PATCHSET_NUMBER']
    
    //Get Url to current job
    def buildUrl = env['BUILD_URL']
    
    //Build Url to console output
    def buildConsoleUrl = buildUrl + "/console"
    
    //Verification will set to succeded (+1) and feedback message will be generated...
    def result = +1
    def message = "\\"Static code analysis succeeded - ${buildUrl}\\""
    
    //...except job failed (-1)...
    if (manager.build.result.isWorseThan(hudson.model.Result.SUCCESS)){
       result = -1
       message = "\\"Static code analysis failed - ${buildUrl}\\""
    }
    
    //...or job was aborted
    if (manager.build.result == hudson.model.Result.ABORTED){
       result = 0
       message = "\\"Static code analysis aborted - ${buildConsoleUrl}\\""
    }
    //Send Feedback to Gerrit via ssh
    //-i - Path to private ssh key
    def ssh_message = "ssh -i /path/to/jenkins/.ssh/key -p 29418 user@gerrit-host gerrit review ${change},${patch} --label=customLabel=${result} --message=${message}"
    
    manager.listener.logger.println(new ProcessBuilder('bash','-c',"${ssh_message}").redirectErrorStream(true).start().text)
    

我希望这能帮助您在不使用 Gerrit 触发器插件报告的情况下解决您的挑战

我通过将 gerrit 触发器配置的高级部分中的命令更改为例如

在自定义标签上发布 +1/-1

gerrit review <CHANGE>,<PATCHSET> --message 'Build Successful <BUILDS_STATS>' --label 'MyCustomVerifiedLabel=<VERIFIED>' --code-review <CODE_REVIEW>

我添加了对自定义标签的支持(我公司的 CI 基础架构依赖于 Jenkins 和 Gerrit,而且我们已经迫不及待地想要这个功能了)

Link 到拉取请求:https://github.com/jenkinsci/gerrit-trigger-plugin/pull/393/files 我建议检查我的版本并自己构建 .hpi,然后将其安装在您的 Jenkins 实例上。

这允许您从 Gerrit 服务器配置页面添加自定义标签并为每个作业自定义每个报告值(配置 -> Gerrit 触发器 -> 高级),同时处理插件的后台内部工作(Gerrit 之间的通信) & 詹金斯)

希望这对其他想要使用此功能的人有所帮助!

cc @rsandell, @spinus