Jenkins delete builds older than latest 20 builds for all jobs

Fadi picture Fadi · Feb 24, 2016 · Viewed 12.9k times · Source

I am in the process of cleaning up Jenkins (it was setup incorrectly) and I need to delete builds that are older than the latest 20 builds for every job.

Is there any way to automate this using a script or something?

I found many solutions to delete certain builds for specific jobs, but I can't seem to find anything for all jobs at once.

Any help is much appreciated.

Answer

Dave Bacher picture Dave Bacher · Feb 24, 2016

You can use the Jenkins Script Console to iterate through all jobs, get a list of the N most recent and perform some action on the others.

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()
    }
  }
}

The Jenkins Script Console is a great tool for administrative maintenance like this and there's often an existing script that does something similar to what you want.