Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I need to start a hudson job from python, and then wait for it to complete.

This pages suggests a Python API, where can I find further information on this?

share|improve this question
up vote 1 down vote accepted

Here's my solution in jython:

from hudson.cli import CLI

class Hudson():
    def StartJob(self, server, port, jobname, waitForCompletion = False):
        args = ["-s", "http://%s:%s/hudson/" % (server, port), "build", jobname]
        if waitForCompletion: args.append("-s")

if __name__ == "__main__":
    h = Hudson()
    h.StartJob("myhudsonserver", "8080", "my job name", False)
share|improve this answer

The python API is the same as the json api. The only difference is that you you eval() on the returning code and you get python objects rather than having to call a json library.

Answering your original question in pure python this is what I did for our job (this is called as a post commit hook) Please note we have http auth in front of our hudson which makes things more complicated.

import httplib
import base64


def notify_hudson(repository,revision):
    username = 'XXX'
    password = 'XXX'
    server = "XXX"

    cmd = 'svnlook uuid %(repository)s' % locals()
    #we strip the \n at the end of the input
    uuid = os.popen(cmd).read().strip()

    cmd = 'svnlook changed --revision %(revision)s %(repository)s' % locals()
    body = os.popen(cmd).read()

    #we strip the \n at the end of the input
    base64string = base64.encodestring('%s:%s' % (username, password)).strip()

    headers = {"Content-Type":"text/plain",
           "Authorization":"Basic %s" % base64string
    path = "/subversion/%(uuid)s/notifyCommit?rev=%(revision)s" % locals()
    if not TESTING:
        conn = httplib.HTTPSConnection(server)
        response = conn.getresponse()
        if response.status != 200:
             print >> sys.stderr, "The commit was successful!"
             print >> sys.stderr, "But there was a problem with the hudson post-commit hook"
             print >> sys.stderr, "Please report this to the devteam"
             print >> sys.stderr, "Http Status code %i" % response.status

share|improve this answer

There is a project called JenkinsAPI which provides a high-level API which (amongst other things) can be used to trigger Jenkins jobs. The syntax is this:

api = jenkins.Jenkins(baseurl, username, password)
job = api.get_job(jobname)
job.invoke(securitytoken=token, block=block)
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.