2012-04-12 8 views
20

Tengo dos proyectos Jenkins que comparten una base de datos. No deben ser ejecutados simultáneamente. Estrictamente hablando, no existe una dependencia particular entre ellos más allá de la no concurrencia, pero en este momento yo manejo parcialmente esta restricción ejecutando un "flujo descendente" del otro. Esto funciona la mayor parte del tiempo, pero no siempre. Si ocurre un cambio de control de fuente mientras el segundo se está ejecutando, el primero se iniciará de nuevo, y se ejecutarán al mismo tiempo, y probablemente ambos fallen miserablemente.¿Cómo puedo evitar que dos proyectos/construcciones de Jenkins se ejecuten al mismo tiempo?

Esto es similar, pero no idéntico, a How to prevent certain Jenkins jobs from running simultaneously? La diferencia es que no tengo un problema de "número de subprocesos": ya estoy ejecutando como máximo un subproceso de cualquier proyecto dado en un momento dado , incluso en el caso en que dos construcciones (de proyectos diferentes) se pisoteen entre sí. Esto parece descartar todas las sugerencias en ese hilo.

+0

Las cerraduras y los pestillos complemento mencionado en la respuesta a la pregunta que usted ha citado debería funcionar aquí también. –

+1

Locks & Latches funciona para mi caso, pero está en [la lista de "desaprobación potencial"] (https://wiki.jenkins-ci.org/display/JENKINS/Proposed+Plugin+Deprecation). Si se queda obsoleto, se ve como el más nuevo [Exclusion-Plugin] (https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin) hará el trabajo por mí (y [Throttle Concurrent compila]] (https://wiki.jenkins-ci.org/display/JENKINS/Throttle+Concurrent+Builds+Plugin) para el otro, contado, caso). – jackr

Respuesta

21

El Locks and Latches plugin debería resolver su problema. Cree un bloqueo y haga que ambos trabajos usen el mismo bloqueo. Eso evitará que los trabajos se ejecuten al mismo tiempo.

  1. Instale el complemento en "Administrar Jenkins: Administrar complementos".
  2. Defina (indique un nombre para) su (s) bloqueo (es) en "Administrar Jenkins: Configurar sistema".
  3. Para cada trabajo que desee participar en la exclusión,
    1. en ": Configurar: Construir el Medio Ambiente," verificación "bloquea",
    2. y escoger su nombre de bloqueo de la lista desplegable.
+0

Aquí está la solución completa, ya que me tomó un poco de investigación y agitación: – jackr

+2

Instale el complemento en "Administrar Jenkins: Administrar complementos". Defina (proporcione un nombre para) su (s) bloqueo (es) en "Administrar Jenkins: Configurar sistema". Para cada trabajo que desee participar en la exclusión, en ": Configurar: entorno de compilación", marque "Bloqueos" y elija su nombre de bloqueo de la lista desplegable. – jackr

+1

@jackr ¡Debes editar tu comentario en esta respuesta para completarlo! – chown

4

EDITAR: la siguiente información es efectiva a partir del 04/10/2014

plugin de Exclusión, https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin muy útil si algunos de creación utilizan el mismo recurso - por ejemplo, una base de datos de prueba. Todo lo que necesita hacer es actualizar la configuración de todos los trabajos que utilizan este recurso y, como resultado, nunca se ejecutarán en paralelo, sino que esperarán a que otros los completen.

Tomado de: http://www.kaczanowscy.pl/tomek/2012-07/jenkins-plugins-part-iii-towards-continuous-delivery

Este plugin no bloquear dos o más puestos de trabajo se ejecute en paralelo.
Para probar, hacer esto para job1

  1. Configurar
  2. Bajo entorno de compilación de comprobar "Añadir recursos para gestionar la exclusión".
  3. Entonces Add -> Nuevo recurso -> Nombre -> Bloqueo
  4. Bajo Build -> Añadir paso de generación
  5. Bloqueo crítico de inicio
  6. Añadir paso de generación -> añadir lo que desee agregar. (añadir el sueño 15 para asegurarse de que dura más tiempo para comprobar la concurrencia.)
  7. agregar acumulación paso -> final de bloque crítico
  8. Repita los pasos anteriores para job2, asegúrese de usar 'bloqueo' del mismo nombre de bloqueo.
  9. compilar manualmente ambos trabajos al mismo tiempo.
  10. controlar el progreso de ejecución en virtud de Jenkins -> administración de exclusión.
4

El Lockable Resources Plugin. Simple y funciona bien para mí de mayo de 2016.

Instalar el plugin. En Gestionar Jenkins> Configurar sistema vaya a Administrador de recursos bloqueables.
Seleccione Agregar recurso bloqueable. Ingrese los valores del campo: Nombre y presione Guardar. Advertencia: No ingrese espacios en el campo Nombre.

En Jenkins>job_name> Configurar> General, Seleccione la casilla de verificación: Esta construcción requiere recursos con llave. Ingrese el nombre o los nombres en el valor del campo: Recursos.

Comience una generación. En compilación # número seleccione Recursos bloqueados. Debería ver algo como: Esta construcción ha bloqueado los siguientes recursos: resource_name - resource_description.

Comenzar una construcción diferente que utiliza el mismo recurso. Verá Build Queue en el estado/menú de Jenkins que muestra el nombre del trabajo. El texto con el cursor se muestra Comenzó por, Esperando recursos lista_de_resoltos, Esperando tiempo.

(también etiquetas de recursos/etiquetas pueden ser utilizados)

+0

Buen complemento pero no veo En Jenkins> nombre_trabajo> Configurar> General, casilla Seleccionar: esta compilación requiere recursos bloqueables. Ingrese el nombre o los nombres en el valor del campo: Recursos. para el trabajo de tubería. ¿Hay algún trabajo alrededor? –

+0

¿Puede describir cuál es su problema con más detalle? ¿Ves "Esta construcción requiere recursos bloqueables"? ¿Tienes el complemento instalado? – gaoithe

Cuestiones relacionadas