2010-04-20 12 views
20

Tengo dos trabajos:Haciendo Jenkins trabajo (Hudson) dependerá de otro trabajo

  1. Subir
  2. lanzamiento instancia

Quiero hacer lanzamiento instancia Depende de la otra, por lo que el Launch-instance provoca automáticamente U pload para ejecutar primero.

¿Puedo lograrlo utilizando las características incorporadas de Jenkins o con un complemento?

Tenga en cuenta que yo no quiere Subir para disparar siempre lanzamiento instancia, que es lo que el "Construir después de que otros proyectos se construyen" opción en lanzamiento instancia haría. Lo que quiero es más análoga a cómo funciona el atributo depends en Ant.

+2

NB: podría sustituir los nombres de los trabajos con "A" y "B" sin perder relevancia información. :) – Jonik

+2

Upload and Launch-Instance realmente me aclara la pregunta. – kgilpin

Respuesta

24

¿Has probado el Parametrized Trigger Plugin?

Puede usarlo como un paso de compilación y marque la casilla de verificación "Bloquear hasta que los proyectos activados finalicen sus compilaciones". Eso debería ser exactamente lo que estás buscando.

+0

¡Gracias! No tengo el tiempo (o la necesidad) para probar el complemento en este momento, pero sí, parece una buena manera de hacerlo. – Jonik

+0

Esto es EXACTAMENTE lo que estaba buscando. ¡Gracias! – clee

+0

He instalado este complemento pero la opción de "Activar/ejecutar compilaciones en otros proyectos" desde el menú "Pasos de compilación" no está allí. – John

0

Puede usar las dependencias en sentido descendente o ascendente. Debería utilizar "Disparadores de compilación" -> compilación después de que se hayan creado otros proyectos y/o acciones posteriores a la compilación en la parte de configuración del proyecto.

+0

Debe agregar "Build-Trigger" -> Build after en el proyecto "Actualizar" e ingrese "Launch-instance" allí. – khmarbaise

+5

Lo siento, parece que no leyó toda la pregunta ... Dice que ** no ** quiero * Upload * para activar siempre * Launch-instance * (pero cuando se ejecuta * Launch-instance *, * Upload * debe ejecutarse primero). – Jonik

1

¿Qué pasa con la construcción de carga llamando a su build URL con wget como el primer paso de compilación? A continuación, agregue los pasos de compilación de carne de vaca de Launch-instance.

O para un enfoque más elegante, quizás utilice el Remote access API.

+0

+1 por llevarme al camino correcto! Simplemente acceder a la URL de compilación no funcionará en nuestro caso ya que las compilaciones anónimas están deshabilitadas. Pero encontré consejos clave del enlace que Alejandro Pérez García publicó en los * comentarios * de esa página de "API de acceso remoto". :-) Pongo los detalles en una respuesta separada: http://stackoverflow.com/questions/2674468/making-hudson-job-depend-on-another-job/2675178#2675178 – Jonik

+0

Supongo que es más justo aceptar esta respuesta. (Recuerde recordar * Build Triggers -> Trigger builds remote * en la configuración del trabajo cuando la seguridad está habilitada; detalles en mi respuesta.) – Jonik

+0

Esto parece una muy mala idea y no recomendaría esta solución para otros usuarios, aunque funciona Otras soluciones a continuación tienen más votos. – slacy

5

¡Aha, lo encontré! Aquí estoy construyendo en miki's answer que mostró el camino, pero no lo resolvió completamente para mí.

Como se dice en el Spanish-language article about launching Hudson builds que estaba vinculado a partir de los comentarios de Hudson de Remote access API page que Miki vinculado a:

En La section "Construir Activadores" [...] marcamos la opción "Disparador crea de forma remota (por ejemplo, desde scripts)". Al marcar esta opción, aparece el cuadro de texto "Token de autenticación". Aquí pondremos el nombre del token de autenticación.

alt text http://www.adictosaltrabajo.com/tutoriales/hudsonSubversionPush/hudsonSubversionPush-01.png

(Parece que los beneficios de conocer españoles están empezando a materializarse ... :-)

Por lo tanto, resulta Hudson ofrece una opción útil incorporado para desencadenar construye de forma remota.En Build Triggers sección (de Cargar trabajo en mi caso) puede habilitar construcciones remotas y establecer un token de autenticación (consulte la captura de pantalla anterior). Luego puede iniciar una compilación accediendo a una URL determinada que contiene ese token. En mi caso, el primer paso de generación de lanzamiento instancia se parece a:

wget http://[hudson-url]/job/Upload/build?token=TEST 
sleep 10 

Esto funciona incluso si el anonimato construye son discapacitados y simplemente tratar de acceder a la URL de construcción produciría "403 Forbidden".

2

Ejecutar trabajo dependiente a través de wget no es una solución general. Dado que los trabajos se ejecutan de forma sincronizada, su trabajo de lanzamiento no se bloqueará y esperará a que se complete el trabajo de carga. usar sleep es solo un truco sucio y no es una opción para la mayoría de los casos ... En mi humilde opinión la mejor solución es usar: http://wiki.jenkins-ci.org/display/JENKINS/Join+Plugin

Cuestiones relacionadas