2012-09-11 19 views
5

Estoy usando Jenkins 1.462 y la versión de maven es 3.0.4. En Jenkins me permitió casilla de verificación "Incremental acumulación - sólo para construir módulos modificados"Crecimiento incremental en Jenkins

Quiero averiguar 2 preguntas:

  1. Ya sea construcción incremental es suficiente? Aquí How do I trigger a Jenkins build of a single module in a multi-module Maven build from Subversion? Por ejemplo, se indica que no funciona al 100% Aquí http://www.slideshare.net/andrewbayer/7-habits-of-highly-effective-jenkins-users en la página 19 se afirma que las compilaciones incrementales son complementarias a compilaciones completas, no reemplazos.

  2. Si construcción incremental - solo cambios en la construcción modificados ¿funciona realmente como se esperaba? ¿Qué quiero decir con esto? Si tengo los módulos A, B, X, C, D. X usa A y B, C usa X, D usa C y hago cambios en el módulo X. Que quiero recompilar los módulos X (itslef), C (que usan X directamente) y D (que está en el cierre transitivo; D usa C, que usa C).

Nota: este es el único cambio que hice para habilitar la compilación incremental.

Respuesta

3

Como señaló Maven documentación compilaciones incrementales no son muy fiables por lo menos hasta la versión 3.0.4:

Actualmente (3.0.4) Apache Maven no admite compilaciones incrementales muy bien .

https://cwiki.apache.org/confluence/display/MAVEN/Incremental+Builds (primera línea)

su lugar, me gustaría sugerir fuertemente el uso de cualquiera de estos dos enfoques para acelerar su construcción:

  • Usando compilaciones paralelas. En mi experiencia en proyectos grandes, esto funciona muy bien y puede reducir enormemente el tiempo de construcción con un riesgo mínimo (si existe). Simplemente ejecute algo como mvn -T 1.5C clean installhttps://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3

  • Si sus módulos son independientes, puede moverlos a diferentes proyectos y pegarlos mediante el uso de dependencias maven.

+0

downvoted como la solución propuesta crea problemas muy graves: el uso de "mvn instalar" en Jenkins va a crear comportamientos inesperados si tiene más de 1 máquina de construcción o construir más de 1 rama. En términos generales, una compilación nunca debería depender del estado de la máquina de compilación, razón por la cual "mvn install" es una idea increíblemente peligrosa. Si tiene interdependencias, use un administrador de repositorio y actualice las versiones de dependencias cuando sea necesario (sin habilitar "sobrescribir versiones", de lo contrario perderá repetibilidad). – marcv81

+1

hi marcv81, mvn install no depende necesariamente del estado de la máquina de compilación. Si está utilizando Maven para liberar, también debe usar un repositorio central para empujar y extraer sus artefactos. En cualquier caso, puede reemplazar la instalación por cualquier otro objetivo, si lo desea, la pregunta es sobre la aceleración de una compilación, no sobre la gestión de la dependencia para la que Maven tiene varias opciones. –

+0

Hola Adrian, la instalación de mvn altera el estado de la máquina de compilación de forma predeterminada, ya que instala artefactos en el repositorio local. Esto influiría en el resultado de la próxima compilación que tiene una dependencia en la compilación actual.La pregunta es sobre el rendimiento, pero la respuesta rompe la repetibilidad de la construcción, por lo tanto, mi voto/comentario negativo. Mencioné el uso de un repositorio de artefactos; una buena práctica adicional para implementar esto correctamente es hacer girar una nueva máquina virtual para cada construcción. La versión del pobre es rm -rf ~/.m2/repository antes de cada compilación. – marcv81

Cuestiones relacionadas