谁有一个Jenkins Pipeline脚本,可以将自上次成功构建以来的所有更改填充到一个变量中?我正在使用git和一个多分支管道作业。
发布于 2016-07-05 23:10:22
我设法拼凑了一些东西。我非常确定,你可以更好地迭代数组,但这是我现在得到的:
node('Android') {
passedBuilds = []
lastSuccessfulBuild(passedBuilds, currentBuild);
def changeLog = getChangeLog(passedBuilds)
echo "changeLog ${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;
}
发布于 2017-08-04 21:03:54
根据CaptRespect的回答,我想出了以下脚本用于声明性管道:
def changes = "Changes:\n"
build = currentBuild
while(build != null && build.result != 'SUCCESS') {
changes += "In ${build.id}:\n"
for (changeLog in build.changeSets) {
for(entry in changeLog.items) {
for(file in entry.affectedFiles) {
changes += "* ${file.path}\n"
}
}
}
build = build.previousBuild
}
echo changes
在stage->when->expression
部件中,只有在某些文件发生更改时才运行阶段,这一点非常有用。不过,我还没有讲到这一部分,我很乐意从这个库中创建一个共享库,并向它传递一些要检查的全局模式。
编辑:Check the docs btw,如果你想更深入一点的话。您应该能够仅将所有object.getSomeProperty()
调用转换为entry.someProperty
。
发布于 2020-05-06 09:55:19
这是我使用的:
def listFilesForBuild(build) {
def files = []
currentBuild.changeSets.each {
it.items.each {
it.affectedFiles.each {
files << it.path
}
}
}
files
}
def filesSinceLastPass() {
def files = []
def build = currentBuild
while(build.result != 'SUCCESS') {
files += listFilesForBuild(build)
build = build.getPreviousBuild()
}
return files.unique()
}
def files = filesSinceLastPass()
https://stackoverflow.com/questions/38084806
复制相似问题