← Back to team overview

python-jenkins-developers team mailing list archive

[Merge] lp:~kenrumer/python-jenkins/build_info into lp:python-jenkins

 

Ken Rumer has proposed merging lp:~kenrumer/python-jenkins/build_info into lp:python-jenkins.

Requested reviews:
  Python Jenkins Developers (python-jenkins-developers)

For more details, see:
https://code.launchpad.net/~kenrumer/python-jenkins/build_info/+merge/95243

Try this again.

Gets build information from Jenkins. Can use to get the status of a build. Loop until the build is complete, return the artifact URL(s).
 
Example usage:
     import jenkins
     import time
     j = jenkins.Jenkins('http://'+kwargs['ci_host']+':'+kwargs['ci_port'], kwargs['ci_username'], kwargs['ci_password'])
 
    next_build_number = j.get_job_info('build_'+kwargs['vcs_server_type'])['nextBuildNumber']

-- 
https://code.launchpad.net/~kenrumer/python-jenkins/build_info/+merge/95243
Your team Python Jenkins Developers is requested to review the proposed merge of lp:~kenrumer/python-jenkins/build_info into lp:python-jenkins.
=== modified file 'doc/index.rst'
--- doc/index.rst	2011-09-04 00:24:56 +0000
+++ doc/index.rst	2012-02-29 19:20:27 +0000
@@ -115,6 +115,14 @@
 
         :param name: Name of Jenkins job, ``str``
 
+    .. method:: get_build_info(name, number)
+
+        Get build information dictionary.
+
+        :param name: Job name, ``str``
+        :param name: Job number, ``str``
+        :returns: dictionary of build information
+
     .. method:: get_job_config(name) -> str
 
         Get configuration XML of existing Jenkins job.  

=== modified file 'jenkins/__init__.py'
--- jenkins/__init__.py	2011-09-04 00:24:56 +0000
+++ jenkins/__init__.py	2012-02-29 19:20:27 +0000
@@ -76,6 +76,7 @@
 COPY_JOB     = 'createItem?name=%(to_name)s&mode=copy&from=%(from_name)s'
 BUILD_JOB    = 'job/%(name)s/build'
 BUILD_WITH_PARAMS_JOB = 'job/%(name)s/buildWithParameters'
+BUILD_INFO   = 'job/%(name)s/%(number)d/api/json?depth=0'
 
 
 CREATE_NODE = 'computer/doCreateItem?%s'
@@ -188,6 +189,18 @@
             if e.code in [401, 403, 500]:
                 raise JenkinsException('Error in request. Possibly authentication failed [%s]'%(e.code))
             # right now I'm getting 302 infinites on a successful delete
+
+    def get_build_info(self, name, number):
+        try:
+            response = self.jenkins_open(urllib2.Request(self.server + BUILD_INFO%locals()))
+            if response:
+                return json.loads(response)
+            else:
+                raise JenkinsException('job[!s] number[!d] does not exist'.format(name, number))
+        except urllib2.HTTPError:
+            raise JenkinsException('job[!s] number[!d] does not exist'.format(name, number))
+        except ValueError:
+            raise JenkinsException("Could not parse JSON info for job[!s] number[!d]".format(name, number)) 
     
     def get_queue_info(self):
         '''