我正在清理Jenkins(它设置不正确),我需要删除比每个作业最新的20个版本更旧的版本。
有没有办法使用脚本或其他东西自动化?
我找到了许多解决方案来删除特定作业的某些构建,但我似乎无法一次找到所有作业的任何内容。
任何帮助深表感谢。
您可以使用Jenkins Script Console迭代所有作业,获取最近N个列表并对其他作业执行某些操作。
import jenkins.model.Jenkins
import hudson.model.Job
MAX_BUILDS = 20
for (job in Jenkins.instance.items) {
println job.name
def recent = job.builds.limit(MAX_BUILDS)
for (build in job.builds) {
if (!recent.contains(build)) {
println "Preparing to delete: " + build
// build.delete()
}
}
}
Jenkins脚本控制台是一个很好的管理维护工具,并且通常有一个现有的脚本可以执行类似于您想要的操作。
有很多方法可以做到这一点
我个人会在作业配置中使用'discard old builds'
如果你有很多工作,你可以使用CLI逐步完成所有工作来添加它
另外还有configuration slicing plugin,它也会为您大规模地做这件事
对于Multibranch Pipelines,我稍微修改了Dave Bacher的脚本。使用此选项删除早于最新20版“master”分支的构建:
MAX_BUILDS = 20
for (job in Jenkins.instance.items) {
if(job instanceof jenkins.branch.MultiBranchProject) {
job = job.getJob("master")
def recent = job.builds.limit(MAX_BUILDS)
for (build in job.builds) {
if (!recent.contains(build)) {
println "Preparing to delete: " + build
// build.delete()
}
}
}
}
这可以通过多种方式完成。您可以尝试以下方法
ls> jobs.txt
现在,您可以使用for循环编写shell脚本
#!/bin/bash
##read the jobs.txt
for i in 'cat <pathtojobs.txt>'
do
curl -X POST http://jenkins-host.tld:8080/jenkins/job/$i/[1-9]*/doDeleteAll
done
以上删除所有工作
你也可以refer here获得更多答案
在运行@Dave Bacher的脚本时,我在文件夹插件6.6上遇到了问题No such property: builds for class: com.cloudbees.hudson.plugins.folder.Folder
改变它使用功能api
import jenkins.model.Jenkins
import hudson.model.Job
MAX_BUILDS = 5
Jenkins.instance.getAllItems(Job.class).each { job ->
println job.name
def recent = job.builds.limit(MAX_BUILDS)
for (build in job.builds) {
if (!recent.contains(build)) {
println "Preparing to delete: " + build
build.delete()
}
}
}