2012-06-19 19 views
6

Herramientas:
Jenkins ver. 1.470
Maven 2
SubversionJenkins Parcial Build/Modular Construir en Commit Hook

Medio Ambiente

Asumir mi construcción tiene una serie de proyectos A-D. El gráfico de dependencia existe como se muestra. Es decir: B depende de las clases en A, C depende de las clases en B, D depende de las clases en A. Creamos las versiones de jenkins de manera que llaman a las construcciones que dependen de ellas como una acción posterior a la construcción.

Un
| -> B -> C
| -> D

Cada noche, desencadenar una generación completa de Jenkins (A construye, desencadena B (disparadores C), D desencadena) Esto se hace con la suficiente facilidad al decirle a A que se construya todas las noches, y el resto a las cascadas.

Problema

Sin embargo, en un comprometemos queremos construir los proyectos que se cometieron a la vez.

  • Situación 1: Se sondean el repositorio (o utilizamos commit hooks, no hay diferencia) y se encontró que no había una confirmación a B, entonces B y C construirá construirá. ¡Éxito!

  • Situación 2: Nos sondear el repositorio y encontramos que B y C fueron comprometidos en una confirmación, a continuación, Jenkins tratará de construir B (que provocó una acumulación de C), y construir C (una segunda construcción) Fracaso. ¿Qué pasa? C se construyó dos veces, ocupando un tiempo de construcción precioso. ¡Mantenga la construcción rápida!

¿Alguien sabe de una manera de accionar sólo el proyecto más alta de cada gasoducto acumulación comprometida?

supongo una solución sería un gancho SVN complejo que determina el proyecto más alto en cada tubería ...

  • Situación 3: Commit a B C y D en una confirmación. El gancho SVN encuentra que C depende de B. El gancho llama a enlaces específicos del proyecto para iniciar compilaciones para B y D.

Errores: SVN commit hook muy complejo. Tiene que mantener la tubería en el gancho SVN.

Siento que este es un problema que otros se han topado. ¿Hay un plugin de Jenkins que ayude con esto?

+0

En la situación 2, los proyectos de jenkins C & B están buscando el mismo proyecto svn? – thekbb

Respuesta

1

Sería una idea decir a jenkins que espere con la creación hasta que se complete una construcción de la que c depende. El es un indicador dentro de la configuración del trabajo para hacer eso. Pero debes hacer esto para cada trabajo. Por cierto ...también hay otra bandera que requiere que jenkins espere con la compilación hasta que finalice un trabajo dependiente.

0

También estoy buscando una solución eficiente a este problema. He visto varias sugerencias, pero hasta ahora solo hemos podido evitar uno de los peligros al serializar la compilación utilizando el complemento Loches & Latches. No impide que un proyecto se multiplique varias veces desde una sola entrada, pero asegurará que el proyecto se reconstruya secuencialmente una vez que se complete el proyecto anterior.

En realidad, es un problema complicado de resolver en el caso general, pero he estado pensando en escribir un plugin para tratar con esto. Una solución simple es solo verificar si un proyecto en sentido ascendente se está construyendo actualmente y, si es así, eliminarse de la cola de compilación. Como el trabajo inicial iniciará su construcción cuando esté completo, esta es una opción.

Una mejor opción sería un complemento que administre automáticamente la cola de compilación en función de su gráfico de dependencias. Esto puede ser complicado, porque debe asegurarse de que no se inicie ninguna compilación hasta que se completen todas sus dependencias. Básicamente, esto significa que cada checkin hará que el complemento agregue automáticamente todas las compilaciones en sentido descendente a la cola para que pueda gestionarlas. Es posible que haya una forma inteligente y más fácil de hacer que esto suceda con los activadores anteriores/posteriores, pero aún no tengo claro cómo hacerlo realidad. Ya hay plugins de compilación que pretenden manejar esta situación, pero claramente no hacen nada para evitar la condición de carrera en la que una compilación en sentido descendente puede desencadenarse con el mismo registro que una compilación en sentido ascendente.

Cuestiones relacionadas