我在其中一个需要在Windows和Linux上构建的项目中创建了两个标签,因此该项目的project.config现在如下所示
[label "Verified"]
function = NoBlock
[label "Verified-Windows"]
function = MaxWithBlock
value = -1 Fails
value = 0 No score
value = +1 Verified
[label "Verified-Unix"]
function = MaxWithBlock
value = -1 Fails
value = 0 No score
value = +1 Verified
这是按预期工作的。提交要求一个成功的构建报告验证 - 窗口,另一个验证 - linux [1]。
然而,这两个版本现在由相同的gerrit事件触发(来自'不同的服务器,请参阅注释),但是当他们报告回来时,只有两个标签中的一个'幸存&#39 ;
好像,插件会整理两条消息,这些消息会合并到一条评论中,并且只接受第一个要设置的标签。
这是设计还是错误?我可以解决这个问题吗? 这是使用旧版本的触发器:2.11.1
[1]我通过添加多个服务器然后重新配置通过SSH发送回gerrit的消息来实现此功能。这很麻烦而且非常重要。我认为工作应该能够覆盖成功构建将在gerrit上设置的标签。
答案 0 :(得分:2)
这可以通过使用多个用户名来解决,因此标签上的判断不会混淆。但是,这只是部分令人满意,因为同一服务器的多个服务器连接也会复制事件流中的事件。
我目前正在研究jenkins的gerrit触发器插件的补丁,以解决这个问题,并且可以更有效地使用不同的标签。
答案 1 :(得分:1)
也许你可以通过使用post build groovy脚本来解决这个挑战。 我在另一个主题上提供了一个示例:https://stackoverflow.com/a/32825278
更具体,如arman1991所述
安装Groovy Postbuild插件: https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin
在每个作业中使用以下示例脚本作为PostBuild操作。根据您的Linux验证需要对其进行修改。
它会为你做的:
执行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 = "\\\"Verification for Windows succeeded - ${buildUrl}\\\""
//...except job failed (-1)...
if (manager.build.result.isWorseThan(hudson.model.Result.SUCCESS)){
result = -1
message = "\\\"Verification for Windows failed - ${buildUrl}\\\""
}
//...or job is aborted
if (manager.build.result == hudson.model.Result.ABORTED){
result = 0
message = "\\\"Verification for Windows 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=verified-Windows=${result} --message=${message}"
manager.listener.logger.println(new ProcessBuilder('bash','-c',"${ssh_message}").redirectErrorStream(true).start().text)
我希望这可以帮助您解决您的挑战,而无需使用Gerrit Trigger插件来报告结果。