使用python构建jenkins job
import jenkins
url = 'http://18.222.xxx.xxx:8899'
username = 'xxx'
password = 'xxx'
job_name = 'test-web-build-sit'
parameter = {"name": "BRANCH", "value": "sit-5.4.2-release"}
server = jenkins.Jenkins(url, username, password)
server.build_job(job_name, parameter)
构建结果失败,jenkins没有获取到参数
ERROR: Couldn't find any revision to build. Verify the repository and branch configuration for this job.
经过抓包获取参数发现,参数使用的形式如下:
json={"parameter":{"name":"BRANCH","value":"sit-5.4.2-release"}
于是修改源码,最终结果如下:
class Jenkins(object):
_timeout_warning_issued = False
....
....
def build_job(self, name, parameters=None, token=None):
'''Trigger build job.
This method returns a queue item number that you can pass to
:meth:`Jenkins.get_queue_item`. Note that this queue number is only
valid for about five minutes after the job completes, so you should
get/poll the queue information as soon as possible to determine the
job's URL.
:param name: name of job
:param parameters: parameters for job, or ``None``, ``dict``
:param token: Jenkins API token
:returns: ``int`` queue item
'''
# 注释原代码
# response = self.jenkins_request(requests.Request(
# 'POST', self.build_job_url(name, parameters, token)))
# 新增代码
param = {'json': json.dumps({'parameter': parameters})}
response = self.jenkins_request(requests.Request(
'POST', self.build_job_url(name), data=param
))
if 'Location' not in response.headers:
raise EmptyResponseException(
"Header 'Location' not found in "
"response from server[%s]" % self.server)
# 注释原代码
# location = response.headers['Location']
# # location is a queue item, eg. "http://jenkins/queue/item/25/"
# if location.endswith('/'):
# location = location[:-1]
# parts = location.split('/')
# number = int(parts[-1])
# return number