我找到了一种似乎对我们有用的解决方案。它围绕着获取
currentBuild提交哈希值,然后是
lastSuccessfulBuild提交哈希值。首先,我们编写了一个实用程序方法来获取给定Jenkins构建对象的提交哈希:
def commitHashForBuild(build) { def scmAction = build?.actions.find { action -> action instanceof jenkins.scm.api.SCMRevisionAction } return scmAction?.revision?.hash}然后使用它来获取
lastSuccessfulBuild的哈希值:
def getLastSuccessfulCommit() { def lastSuccessfulHash = null def lastSuccessfulBuild = currentBuild.rawBuild.getPreviousSuccessfulBuild() if ( lastSuccessfulBuild ) { lastSuccessfulHash = commitHashForBuild(lastSuccessfulBuild) } return lastSuccessfulHash}最后将两者结合在一个
sh函数中以获取提交列表
def lastSuccessfulCommit = getLastSuccessfulCommit() def currentCommit = commitHashForBuild(currentBuild.rawBuild) if (lastSuccessfulCommit) { commits = sh( script: "git rev-list $currentCommit "^$lastSuccessfulCommit"", returnStdout: true ).split('n') println "Commits are: $commits" }然后,您可以根据需要使用
commits数组在Git中查询各种内容。例如,您可以使用此数据获取自上次成功构建以来所有已更改文件的列表。
我已将其放入一个完整的示例Jenkinsfile
Gist中,以显示它如何在上下文中融合在一起。
可能的改进是使用Java / Groovy本机Git库,而不是
sh逐步进行。



