Skip to content

Instantly share code, notes, and snippets.

@manavortex
Created April 17, 2025 08:31
Show Gist options
  • Save manavortex/37e722a2f104acaf6ff06234348c235e to your computer and use it in GitHub Desktop.
Save manavortex/37e722a2f104acaf6ff06234348c235e to your computer and use it in GitHub Desktop.
Jenkins: Delete old jobs

What does this do?

This Jenkins pipeline script will delete previously-run jobs.

How to configure

You can filter jobs by name or by containing folder:

Parametrized call

All parameters are string parameters.

Parameter Name Default Value Explanation
keep_build_number 1 How many builds do you want to keep?
job_name '' Filter jobs by name (contains, case sensitive)
folder_name '' Filter jobs by folder name (contains, case sensitive)
import jenkins.model.Jenkins
import hudson.model.Job
def getFolderNameFilter() {
try {
return env.folder_name
} catch (Exception e) {
// empty string time
}
return ''
}
def getJobNameFilter() {
try {
return env.job_name
} catch (Exception e) {
// empty string time
}
return ''
}
def getMaxBuilds() {
try {
return env.keep_build_number.toInteger()
} catch (Exception e) {
// 0
}
return 0
}
def folderNameFilter = getFolderNameFilter()
def jobNameFilter = getJobNameFilter()
def cleanJobs(job) {
if (jobNameFilter != '' && !job.getFullName().contains(jobNameFilter)) {
return
}
if (folderNameFilter != '' && !job.getFullName().contains(folderNameFilter)) {
return
}
def recent = job.builds.limit(getMaxBuilds())
for (build in job.builds) {
if (!recent.contains(build)) {
println "Deleting [ " + build + " ] ..."
build.delete()
}
}
}
void processFolder(com.cloudbees.hudson.plugins.folder.Folder folder, def jobs) {
if (folderNameFilter != '' && !folder.getFullName().contains(folderNameFilter)) {
return
}
folder.getItems().each {
if (it instanceof com.cloudbees.hudson.plugins.folder.Folder) {
processFolder(it, folderName)
} else {
jobs.add(it)
}
}
}
def allItems = hudson.model.Hudson.getInstance().getItems()
def jobs = []
for(int i=0; i<allItems.size(); i++){
def item = allItems[i]
println("Checking " .. i.getFullName())
if (item instanceof com.cloudbees.hudson.plugins.folder.Folder) {
processFolder(item, jobs)
} else {
jobs.add(item)
}
}
jobs.each {cleanJobs(it)}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment