Mahdi Yusuf
Mahdi Yusuf

Reputation: 21038

How do I clear my Jenkins/Hudson build history?

I recently updated the configuration of one of my hudson builds. The build history is out of sync. Is there a way to clear my build history?

Please and thank you

Upvotes: 92

Views: 140870

Answers (18)

Devrishi Bhardwaj
Devrishi Bhardwaj

Reputation: 1

Go to your Jenkins home page → Manage Jenkins → Script Console

def jobName = "copy_folder"  
def job = Jenkins.instance.getItem(jobName)  
def maxBuildNumber = job.getBuilds().collect { it.number }.max() ?: 0
job.getBuilds().each { it.delete() }  
job.nextBuildNumber = maxBuildNumber + 1   
job.save()

Upvotes: 0

Shivam Anand
Shivam Anand

Reputation: 1611

If you are looking for a solution where you have job inside a Folder you can use getItemByFullName function. It also supports white space in folder and job name.

def jobName = "folder_name/job_name"
def job = Jenkins.instance.getItemByFullName(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

Upvotes: 0

JRichardsz
JRichardsz

Reputation: 16564

Tested on jenkins 2.293 over linux. It will remove all the build logs but not the corellative build number

cd /var/lib/jenkins/jobs
find . -name "builds" -exec rm -rf {} \;

Be careful with this command because it executes a rm -rf on each find result. You could exec this first to validate if the result are only the builds folder of you jobs

find . -name "builds"

Upvotes: 0

msahin
msahin

Reputation: 1760

Go to "Manage Jenkins" > "Script Console"

Run below:

def jobName = "build_name"  
def job = Jenkins.instance.getItem(jobName)  
job.getBuilds().each { it.delete() }  
job.save()

Upvotes: 2

Aytunc Beken
Aytunc Beken

Reputation: 111

Deleting directly from file system is not safe. You can run the below script to delete all builds from all jobs ( recursively ).

def numberOfBuildsToKeep = 10
Jenkins.instance.getAllItems(AbstractItem.class).each {
  if( it.class.toString() != "class com.cloudbees.hudson.plugins.folder.Folder" && it.class.toString() != "class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
    println it.name
    builds = it.getBuilds()
    for(int i = numberOfBuildsToKeep; i < builds.size(); i++) {
        builds.get(i).delete()
      println "Deleted" + builds.get(i)
    }
  }
}

Upvotes: 2

Rahul khanvani
Rahul khanvani

Reputation: 401

This one is the best option available.

Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }

This code will delete all Jenkins Job build history.

Upvotes: 8

metala
metala

Reputation: 71

If you want to clear the build history of MultiBranchProject (e.g. pipeline), go to your Jenkins home page → Manage Jenkins → Script Console and run the following script:

def projectName = "ProjectName"
def project = Jenkins.instance.getItem(projectName)
def jobs = project.getItems().each {
  def job = it
  job.getBuilds().each { it.delete() }
  job.nextBuildNumber = 1
  job.save()
}

Upvotes: 7

ATrubka
ATrubka

Reputation: 4004

Using Script Console.

In case the jobs are grouped it's possible to either give it a full name with forward slashes:

getItemByFullName("folder_name/job_name") 
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

or traverse the hierarchy like this:

def folder = Jenkins.instance.getItem("folder_name")
def job = folder.getItem("job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

Upvotes: 3

Erwan Legrand
Erwan Legrand

Reputation: 4415

Here is another option: delete the builds with cURL.

$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

The above deletes build #1 to #56 for job myJob.

If authentication is enabled on the Jenkins instance, a user name and API token must be provided like this:

$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

The API token must be fetched from the /me/configure page in Jenkins. Just click on the "Show API Token..." button to display both the user name and the API token.

Edit: one might have to replace doDeleteAll by doDelete in the URLs above to make this work, depending on the configuration or the version of Jenkins used.

Upvotes: 24

RampantBadger
RampantBadger

Reputation: 21

If using the Script Console method then try using the following instead to take into account if jobs are being grouped into folder containers.

def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)

or

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)

Upvotes: 1

Nayana Adassuriya
Nayana Adassuriya

Reputation: 24766

This answer is for Jenkins

  1. Go to your Jenkins home page → Manage JenkinsScript Console

    Enter image description here

  2. Run the following script there. Change copy_folder to your project name

Code:

def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

My post

Upvotes: 84

William Leara
William Leara

Reputation: 10697

If you click Manage Hudson / Reload Configuration From Disk, Hudson will reload all the build history data.

If the data on disk is messed up, you'll need to go to your %HUDSON_HOME%\jobs\<projectname> directory and restore the build directories as they're supposed to be. Then reload config data.

If you're simply asking how to remove all build history, you can just delete the builds one by one via the UI if there are just a few, or go to the %HUDSON_HOME%\jobs\<projectname> directory and delete all the subdirectories there -- they correspond to the builds. Afterwards restart the service for the changes to take effect.

Upvotes: 51

Manish Agrawal
Manish Agrawal

Reputation: 794

Go to the %HUDSON_HOME%\jobs\<projectname> remove builds dir and remove lastStable, lastSuccessful links, and remove nextBuildNumber file.

After doing above steps go to below link from UI
Jenkins-> Manage Jenkins -> Reload Configuration from Disk

It will do as you need

Upvotes: 1

ort11
ort11

Reputation: 3349

Here is how to delete ALL BUILDS FOR ALL JOBS...... using the Jenkins Scripting.

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 

Upvotes: 12

rjohnston
rjohnston

Reputation: 7373

Use the script console (Manage Jenkins > Script Console) and something like this script to bulk delete a job's build history https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

That script assumes you want to only delete a range of builds. To delete all builds for a given job, use this (tested):

// change this variable to match the name of the job whose builds you want to delete
def jobName = "Your Job Name"
def job = Jenkins.instance.getItem(jobName)

job.getBuilds().each { it.delete() }
// uncomment these lines to reset the build number to 1:
//job.nextBuildNumber = 1
//job.save()

Upvotes: 119

Rutger Huijsmans
Rutger Huijsmans

Reputation: 2408

Another easy way to clean builds is by adding the Discard Old Plugin at the end of your jobs. Set a maximum number of builds to save and then run the job again:

https://wiki.jenkins-ci.org/display/JENKINS/Discard+Old+Build+plugin

Upvotes: 1

Nitish
Nitish

Reputation: 1

Navigate to: %JENKINS_HOME%\jobs\jobName

Open the file "nextBuildNumber" and change the number. After that reload Jenkins configuration. Note: "nextBuildNumber" file contains the next build no that will be used by Jenkins.

Upvotes: 0

the_mandrill
the_mandrill

Reputation: 30862

You could modify the project configuration temporarily to save only the last 1 build, reload the configuration (which should trash the old builds), then change the configuration setting again to your desired value.

Upvotes: 9

Related Questions