如何获取GitChangeSet对象的存储库名称或URL?

时间:2018-01-10 00:54:11

标签: git jenkins groovy jenkins-groovy

我有一个GitChangeSet对象(最终来自构建)。我想找到与该提交相关联的存储库名称或URL。但是,该对象的所有属性似乎都没有暗示这个提交最终来自何处。 E.g:

affectedFiles=[hudson.plugins.git.GitChangeSet$Path@2a7ac0cb, hudson.plugins.git.GitChangeSet$Path@1d9fb12a, hudson.plugins.git.GitChangeSet$Path@3b47e461, hudson.plugins.git.GitChangeSet$Path@35be1e86]
comment=CF-703 - remove testing-only hostsfile entry that caused "hostname -f"
to return "localhost"

date=2017-12-19 16:25:17 -0700
id=cfc01dfbf1015496074c2c1e6c9663cfb0f49751
commitId=cfc01dfbf1015496074c2c1e6c9663cfb0f49751
branch=null
msgEscaped=CF-703 - remove testing-only hostsfile entry that caused "hostname -f"
timestamp=1513725917000
authorName=hendrenj
parentCommit=bf4b919e74c635c61c4761134d6b53445829593d
msg=CF-703 - remove testing-only hostsfile entry that caused "hostname -f"
class=class hudson.plugins.git.GitChangeSet
msgAnnotated=CF-703 - remove testing-only hostsfile entry that caused "hostname -f"
commentAnnotated=CF-703 - remove testing-only hostsfile entry that caused &quot;hostname -f&quot;<br>to return &quot;localhost&quot;<br>
revision=cfc01dfbf1015496074c2c1e6c9663cfb0f49751
paths=[hudson.plugins.git.GitChangeSet$Path@2a7ac0cb, hudson.plugins.git.GitChangeSet$Path@1d9fb12a, hudson.plugins.git.GitChangeSet$Path@3b47e461, hudson.plugins.git.GitChangeSet$Path@35be1e86]
createAccountBasedOnEmail=false
affectedPaths=[recipes/default_vhost.rb, metadata.rb, test/integration/shared/serverspec/default_vhost/default_vhost.rb, Policyfile.lock.json]
authorEmail=*******@*******.***
parent=hudson.plugins.git.GitChangeSetList@2eb9acad
author=Jay Hendren

我通过迭代build.changeSets得到了这个提交对象(我相信它来自类hudson.model.AbstractBuild)。我知道这个特定的提交来自一个全局的共享库存储库,而不是与该构建相关的主存储库,但我没有看到任何明显的方式以编程方式提取该信息。 如何以编程方式确定GitChangeSet个对象(或hudson.model.AbstractBuild.changeSets中的其他对象)来自哪个存储库?

对于上下文,我正在为失败的构建开发一个电子邮件报告,其中包括收集与失败的构建相关的提交列表。由于我的作业之间存在复杂的上游/下游关系,因此一个存储库中的提交可能会触发一系列构建,因为成功构建会触发依赖于上游作业的下游作业。此外,还有其他与我的构建相关联的存储库,特别是全局共享库存储库。我希望我的报告能够提及哪些提交最终要对导致当前版本的一系列构建负责。到目前为止,找到这些上游提交并没有太痛苦(感谢UpstreamJobCause),但我已经开始决定最终来自哪些提交。如果你不知道我所说的问题的答案,我将不胜感激。在评论中对这个问题的替代方法提出任何建议。

3 个答案:

答案 0 :(得分:1)

使用getChangeSetLink为您构建URL。这样,您无需对URL的任何部分进行硬编码。

build.changeSets.each { changeSetList ->
  def browser = changeSetList.browser
  changeSetList.items.each { changeSet -> 
    println browser.getChangeSetLink(changeSet)
  }
}

答案 1 :(得分:0)

您可以使用下面的代码获取提交URL,这些代码可以在jenkins脚本控制台中进行测试

// Jenkins
//  .instance
//  .getItem('JobName')
//  .getBuild('buildnumber')
build
 .changeSets.each{ changeSetList ->
   changeSetList.items.each{ changeSet -> 
     println "${changeSetList.browser.repoUrl}commit/${changeSet.commitId}"
   }
 }

答案 2 :(得分:0)

有时可以做到这一点-给定名为GitChangeSet的{​​{1}}对象:

commit

回购URL附加到commit.getParent().getBrowser().getRepoUrl() 的实例上,因此您的作业配置必须为存储库源设置浏览器才能正常工作(默认的“自动检测浏览器”选项通常运行良好)。