Added ignore-cache and flush-cache options
- ignore-cache will ignore the cache of the specified jobs and update them no matter what - flush cache will entirely flush the cache before updating, no matter which jobs are specified Change-Id: I345349ccfe296a5a57360366497400a859b98b42 Signed-off-by: David Caro <dcaroest@redhat.com>
This commit is contained in:
parent
a4a01038cd
commit
0274803af6
@ -201,7 +201,7 @@ class YamlParser(object):
|
||||
def getXMLForJob(self, data):
|
||||
kind = data.get('project-type', 'freestyle')
|
||||
for ep in pkg_resources.iter_entry_points(
|
||||
group='jenkins_jobs.projects', name=kind):
|
||||
group='jenkins_jobs.projects', name=kind):
|
||||
Mod = ep.load()
|
||||
mod = Mod(self.registry)
|
||||
xml = mod.root_xml(data)
|
||||
@ -224,7 +224,7 @@ class ModuleRegistry(object):
|
||||
self.global_config = config
|
||||
|
||||
for entrypoint in pkg_resources.iter_entry_points(
|
||||
group='jenkins_jobs.modules'):
|
||||
group='jenkins_jobs.modules'):
|
||||
Mod = entrypoint.load()
|
||||
mod = Mod(self)
|
||||
self.modules.append(mod)
|
||||
@ -286,7 +286,8 @@ class ModuleRegistry(object):
|
||||
|
||||
# Look for a component function defined in an entry point
|
||||
for ep in pkg_resources.iter_entry_points(
|
||||
group='jenkins_jobs.{0}'.format(component_list_type), name=name):
|
||||
group='jenkins_jobs.{0}'.format(component_list_type),
|
||||
name=name):
|
||||
func = ep.load()
|
||||
func(parser, xml_parent, component_data)
|
||||
else:
|
||||
@ -320,20 +321,18 @@ class XmlJob(object):
|
||||
|
||||
|
||||
class CacheStorage(object):
|
||||
def __init__(self, jenkins_url):
|
||||
def __init__(self, jenkins_url, flush=False):
|
||||
cache_dir = self.get_cache_dir()
|
||||
# One cache per remote Jenkins URL:
|
||||
host_vary = re.sub('[^A-Za-z0-9\-\~]', '_', jenkins_url)
|
||||
self.cachefilename = os.path.join(
|
||||
cache_dir, 'cache-host-jobs-' + host_vary + '.yml')
|
||||
try:
|
||||
yfile = file(self.cachefilename, 'r')
|
||||
except IOError:
|
||||
if flush or not os.path.isfile(self.cachefilename):
|
||||
self.data = {}
|
||||
return
|
||||
self.data = yaml.load(yfile)
|
||||
with file(self.cachefilename, 'r') as yfile:
|
||||
self.data = yaml.load(yfile)
|
||||
logger.debug("Using cache: '{0}'".format(self.cachefilename))
|
||||
yfile.close()
|
||||
|
||||
@staticmethod
|
||||
def get_cache_dir():
|
||||
@ -393,10 +392,11 @@ class Jenkins(object):
|
||||
|
||||
class Builder(object):
|
||||
def __init__(self, jenkins_url, jenkins_user, jenkins_password,
|
||||
config=None):
|
||||
config=None, ignore_cache=False, flush_cache=False):
|
||||
self.jenkins = Jenkins(jenkins_url, jenkins_user, jenkins_password)
|
||||
self.cache = CacheStorage(jenkins_url)
|
||||
self.cache = CacheStorage(jenkins_url, flush=flush_cache)
|
||||
self.global_config = config
|
||||
self.ignore_cache = ignore_cache
|
||||
|
||||
def delete_job(self, name):
|
||||
self.jenkins.delete_job(name)
|
||||
@ -440,11 +440,11 @@ class Builder(object):
|
||||
continue
|
||||
md5 = job.md5()
|
||||
if (self.jenkins.is_job(job.name)
|
||||
and not self.cache.is_cached(job.name)):
|
||||
and not self.cache.is_cached(job.name)):
|
||||
old_md5 = self.jenkins.get_job_md5(job.name)
|
||||
self.cache.set(job.name, old_md5)
|
||||
|
||||
if self.cache.has_changed(job.name, md5):
|
||||
if self.cache.has_changed(job.name, md5) or self.ignore_cache:
|
||||
self.jenkins.update_job(job.name, job.output())
|
||||
self.cache.set(job.name, md5)
|
||||
else:
|
||||
|
@ -49,6 +49,14 @@ def main():
|
||||
parser.add_argument('--conf', dest='conf', help='Configuration file')
|
||||
parser.add_argument('-l', '--log_level', dest='log_level', default='info',
|
||||
help="Log level (default: %(default)s)")
|
||||
parser.add_argument(
|
||||
'--ignore-cache', action='store_true',
|
||||
dest='ignore_cache', default=False,
|
||||
help='Ignore the cache and update the jobs anyhow (that will only '
|
||||
'flush the specified jobs cache)')
|
||||
parser.add_argument(
|
||||
'--flush-cache', action='store_true', dest='flush_cache',
|
||||
default=False, help='Flush all the cache entries before updating')
|
||||
options = parser.parse_args()
|
||||
|
||||
options.log_level = getattr(logging, options.log_level.upper(),
|
||||
@ -82,7 +90,9 @@ def main():
|
||||
builder = jenkins_jobs.builder.Builder(config.get('jenkins', 'url'),
|
||||
config.get('jenkins', 'user'),
|
||||
config.get('jenkins', 'password'),
|
||||
config)
|
||||
config,
|
||||
ignore_cache=options.ignore_cache,
|
||||
flush_cache=options.flush_cache)
|
||||
|
||||
if options.command == 'delete':
|
||||
for job in options.name:
|
||||
|
Loading…
Reference in New Issue
Block a user