summaryrefslogtreecommitdiff
path: root/jenkinstool
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2012-09-22 14:09:45 +0100
committerLars Wirzenius <liw@liw.fi>2012-09-22 14:09:45 +0100
commit7f5c956ec03dc9e295aa3e681b4e73d675cf8dee (patch)
tree739dbbd6b764a2ea5e12b62e09c4741ee4b3e4d5 /jenkinstool
parent34aa9ca73ff6a80a61f186902054b95b568c3d81 (diff)
downloadjenkinstool-7f5c956ec03dc9e295aa3e681b4e73d675cf8dee.tar.gz
Allow user to specify which project's pipeline to run
Diffstat (limited to 'jenkinstool')
-rwxr-xr-xjenkinstool27
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)