如何在jenkins gerrit触发器上发布自定义标签上的投票?

时间:2015-01-01 18:49:17

标签: jenkins jenkins-plugins gerrit

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

我发现在配置中有 Gerrit报告值部分(Jenkins - > Manager - > Gerrit Trigger - >点击你的gerrit"编辑"按钮)。 在该部分中,存在用于"验证"的硬编码子部分。和#34;代码审查"。另一个小节是" 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

来自docs:

  

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

  

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

如何添加新的&#34;参数&#34;喜欢或如何传递环境变量?

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

3 个答案:

答案 0 :(得分:11)

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

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

将以下脚本用作PostBuild-Action。

它会为你做的:

  • 收集必要的环境变量和工作状态
  • 构建反馈消息
  • 构建ssh命令
  • 执行ssh命令 - &gt;发送反馈给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 Trigger插件进行报告

答案 1 :(得分:3)

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

该插件目前(版本2.12)对它所知道的评论标签有点看法,它假定经过验证和代码审查。但是通过编辑已验证的命令,您可以更改Jenkins中的验证和代码审查在Gerrit中的含义。 例如

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

插件的开发人员之间已经开始讨论添加可配置的标签支持,但是代码审查和验证的假设在代码中运行得很深,所以它不是一个简单的解决方案。

答案 2 :(得分:0)

我增加了对自定义标签的支持(我公司的CI基础结构依赖Jenkins&Gerrit,再加上我们迫不及待想要此功能)

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

这使您可以从Gerrit Server配置页面添加自定义标签,并自定义EACH作业的每个报告值(配置-> Gerrit触发器->高级),同时注意插件的后台内部工作(Gerrit和Jenkins之间的通信) )

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

cc @ rsandell,@ spinus