Como posso iniciar um trabalho hudson usando Python?

2

Eu preciso iniciar um trabalho hudson no python e esperar que ele seja concluído.

Esta página sugere uma API do Python, onde posso encontrar mais informações sobre isso?

link

    
por chickeninabiscuit 19.10.2010 / 01:41

3 respostas

1

Aqui está minha solução no 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")
        CLI.main(args)


if __name__ == "__main__":
    h = Hudson()
    h.StartJob("myhudsonserver", "8080", "my job name", False)
    
por 19.10.2010 / 03:01
0

A API python é a mesma que a json api. A única diferença é que você eval () no código de retorno e você obtém objetos python em vez de precisar chamar uma biblioteca json.

Respondendo sua pergunta original em Python puro, isso é o que eu fiz para o nosso trabalho (isso é chamado de hook pós-commit). Por favor, note que temos http auth na frente do nosso hudson que torna as coisas mais complicadas.

import httplib
import base64

TESTING = False

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",
           "charset":"UTF-8",
           "Authorization":"Basic %s" % base64string
    }
    path = "/subversion/%(uuid)s/notifyCommit?rev=%(revision)s" % locals()
    if not TESTING:
        conn = httplib.HTTPSConnection(server)
        conn.request("POST",path,body,headers)
        response = conn.getresponse()
        conn.close()
        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

notify_hudson(repository,revision)
    
por 23.02.2011 / 15:20
0

Existe um projeto chamado JenkinsAPI que fornece uma API de alto nível que (entre outras coisas) pode ser usada para Acionar empregos Jenkins. A sintaxe é esta:

api = jenkins.Jenkins(baseurl, username, password)
job = api.get_job(jobname)
job.invoke(securitytoken=token, block=block)
    
por 06.01.2012 / 01:12