diff options
author | Lars Wirzenius <liw@liw.fi> | 2012-09-22 14:09:45 +0100 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2012-09-22 14:09:45 +0100 |
commit | 7f5c956ec03dc9e295aa3e681b4e73d675cf8dee (patch) | |
tree | 739dbbd6b764a2ea5e12b62e09c4741ee4b3e4d5 /jenkinstool | |
parent | 34aa9ca73ff6a80a61f186902054b95b568c3d81 (diff) | |
download | jenkinstool-7f5c956ec03dc9e295aa3e681b4e73d675cf8dee.tar.gz |
Allow user to specify which project's pipeline to run
Diffstat (limited to 'jenkinstool')
-rwxr-xr-x | jenkinstool | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/jenkinstool b/jenkinstool index d348aaf..1ba1022 100755 --- a/jenkinstool +++ b/jenkinstool @@ -720,10 +720,11 @@ class JenkinsTool(cliapp.Application): '''Update Jenkmins with jobs based specification, then run them.''' self.settings.require('jenkins-host') + if len(args) == 0: return - if len(args) > 1: - raise cliapp.AppException('Can only handle one file') + filename = args[0] + project_names = set(args[1:]) jenkins = simplejenkinsapi.Jenkins(self.jenkins_url) job_generator = JobGenerator(self.settings['pretend-jobs'], @@ -731,7 +732,7 @@ class JenkinsTool(cliapp.Application): self.artifacts_url, self.settings['jenkins-host']) - with open(args[0]) as f: + with open(filename) as f: try: config = json.load(f) except ValueError, e: @@ -744,17 +745,31 @@ class JenkinsTool(cliapp.Application): jenkins.create_job(job_id, config_xml) job_ids = [] + all_jobs = [] for job_id, config_xml in job_generator.generate_setup_jobs(config): make_it_so(job_id, config_xml) - job_ids.append(job_id) + all_jobs.append(job_id) + if not project_names: + job_ids.append(job_id) + + found_projects = set() for project in simplejenkinsapi.order(config['projects']): pairs = job_generator.generate_project(config, project) for job_id, config_xml in pairs: make_it_so(job_id, config_xml) - job_ids.append(job_id) + all_jobs.append(job_id) + if project['name'] in project_names: + job_ids.append(job_id) + found_projects.add(project['name']) + + if project_names: + not_found = project_names.difference(found_projects) + if not_found: + raise cliapp.AppException( + 'Could not find projects %s' % ' '.join(not_found)) for job_id in jenkins.list_jobs(): - if job_id not in job_ids: + if job_id not in all_jobs: jenkins.delete_job(job_id) ts = ttystatus.TerminalStatus(period=0) |