我正在清理Jenkins(设置不正确),我需要删除比每个作业最新20个版本更旧的版本。
有没有办法使用脚本或其他东西自动执行此操作?
我找到了许多解决方案来删除特定作业的某些构建,但我似乎无法一次找到所有作业的任何内容。
非常感谢任何帮助。
答案 0 :(得分:13)
您可以使用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脚本控制台是一个很好的管理维护工具,通常是现有的脚本,可以执行类似于您想要的操作。
答案 1 :(得分:2)
有很多方法可以做到这一点
就个人而言,我会使用'丢弃旧版本'在作业配置
如果您有大量工作,可以使用CLI逐步完成所有工作添加
或者,configuration slicing plugin也可以大规模地为您执行此操作
答案 2 :(得分:2)
对于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()
}
}
}
}
答案 3 :(得分:1)
这可以通过多种方式完成。您可以尝试以下
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获取更多答案
答案 4 :(得分:1)
在运行@Dave Bacher的脚本时,我在Folders Plugin 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()
}
}
}
答案 5 :(得分:0)
我在Jenkins实例上运行建议时遇到问题。可能是因为它已被docker化。无论如何,事先使用基础bash解释器删除文件夹即可解决此问题。我还修改了脚本以保留180天的构建日志,并至少保留7个构建日志:
attempted relative import with no known parent package