From 67de07ceed124b244107aa977bcd3e033db1e123 Mon Sep 17 00:00:00 2001 From: Khai Do Date: Tue, 7 Jul 2015 10:23:39 -0700 Subject: [PATCH] Improve delete all job performance delete-all command was deleting one job at a time using the jenkins doDelete rest endpoint which is very slow. Change Ia4fbfca970165 allows us to execute a groovy script on the jenkins server to do the same thing. The only difference is that running the script on the server will delete all jobs much faster. As a data point: I added all (~5,000) openstack jobs to my jenkins server. The previous delete_all took many hours to delete all the jobs while the script method did it in a matter of seconds. Change-Id: Id7f7dfb567997e042fe0f783e54680482fefdc15 depends-on: Ia4fbfca970165d890d7e076f47ddcde7633afa9b --- jenkins_jobs/builder.py | 10 ++++++++-- requirements.txt | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/jenkins_jobs/builder.py b/jenkins_jobs/builder.py index c55731345..b1d504e34 100644 --- a/jenkins_jobs/builder.py +++ b/jenkins_jobs/builder.py @@ -142,6 +142,13 @@ class Jenkins(object): logger.info("Deleting jenkins job {0}".format(job_name)) self.jenkins.delete_job(job_name) + def delete_all_jobs(self): + # execute a groovy script to delete all jobs is much faster than + # using the doDelete REST endpoint to delete one job at a time. + script = ('for(job in jenkins.model.Jenkins.theInstance.getProjects())' + ' { job.delete(); }') + self.jenkins.run_script(script) + def get_plugins_info(self): """ Return a list of plugin_info dicts, one for each plugin on the Jenkins instance. @@ -275,8 +282,7 @@ class Builder(object): def delete_all_jobs(self): jobs = self.jenkins.get_jobs() logger.info("Number of jobs to delete: %d", len(jobs)) - for job in jobs: - self.delete_job(job['name']) + self.jenkins.delete_all_jobs() def update_job(self, input_fn, jobs_glob=None, output=None): self.load_files(input_fn) diff --git a/requirements.txt b/requirements.txt index 688096d53..7e7f661c6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,5 +2,5 @@ argparse ordereddict six>=1.5.2 PyYAML -python-jenkins>=0.4.1 +python-jenkins>=0.4.8 pbr>=0.8.2,<2.0