Jenkins: el desencadenador SVN no crea dependencies correctamente primero

En Jenkins (1.550), tengo dos proyectos maven, Model y GUI. El proyecto GUI depende del model:

<groupId>com.acme</groupId> <artifactId>gui</artifactId> <version>1.0.0</version> ... <dependencies> <dependency> <groupId>com.acme</groupId> <artifactId>model</artifactId> <version>1.0.0</version> </dependency> </dependencies> 

Ahora, para cada proyecto tengo a Jenkins configurado para verificar periódicamente SVN y activar una compilation, que funciona bien.

Problema

Solo funciona si solo se cambian los files en un proyecto. Muchas veces, sin embargo, se realizará una confirmación en ambos proyectos, así que digamos que se comprometerán estos dos files:

 A /model/Car.java A /gui/CarDialog.java 

Ahora Jenkins verá que hay un cambio en el proyecto de GUI, lo construye, pero falla porque /model/Car.java falta (porque el model aún no se ha creado). Luego, un time después, se activa un model de compilation (debido al cambio de SVN en el model), que funciona bien. Después de eso, gui se buildá de nuevo, esta vez con éxito.

Creo que este tipo de configuration es bastante común, así que estoy bastante seguro de haber pasado por alto algo, pero no pude encontrar una respuesta en ningún lado.

Soluciones provisionales

Lo que no funcionó fue establecer "bloque mientras se construyen las dependencies" en la GUI, ya que en el momento en que se construye la construcción de la GUI, la compilation del Modelo podría no haberse dado count de que hay un cambio en SVN, por lo que no se crea el Modelo.

Hasta ahora, solo he encontrado soluciones provisionales, la que mejor funciona es la siguiente:

Configure el model para verificar las actualizaciones de SVN cada 4 minutos:

 */4 * * * * 

Configure la GUI para verificar las actualizaciones de SVN cada 8 minutos:

 */8 * * * * 

Además, bloquee la compilation de la GUI durante 60 segundos, bloquee la compilation si se están creando dependencies y comience a comstackrse después de que las dependencies hayan terminado de comstackrse.

Esto tiene los inconvenientes de que se desaconseja */4 (se debe usar H/4 ) y que se siente como un truco.

¿Alguna idea sobre cómo abordar correctamente mi problema?

Después de horas de lectura, encontré una buena solución:

  1. Instalar el complemento Downstream-Ext en Jenkins
  2. configura tus proyectos: model y gui
    1. Gestión de código fuente con las includeRegions correctas, p. Ej. Para el model: model/.*
    2. Desactivar "Poll SCM"
  3. Crea una construcción jenkins: master
    1. Establezca las includeRegions que esta compilation activa en cualquier confirmación: ej .* O model/.* ,gui/.*
    2. Habilitar "Poll SCM"
    3. Agregar acciones de creación de publicaciones: "Crear otros proyectos (ampliado)"
      • Proyectos para build: model, gui (El order correcto es importante: aguas arriba, …, aguas abajo)
      • marque "Desencadenar solo si el proyecto en sentido descendente tiene cambios SCM"
  4. Opcional: Instalar el complemento-queue-plugin en Jenkins

Explicación

  • Los cambios de SCM no desencadenan las comstackciones de proyecto debido a la falta de sondeo
  • La compilation maestra se activa cada vez que hay una confirmación, no importa qué proyecto se haya comprometido
  • La compilation maestra no hace nada, excepto para analizar las versiones posteriores en order. Si se debe activar una compilation en sentido descendente debido a los cambios de SCM, se pondrá en queue; de lo contrario, no
  • Opcional, la queue se simplifica debido a la dependencia-queue-plugin