Skip to content

Instantly share code, notes, and snippets.

@kumbasar
Forked from pkouman/jenkins_delete_builds.groovy
Last active June 10, 2021 17:07
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save kumbasar/9f45da525e9cf20ee48e624b2f9533fc to your computer and use it in GitHub Desktop.
Save kumbasar/9f45da525e9cf20ee48e624b2f9533fc to your computer and use it in GitHub Desktop.
Jenkins - Delete old builds script
MAX_BUILDS = 10 // max builds to keep
def jobs = Jenkins.instance.items;
for (job in jobs) {
println "Job: " + job.name
try {
if(job instanceof jenkins.branch.MultiBranchProject) {
println "Multibranch"
job = job.getJob("master")
}
def recent = job.builds.limit(MAX_BUILDS)
println "Recent Builds: " + recent
println "============================="
for (build in job.builds) {
if (!recent.contains(build) && !build.isBuilding()) {
println "Deleting: " + build
build.delete()
println ""
}
}
} catch(Exception ex) {
continue
}
}
@laluxgp
Copy link

laluxgp commented Jun 24, 2019

Lo resolví así

import jenkins.model.*
import hudson.model.*
import com.cloudbees.hudson.plugins.folder.*
import jenkins.branch.*
import org.jenkinsci.plugins.workflow.job.*
import org.jenkinsci.plugins.workflow.multibranch.*

/**

  • Función para eliminar los builds antiguos
  • @param item El elemento Jenkins actual a procesar, puede ser una carpeta o un proyecto.
  • @param numberOfBuildsToKeep El número total de builds para mantener en cada job
    */

def deleteOldBuilds(item, Integer numberOfBuildsToKeep) {
if (numberOfBuildsToKeep < 0) return

def sizeBuilds = getSizeBuildsOfJob(item)

while (sizeBuilds > numberOfBuildsToKeep) {
    build = getFirstBuildbyItem(item)
    echo 'Eliminando...... ' + build
    build.delete()
    sizeBuilds = getSizeBuildsOfJob(item)
}

}

def getSizeBuildsOfJob(item) {
return Jenkins.instance.getItemByFullName(item.fullName).builds.size()
}

def getFirstBuildbyItem(item) {
return item.getFirstBuild()
}

def listJobObjects(item, Integer numberOfBuildsToKeep) {
if(item instanceof Project) {
// echo 'PROYECTO: (' + item.getName() + ')'
deleteOldBuilds(item, numberOfBuildsToKeep)
} else if(item instanceof Folder) {
// echo ''
// echo 'CARPETA: (' + item.getName() + ')'
// echo '*************************************'
for (subItem in item.items) {
listJobObjects(subItem, numberOfBuildsToKeep)
}
} else if(item instanceof WorkflowMultiBranchProject) {
// echo 'MULTIBRANCH-PROYECTO: (' + item.getName() + ')'
for (subItem in item.items) {
listJobObjects(subItem, numberOfBuildsToKeep)
}
} else if(item instanceof WorkflowJob) {
// echo 'MULTIBRANCH-JOB: (' + item.getName() + ')'
deleteOldBuilds(item, numberOfBuildsToKeep)
} else if(item instanceof OrganizationFolder) {
// echo 'ORG-CARPETA: (' + item.getName() + ')'
for (subItem in item.items) {
listJobObjects(subItem, numberOfBuildsToKeep)
}
} else {
echo 'UNKNOWN: (' + item.getName() + ')'
echo 'CLASS: (' + item.getClass() + ')'
echo 'INSPECT: (' + item.inspect() + ')'
}
}

for (item in Jenkins.instance.items) {
echo ''
listJobObjects(item, 10)
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment