【问题标题】:How to post votes on custom labels from jenkins gerrit trigger?如何从詹金斯格里特触发器发布自定义标签的投票?
【发布时间】:2015-02-28 06:42:07
【问题描述】:

我正在使用 jenkins gerrit-trigger 插件。它确实触发了工作。问题是工作完成后詹金斯无法发送评论,因为我在 gerrit 中没有“已验证”标签。

我发现在配置中有 Gerrit Reporting Values 部分(Jenkins -> Manager -> Gerrit Trigger -> 单击您的 gerrit“编辑”按钮)。 在该部分中有“验证”和“代码审查”的硬编码小节。另一个小节是“Gerrit 验证命令”,其中包含以下命令:

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

来自文档:

变量和将具有上面定义的值。该变量将具有构建结果的 URL。

您还可以使用以 $ENV_VAR 语法启动的构建中的任何环境变量。

如何添加新的“参数”或如何传递环境变量?

我尝试使用EnvInject插件,但似乎环境变量没有填充值(来自jenkins的错误消息说没有$VAR参数)。

【问题讨论】:

    标签: jenkins jenkins-plugins gerrit


    【解决方案1】:

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

    安装 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,但是下次我需要设置它时我肯定会使用这种方法(不仅适用于 gerrit),这实际上是很酷的通用詹金斯技巧。谢谢。
    【解决方案2】:

    我通过将 gerrit 触发器配置的高级部分中的命令更改为例如,在自定义标签上发布 +1/-1。

    gerrit review &lt;CHANGE&gt;,&lt;PATCHSET&gt; --message 'Build Successful &lt;BUILDS_STATS&gt;' --label 'MyCustomVerifiedLabel=&lt;VERIFIED&gt;' --code-review &lt;CODE_REVIEW&gt;

    【讨论】:

    • 我都不是 :) 直到我想在某个项目的两个标签上拥有两个选民并找到此文档:review.openstack.org/Documentation/cmd-review.html
    • 你们是按工作还是在顶级(服务器)配置上做到这一点的?我找不到在作业级别指定自定义命令的任何方法。在服务器级别的配置上更改它并不能解决同时具有已验证和“自定义”标签的问题,因为这两个标签对于任何项目都具有相同的值。只有我根本不使用“已验证”才有意义。好像和issues.jenkins-ci.org/browse/JENKINS-27873有联系吧?
    • @mateusz.grzechocinski 从我看来它只能在服务器级别配置,因为没有选项可以在作业级别配置它。因此,如果我们想添加第三个标签(除了 CR 和 V),我们几乎不知所措......唯一的其他选择是使用下面评论中的 ssh 脚本,或者以某种方式自己在 gerrit 中开发该功能-触发插件
    【解决方案3】:

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

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

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

    插件的开发人员之间已经讨论过添加可配置标签支持,但代码审查和验证假设深入代码中,因此修复起来并不容易。

    【讨论】:

      【解决方案4】:

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

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

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

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

      cc @rsandell, @spinus

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 2015-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多