summaryrefslogtreecommitdiffstats
path: root/jenkins_jobs/builder.py
diff options
context:
space:
mode:
authorWayne Warren <waynr+launchpad@sdf.org>2016-05-22 22:44:11 -0700
committerWayne Warren <waynr+launchpad@sdf.org>2016-09-02 08:58:09 -0700
commite75062d10323ea0014ad27aaff0fb99a9e25a672 (patch)
tree37b5e512964c7dc6bcf3ebd8eb288d3c1a822592 /jenkins_jobs/builder.py
parent6853cf5ae7030fb82650a0ba5c6556e621f54313 (diff)
downloadpython-jenkins-job-builder-e75062d10323ea0014ad27aaff0fb99a9e25a672.tar.gz
python-jenkins-job-builder-e75062d10323ea0014ad27aaff0fb99a9e25a672.tar.xz
python-jenkins-job-builder-e75062d10323ea0014ad27aaff0fb99a9e25a672.zip
Merge builder.Builder and builder.Jenkins
Since both of these classes essentially build on basic functionality provided by jenkins.Jenkins, merge them into a single class. Name this class "JenkinsManager" to avoid confusion with jenkins.Jenkins. Also moves some tests for update timeout configuration into the tests.cmd.test_config module from tests.cmd.subcommand.test_update module, replacing those tests with skipped stubs as reminders to figure out a better way later. Change-Id: I13c17bc90e29e702e5e02992e93cf3cdc689731d
Diffstat (limited to 'jenkins_jobs/builder.py')
-rw-r--r--jenkins_jobs/builder.py58
1 files changed, 26 insertions, 32 deletions
diff --git a/jenkins_jobs/builder.py b/jenkins_jobs/builder.py
index a0cf5748..7f56d313 100644
--- a/jenkins_jobs/builder.py
+++ b/jenkins_jobs/builder.py
@@ -35,7 +35,7 @@ from jenkins_jobs.parallel import concurrent
from jenkins_jobs import utils
__all__ = [
- "Jenkins"
+ "JenkinsManager"
]
logger = logging.getLogger(__name__)
@@ -133,14 +133,26 @@ class CacheStorage(object):
"exit: %s" % (self.cachefilename, e))
-class Jenkins(object):
- def __init__(self, url, user, password, timeout=_DEFAULT_TIMEOUT):
+class JenkinsManager(object):
+
+ def __init__(self, jjb_config):
+ url = jjb_config.jenkins['url']
+ user = jjb_config.jenkins['user']
+ password = jjb_config.jenkins['password']
+ timeout = jjb_config.jenkins['timeout']
+
if timeout != _DEFAULT_TIMEOUT:
self.jenkins = jenkins.Jenkins(url, user, password, timeout)
else:
self.jenkins = jenkins.Jenkins(url, user, password)
+
+ self.cache = CacheStorage(jjb_config.jenkins['url'],
+ flush=jjb_config.builder['flush_cache'])
+
+ self._plugins_list = jjb_config.builder['plugins_info']
self._jobs = None
self._job_list = None
+ self._jjb_config = jjb_config
@property
def jobs(self):
@@ -181,13 +193,6 @@ 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.getAllItems())'
- ' { 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.
@@ -225,34 +230,21 @@ class Jenkins(object):
pass
return False
-
-class Builder(object):
- def __init__(self, jjb_config):
- self.jenkins = Jenkins(jjb_config.jenkins['url'],
- jjb_config.jenkins['user'],
- jjb_config.jenkins['password'],
- jjb_config.jenkins['timeout'])
- self.cache = CacheStorage(jjb_config.jenkins['url'],
- flush=jjb_config.builder['flush_cache'])
- self._plugins_list = jjb_config.builder['plugins_info']
-
- self.jjb_config = jjb_config
-
@property
def plugins_list(self):
if self._plugins_list is None:
- self._plugins_list = self.jenkins.get_plugins_info()
+ self._plugins_list = self.get_plugins_info()
return self._plugins_list
def delete_old_managed(self, keep=None):
- jobs = self.jenkins.get_jobs()
+ jobs = self.get_jobs()
deleted_jobs = 0
for job in jobs:
if job['name'] not in keep:
- if self.jenkins.is_managed(job['name']):
+ if self.is_managed(job['name']):
logger.info("Removing obsolete jenkins job {0}"
.format(job['name']))
- self.jenkins.delete_job(job['name'])
+ self.delete_job(job['name'])
deleted_jobs += 1
else:
logger.info("Not deleting unmanaged jenkins job %s",
@@ -265,22 +257,24 @@ class Builder(object):
if jobs is not None:
logger.info("Removing jenkins job(s): %s" % ", ".join(jobs))
for job in jobs:
- self.jenkins.delete_job(job)
+ self.delete_job(job)
if(self.cache.is_cached(job)):
self.cache.set(job, '')
self.cache.save()
def delete_all_jobs(self):
- jobs = self.jenkins.get_jobs()
+ jobs = self.get_jobs()
logger.info("Number of jobs to delete: %d", len(jobs))
- self.jenkins.delete_all_jobs()
+ script = ('for(job in jenkins.model.Jenkins.theInstance.getAllItems())'
+ ' { job.delete(); }')
+ self.jenkins.run_script(script)
# Need to clear the JJB cache after deletion
self.cache.clear()
def changed(self, job):
md5 = job.md5()
- changed = (self.jjb_config.builder['ignore_cache'] or
+ changed = (self._jjb_config.builder['ignore_cache'] or
self.cache.has_changed(job.name, md5))
if not changed:
logger.debug("'{0}' has not changed".format(job.name))
@@ -369,5 +363,5 @@ class Builder(object):
@concurrent
def parallel_update_job(self, job):
- self.jenkins.update_job(job.name, job.output().decode('utf-8'))
+ self.update_job(job.name, job.output().decode('utf-8'))
return (job.name, job.md5())