我正在使用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参数)。
答案 0 :(得分:11)
这个问题已经很老了,但我遇到了同样的问题,想要分享我的解决方案:
安装Groovy Postbuild插件: https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin
将以下脚本用作PostBuild-Action。
它会为你做的:
执行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