summaryrefslogtreecommitdiff
path: root/jenkinsapi
diff options
context:
space:
mode:
authorAleksey Maksimov <ctpeko3a@gmail.com>2014-05-24 23:08:03 +0800
committerAleksey Maksimov <ctpeko3a@gmail.com>2014-05-24 23:14:18 +0800
commitbec39bf7d8923b15c26a4ba07491b4ebdea6391d (patch)
treea508e22d8100eca47c860c0821d2575b90a18294 /jenkinsapi
parent10fc0763b2741c8c5cb1fc7c61d11f66a4cf0112 (diff)
downloadpython-jenkinsapi-bec39bf7d8923b15c26a4ba07491b4ebdea6391d.tar.gz
python-jenkinsapi-bec39bf7d8923b15c26a4ba07491b4ebdea6391d.tar.bz2
python-jenkinsapi-bec39bf7d8923b15c26a4ba07491b4ebdea6391d.zip
Fix for issue #280
Properly pass job parameters via json When files parameter present select correct job invokation url
Diffstat (limited to 'jenkinsapi')
-rw-r--r--jenkinsapi/job.py34
1 files changed, 21 insertions, 13 deletions
diff --git a/jenkinsapi/job.py b/jenkinsapi/job.py
index e468995..fb379d7 100644
--- a/jenkinsapi/job.py
+++ b/jenkinsapi/job.py
@@ -138,27 +138,29 @@ class Job(JenkinsBase, MutableJenkinsThing):
return "%s/buildWithParameters" % self.baseurl
@staticmethod
- def _mk_json_from_build_parameters(build_params):
+ def _mk_json_from_build_parameters(build_params, file_params=None):
"""
- Build parameters must be submitted in a particular format - Key-Value pairs would be
- far too simple, no no! Watch and read on and behold!
+ Build parameters must be submitted in a particular format
+ Key-Value pairs would be far too simple, no no!
+ Watch and read on and behold!
"""
assert isinstance(
build_params, dict), 'Build parameters must be a dict'
- try:
- it = build_params.iteritems()
- except AttributeError:
- # Python3
- it = build_params.items()
+ build_p = [{'name': k, 'value': v}
+ for k, v in build_params.iteritems()]
+ out = {'parameter': build_p}
+ if file_params:
+ file_p = [{'name': k, 'file': k}
+ for k in file_params.iterkeys()]
+ out['parameter'].extend(file_p)
- return {'parameter': [
- {'name': k, 'value': v} for k, v in it
- ]}
+ return out
@staticmethod
- def mk_json_from_build_parameters(build_params):
- to_json_structure = Job._mk_json_from_build_parameters(build_params)
+ def mk_json_from_build_parameters(build_params, file_params=None):
+ to_json_structure = Job._mk_json_from_build_parameters(build_params,
+ file_params)
return json.dumps(to_json_structure)
def invoke(self, securitytoken=None, block=False, skip_if_running=False, invoke_pre_check_delay=3,
@@ -196,6 +198,11 @@ class Job(JenkinsBase, MutableJenkinsThing):
self.get_jenkins_obj()))
url = self.get_build_triggerurl()
+ # If job has file parameters - it must be triggered
+ # using "/build", not by "/buildWithParameters"
+ # "/buildWithParameters" will ignore non-file parameters
+ if files:
+ url = "%s/build" % self.baseurl
if cause:
build_params['cause'] = cause
@@ -203,6 +210,7 @@ class Job(JenkinsBase, MutableJenkinsThing):
if securitytoken:
params['token'] = securitytoken
+ build_params['json'] = self.mk_json_from_build_parameters(build_params, files)
data = build_params
response = self.jenkins.requester.post_and_confirm_status(