问题描述
在Jenkins Pipeline中,你已经能够通过以下方式获取当前构建的变更日志:
def changeLogSets = currentBuild.changeSets
但你是否能够获取自上次成功构建以来的所有变更日志呢?
解决方案
请注意以下操作可能涉及版本差异,请根据实际情况做好备份。
方案1 – 使用Jenkins Pipeline脚本
以下是一个使用Jenkins Pipeline脚本的示例,可以获取自上次成功构建以来的所有变更日志。
node {
def passedBuilds = []
lastSuccessfulBuild(passedBuilds, currentBuild)
def changeLog = getChangeLog(passedBuilds)
echo "Change Log since last successful build:\n${changeLog}"
}
def lastSuccessfulBuild(passedBuilds, build) {
if ((build != null) && (build.result != 'SUCCESS')) {
passedBuilds.add(build)
lastSuccessfulBuild(passedBuilds, build.getPreviousBuild())
}
}
@NonCPS
def getChangeLog(passedBuilds) {
def log = ""
for (int x = 0; x < passedBuilds.size(); x++) {
def currentBuild = passedBuilds[x];
def changeLogSets = currentBuild.rawBuild.changeSets
for (int i = 0; i < changeLogSets.size(); i++) {
def entries = changeLogSets[i].items
for (int j = 0; j < entries.length; j++) {
def entry = entries[j]
log += "* ${entry.msg} by ${entry.author} \n"
}
}
}
return log
}
上述脚本会获取自上次成功构建以来的所有变更日志,并以Markdown格式显示。
方案2 – 使用”Changes Since Last Success Plugin”
另外,你也可以尝试使用”Changes Since Last Success Plugin”,但需要注意这是一个独立的插件,可能无法直接与Pipeline一起使用。插件详情请参考:Changes Since Last Success Plugin
以上两种方案都能帮助你获取自上次成功构建以来的变更日志,你可以根据实际需求选择其中之一。
正文完