La semana pasada estuve dándole vueltas a este problema, después de varios intentos fallidos llegué, con la ayuda de Julio, a la solución que planteo en el título del post.
Para empezar tenemos que ir al job en Jenkins que queramos lanzar desde fuera y activar la opción de "Lanzar ejecuciones remotas"
Por motivos de seguridad, Jenkins nos obliga a usar un Token que será usado al llamar al Job desde fuera.
El código que usaremos en GAE (en Python) será el siguiente:
import urllib2, base64, httplib
from urllib2 import URLError, HTTPError
from django.http import HttpResponse
def call_mlp_generator(request):
theurl = 'JENKINS_JOB_URL?token=TOKEN'
username = 'USERNAME'
password = 'PASSWORD'
request = urllib2.Request(theurl, None)
base64string = base64.encodestring('%s:%s' % (username, password)).replace('n', '')
request.add_header("Authorization", "Basic %s" % base64string)
try:
urllib2.urlopen(request)
response = str(httplib.OK)
except HTTPError, e:
response = str(e.code)
except URLError, e:
response = str(e.code)
return HttpResponse(response)
Bastante simple, sólo había que saber tocar las teclas adecuadas.