access build_info, console and artifacts from matrix jobs
Closes-Bug: #1514793 Change-Id: I9bea25b78ee25b4b0393d0984e1b0cebb703cafd
This commit is contained in:
parent
d1e4696495
commit
f429fd2336
|
@ -629,12 +629,13 @@ class Jenkins(object):
|
||||||
'Could not parse JSON info for queue number[%d]' % number
|
'Could not parse JSON info for queue number[%d]' % number
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_build_info(self, name, number, depth=0):
|
def get_build_info(self, name, number, depth=0, matrix_axis=None):
|
||||||
'''Get build information dictionary.
|
'''Get build information dictionary.
|
||||||
|
|
||||||
:param name: Job name, ``str``
|
:param name: Job name, ``str``
|
||||||
:param number: Build number, ``str`` (also accepts ``int``)
|
:param number: Build number, ``str`` (also accepts ``int``)
|
||||||
:param depth: JSON depth, ``int``
|
:param depth: JSON depth, ``int``
|
||||||
|
:param matrix_axis: (optional) Name of axis for matrix jobs, ``str``
|
||||||
:returns: dictionary of build information, ``dict``
|
:returns: dictionary of build information, ``dict``
|
||||||
|
|
||||||
Example::
|
Example::
|
||||||
|
@ -647,6 +648,11 @@ class Jenkins(object):
|
||||||
{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'}
|
{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'}
|
||||||
''' # noqa: E501
|
''' # noqa: E501
|
||||||
folder_url, short_name = self._get_job_folder(name)
|
folder_url, short_name = self._get_job_folder(name)
|
||||||
|
job_name = name
|
||||||
|
if matrix_axis is not None:
|
||||||
|
short_name += '/' + matrix_axis
|
||||||
|
job_name += '/' + matrix_axis
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = self.jenkins_open(requests.Request(
|
response = self.jenkins_open(requests.Request(
|
||||||
'GET', self._build_url(BUILD_INFO, locals())
|
'GET', self._build_url(BUILD_INFO, locals())
|
||||||
|
@ -655,13 +661,13 @@ class Jenkins(object):
|
||||||
return json.loads(response)
|
return json.loads(response)
|
||||||
else:
|
else:
|
||||||
raise JenkinsException('job[%s] number[%s] does not exist'
|
raise JenkinsException('job[%s] number[%s] does not exist'
|
||||||
% (name, number))
|
% (job_name, number))
|
||||||
except (req_exc.HTTPError, NotFoundException):
|
except (req_exc.HTTPError, NotFoundException):
|
||||||
raise JenkinsException('job[%s] number[%s] does not exist'
|
raise JenkinsException('job[%s] number[%s] does not exist'
|
||||||
% (name, number))
|
% (job_name, number))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise JenkinsException('Could not parse JSON info for job[%s] number[%s]'
|
raise JenkinsException('Could not parse JSON info for job[%s] number[%s]'
|
||||||
% (name, number))
|
% (job_name, number))
|
||||||
|
|
||||||
def get_build_env_vars(self, name, number, depth=0):
|
def get_build_env_vars(self, name, number, depth=0):
|
||||||
'''Get build environment variables.
|
'''Get build environment variables.
|
||||||
|
@ -713,15 +719,20 @@ class Jenkins(object):
|
||||||
# This can happen if the test report wasn't generated for any reason
|
# This can happen if the test report wasn't generated for any reason
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_build_artifact(self, name, number, artifact):
|
def get_build_artifact(self, name, number, artifact, matrix_axis=None):
|
||||||
"""Get artifacts from job
|
"""Get artifacts from job
|
||||||
|
|
||||||
:param name: Job name, ``str``
|
:param name: Job name, ``str``
|
||||||
:param number: Build number, ``str`` (also accepts ``int``)
|
:param number: Build number, ``str`` (also accepts ``int``)
|
||||||
:param artifact: Artifact relative path, ``str``
|
:param artifact: Artifact relative path, ``str``
|
||||||
|
:param matrix_axis: (optional) Name of axis for matrix jobs, ``str``
|
||||||
:returns: artifact to download, ``dict``
|
:returns: artifact to download, ``dict``
|
||||||
"""
|
"""
|
||||||
folder_url, short_name = self._get_job_folder(name)
|
folder_url, short_name = self._get_job_folder(name)
|
||||||
|
job_name = name
|
||||||
|
if matrix_axis is not None:
|
||||||
|
short_name += '/' + matrix_axis
|
||||||
|
job_name += '/' + matrix_axis
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = self.jenkins_open(requests.Request(
|
response = self.jenkins_open(requests.Request(
|
||||||
|
@ -730,12 +741,12 @@ class Jenkins(object):
|
||||||
if response:
|
if response:
|
||||||
return json.loads(response)
|
return json.loads(response)
|
||||||
else:
|
else:
|
||||||
raise JenkinsException('job[%s] number[%s] does not exist' % (name, number))
|
raise JenkinsException('job[%s] number[%s] does not exist' % (job_name, number))
|
||||||
except requests.exceptions.HTTPError:
|
except requests.exceptions.HTTPError:
|
||||||
raise JenkinsException('job[%s] number[%s] does not exist' % (name, number))
|
raise JenkinsException('job[%s] number[%s] does not exist' % (job_name, number))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise JenkinsException(
|
raise JenkinsException(
|
||||||
'Could not parse JSON info for job[%s] number[%s]' % (name, number))
|
'Could not parse JSON info for job[%s] number[%s]' % (job_name, number))
|
||||||
except NotFoundException:
|
except NotFoundException:
|
||||||
# This can happen if the artifact is not found
|
# This can happen if the artifact is not found
|
||||||
return None
|
return None
|
||||||
|
@ -1704,14 +1715,20 @@ class Jenkins(object):
|
||||||
headers=DEFAULT_HEADERS
|
headers=DEFAULT_HEADERS
|
||||||
))
|
))
|
||||||
|
|
||||||
def get_build_console_output(self, name, number):
|
def get_build_console_output(self, name, number, matrix_axis=None):
|
||||||
'''Get build console text.
|
'''Get build console text.
|
||||||
|
|
||||||
:param name: Job name, ``str``
|
:param name: Job name, ``str``
|
||||||
:param number: Build number, ``str`` (also accepts ``int``)
|
:param number: Build number, ``str`` (also accepts ``int``)
|
||||||
|
:param matrix_axis: (optional) Name of axis for matrix jobs, ``str``
|
||||||
:returns: Build console output, ``str``
|
:returns: Build console output, ``str``
|
||||||
'''
|
'''
|
||||||
folder_url, short_name = self._get_job_folder(name)
|
folder_url, short_name = self._get_job_folder(name)
|
||||||
|
job_name = name
|
||||||
|
if matrix_axis is not None:
|
||||||
|
short_name += '/' + matrix_axis
|
||||||
|
job_name += '/' + matrix_axis
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = self.jenkins_open(requests.Request(
|
response = self.jenkins_open(requests.Request(
|
||||||
'GET', self._build_url(BUILD_CONSOLE_OUTPUT, locals())
|
'GET', self._build_url(BUILD_CONSOLE_OUTPUT, locals())
|
||||||
|
@ -1720,10 +1737,10 @@ class Jenkins(object):
|
||||||
return response
|
return response
|
||||||
else:
|
else:
|
||||||
raise JenkinsException('job[%s] number[%s] does not exist'
|
raise JenkinsException('job[%s] number[%s] does not exist'
|
||||||
% (name, number))
|
% (job_name, number))
|
||||||
except (req_exc.HTTPError, NotFoundException):
|
except (req_exc.HTTPError, NotFoundException):
|
||||||
raise JenkinsException('job[%s] number[%s] does not exist'
|
raise JenkinsException('job[%s] number[%s] does not exist'
|
||||||
% (name, number))
|
% (job_name, number))
|
||||||
|
|
||||||
def _get_job_folder(self, name):
|
def _get_job_folder(self, name):
|
||||||
'''Return the name and folder (see cloudbees plugin).
|
'''Return the name and folder (see cloudbees plugin).
|
||||||
|
|
Loading…
Reference in New Issue