任何人都有一个Jenkins管道脚本,可以填充自上次成功构建变量以来的所有更改?我正在使用git和一个多分支管道作业。如何获取自jenkins管道上次成功构建以来的更改?
回答
好吧,我设法凑齐了一些东西。我敢肯定,我可以更好地遍历数组,但这里就是我得到了现在:
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;
}
基于从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顺便说一句,以防你想深入一点。您应该可以将所有object.getSomeProperty()
调用转换为entry.someProperty
。
不错。有一个github回购与一些管道的例子,如果你关心contrubute:https://github.com/jenkinsci/pipeline-examples – CaptRespect
这不是在声明式管道风格,但脚本管道! – Lincoln
@Lincoln,是。你不能用声明来做。您需要做的是将其包装在脚本块中或从共享库中使用它。 – andsens
- 1. 如何获得自Jenkins上次构建以来的更新日志
- 2. 如何在Jenkins管道中获取成功/失败的构建信息?
- 3. tfs构建上次成功构建的电子邮件更改
- 4. 如何获取上次成功构建的版本号?
- 5. Jenkins - 如果构建失败,则部署上次成功构建的构件
- 6. 如何通过jenkins中的另一个管道作业构建并获取管道作业的构建日志
- 7. Jenkins管道作业构建
- 8. 如何获取自上次成功构建后使用Groovy的Jenkins提交信息?
- 9. 是否可以创建管道模板,以便Jenkins自动生成管道?
- 10. Jenkins管道:获取从站代理的构建输出
- 11. 在Jenkins管道中获取build.gradle中设置的变量构建
- 12. 在Jenkins管道中立即中止构建并获得成功状态
- 13. 如何从jenkins管道中的Artifactory buildInfo获取构建依赖关系
- 14. 如何获取在Jenkins管道中打破构建的个人列表
- 15. 如何获取对Jenkins中上次构建的文件的更改并通过电子邮件发送
- 16. Liquibase:如何导出自上次导入以来的更改?
- 17. 如何在构建成功之前重新构建Jenkins上的任务?
- 18. Jenkins构建管道调度触发器
- 19. CruiseControl.NET每晚构建If修改后自上次构建标签以来存在
- 20. Jenkins管道脚本 - 更改git分支
- 21. TFS从上次构建中获取SQL更改
- 22. 自动生成使用Jenkinsfile构建gradle的构建管道
- 23. 如何中止Jenkins管道构建,如果标签不匹配
- 24. 如何在Jenkins运行新工作之前完成整个管道的构建?
- 25. Jenkins管道中的自定义更改日志
- 26. 在Jenkins多分支管道上触发的重复构建
- 27. 删除构建管道上的旧版本分支(Jenkins)
- 28. 如何从Jenkins管道创建github PRs?
- 29. visual studio 2010上一次成功构建
- 30. 如何根据上次成功jenkins构建的时间发送自动电子邮件
但是不能和[tag:jenkins-pipeline]一起工作,我猜... – StephenKing
是的,我检查了一下,但无法弄清楚如何从JenkinsFile访问它 – CaptRespect