每次提交我的git repo都会触发我的Jenkins管道的构建。
我想通过提交哈希来检索旧构建的buildNumber。我怎么能这样做?
我知道这些信息存在,因为我可以在UI中找到它。
我想要这个的一些背景: 当有人标记提交时,我想创建一个版本(通过标记泊坞窗图像)。每个构建都将推送包含构建号的图像。所以我想找出哪个构建号对应于该提交,以便找到我想要发布的图像。
答案 0 :(得分:5)
安装Lucene插件 https://wiki.jenkins.io/display/JENKINS/Lucene-Search 并且您将能够通过默认的Jenkins搜索栏通过提交哈希进行搜索! (但是阅读插件文档,对于旧版本,您需要重建数据库)
如果您想以编程方式执行此操作,可以使用jenkins api,例如http://jenkinsapi.readthedocs.io/en/latest/using_jenkinsapi.html#example-5-getting-version-information-from-a-completed-build
修改示例中的函数不是为了获得最新的成功构建,而是为了获得所有构建并获取它们的git哈希值,然后过滤此集合。
答案 1 :(得分:1)
我根据@akostadinov的位戳了一下,发现内部编号和其他好东西,但没有找到GIT_COMMIT。
也许这对其他人有用,所以我想分享一下我发现的东西。
使用http://yourjenkins:8080/script
打开管理脚本控制台,并亲自检查一下。
def job = hudson.model.Hudson.instance.getItem("Foo Project")
def builds = job.getBuilds()
def thisBuild = builds[0]
def fourBuildsAgo = builds[4]
println('env' + builds[0].getEnvironment().keySet() )
println('each job has previous job e.g "' + thisBuild.getPreviousBuild() + '"')
fourBuildsAgo.getChangeSets().each {
println('Num of commits in this build ' + (it.getLogs()).size() )
it.getLogs().each {
println('commit data : ' + it.getRevision() + ' ' + it.getAuthor() + ' ' + it.getMsg())
}
}
我用这个GitChangeSet API来探讨groovy中的方法。
此代码将获取并显示4个构建之前的每个提交的提交哈希。您可以根据需要使用此文本设置currentBuild.description的格式,该文本将显示在状态页面上。
这导致输出(隐藏了实际的提交详细信息)
each job has previous job e.g "Foo Project #191"
Num of commits in this build 8
commit data : 288f0e7d3664045bcd0618aacf32841416519d92 user1 fixing the build
commit data : b752ee12b3d804f9a674314bef4de5942d9e02f5 user2 Fix handling to the library foo
commit data : 9067fd040199abe32d75467734a7a4d0d9b6e8b2 user2 Implemented Foo Class
...
...
...
答案 2 :(得分:0)
如果要获取构建的提交ID,则可以使用groovy脚本,例如:
def job = hudson.model.Hudson.instance.getItem("My Job Name")
def builds = job.getBuilds()
然后对于您要克隆的每个git repo,您都可以通过以下方式进行修订
build.getEnvironment()["GIT_COMMIT"]
build.getEnvironment()["GIT_COMMIT_4"]
答案 3 :(得分:0)
build.actions.find { action -> action instanceof jenkins.scm.api.SCMRevisionAction }?.revision?.hash;
参考和信用:https://gist.github.com/ftclausen/8c46195ee56e48e4d01cbfab19c41fc0
答案 4 :(得分:-1)
如果我正确理解你的问题,那么你首先需要创建一个git钩子来触发新的构建。这部分在答案How do I react to new tags in git hooks?'中有所介绍,但如果您使用的是GitHub,BitBucket或Gitlab等,那么可能还有其他方法可以解决这个问题。
然后,当启动构建时,在Jenkins中存在作为变量“BUILD_NUMBER”提供的构建号。如果你想包含git标签名,那么你可以在脚本中使用它,那么似乎有几种方法:
通常,这些插件将创建一个可由脚本使用的环境变量。我没有提供更具体的例子,因为我不知道你的确切工具。