76
76
COPY_JOB = 'createItem?name=%(to_name)s&mode=copy&from=%(from_name)s'
77
77
BUILD_JOB = 'job/%(name)s/build'
78
78
BUILD_WITH_PARAMS_JOB = 'job/%(name)s/buildWithParameters'
79
BUILD_INFO = 'job/%(name)s/%(number)d/api/json?depth=0'
81
82
CREATE_NODE = 'computer/doCreateItem?%s'
144
145
self.server = url
146
147
self.server = url + '/'
147
if username is not None and password is not None:
148
if username is not None and password is not None:
148
149
self.auth = auth_headers(username, password)
152
153
def get_job_info(self, name):
154
155
Get job information dictionary.
188
189
if e.code in [401, 403, 500]:
189
190
raise JenkinsException('Error in request. Possibly authentication failed [%s]'%(e.code))
190
191
# right now I'm getting 302 infinites on a successful delete
193
def get_build_info(self, name, number):
195
Get build information dictionary.
197
:param name: Job name, ``str``
198
:param name: Build number, ``int``
199
:returns: dictionary of build information, ``dict``
203
>>> next_build_number = j.get_job_info('build_name')['next_build_number']
204
>>> output = j.build_job('build_'+kwargs['vcs_server_type'], params)
206
>>> build_info = j.get_build_info('build_name', next_build_number)
207
>>> print(build_info)
208
{u'building': False, u'changeSet': {u'items': [{u'date': u'2011-12-19T18:01:52.540557Z', u'msg': u'test', u'revision': 66, u'user': u'unknown', u'paths': [{u'editType': u'edit', u'file': u'/branches/demo/index.html'}]}], u'kind': u'svn', u'revisions': [{u'module': u'http://eaas-svn01.i3.level3.com/eaas', u'revision': 66}]}, u'builtOn': u'', u'description': None, u'artifacts': [{u'relativePath': u'dist/eaas-87-2011-12-19_18-01-57.war', u'displayPath': u'eaas-87-2011-12-19_18-01-57.war', u'fileName': u'eaas-87-2011-12-19_18-01-57.war'}, {u'relativePath': u'dist/eaas-87-2011-12-19_18-01-57.war.zip', u'displayPath': u'eaas-87-2011-12-19_18-01-57.war.zip', u'fileName': u'eaas-87-2011-12-19_18-01-57.war.zip'}], u'timestamp': 1324317717000, u'number': 87, u'actions': [{u'parameters': [{u'name': u'SERVICE_NAME', u'value': u'eaas'}, {u'name': u'PROJECT_NAME', u'value': u'demo'}]}, {u'causes': [{u'userName': u'anonymous', u'shortDescription': u'Started by user anonymous'}]}, {}, {}, {}], u'id': u'2011-12-19_18-01-57', u'keepLog': False, u'url': u'http://eaas-jenkins01.i3.level3.com:9080/job/build_war/87/', u'culprits': [{u'absoluteUrl': u'http://eaas-jenkins01.i3.level3.com:9080/user/unknown', u'fullName': u'unknown'}], u'result': u'SUCCESS', u'duration': 8826, u'fullDisplayName': u'build_war #87'}
211
response = self.jenkins_open(urllib2.Request(self.server + BUILD_INFO%locals()))
213
return json.loads(response)
215
raise JenkinsException('job[%s] number[%d] does not exist'%(name, number))
216
except urllib2.HTTPError:
217
raise JenkinsException('job[%s] number[%d] does not exist'%(name, number))
219
raise JenkinsException('Could not parse JSON info for job[%s] number[%d]'%(name, number))
192
221
def get_queue_info(self):
194
223
:returns: list of job dictionaries, ``[dict]``
299
328
self.jenkins_open(urllib2.Request(self.server + CREATE_JOB%locals(), config_xml, headers))
300
329
if not self.job_exists(name):
301
330
raise JenkinsException('create[%s] failed'%(name))
303
332
def get_job_config(self, name):
305
334
Get configuration of existing Jenkins job.
348
377
if not self.job_exists(name):
349
378
raise JenkinsException('no such job[%s]'%(name))
350
return self.jenkins_open(urllib2.Request(self.build_job_url(name, parameters, token)))
379
return self.jenkins_open(urllib2.Request(self.build_job_url(name, parameters, token)))
352
381
def get_node_info(self, name):
354
383
Get node information dictionary
388
417
self.jenkins_open(urllib2.Request(self.server + DELETE_NODE%locals(), ''))
389
418
if self.node_exists(name):
390
419
raise JenkinsException('delete[%s] failed'%(name))
393
422
def create_node(self, name, numExecutors=2, nodeDescription=None,
394
423
remoteFS='/var/lib/jenkins', labels=None, exclusive=False):
423
452
'launcher' : { 'stapler-class' : 'hudson.slaves.JNLPLauncher' }
427
self.jenkins_open(urllib2.Request(self.server + CREATE_NODE%urllib.urlencode(params)))
456
self.jenkins_open(urllib2.Request(self.server + CREATE_NODE%urllib.urlencode(params)))
428
457
if not self.node_exists(name):
429
458
raise JenkinsException('create[%s] failed'%(name))