intellij - Cómo construir una cola de compilación eficiente de maven/jenkins
maven basico (2)
Acabo de encontrar un artículo realmente interesante sobre este tema: http://blog.xebia.com/2012/08/27/how-to-build-true-pipelines-with-jenkins-and-maven/
En realidad no lo he intentado, pero parece resolver la mayoría de los problemas que planteé en la pregunta.
Usamos Jenkins como nuestro sistema de CI y Maven como nuestra herramienta de compilación. Tenemos un repositorio SVN para nuestro código y Artifactory para nuestros artefactos.
El código fuente está organizado como un proyecto de varios módulos de maven. La mayoría de los módulos contribuyen a la aplicación real, pero algunos módulos son aplicaciones que necesitamos durante el proceso de compilación y prueba.
Actualmente tenemos varios trabajos para:
- un conjunto rápido de pruebas de confirmación
- pruebas de integración más extensas
- Cobertura de código y análisis de código estático
- despliegue a un entorno de prueba
- pruebas de humo para ese ambiente de prueba
Una debilidad de nuestro proceso de compilación es que compilamos diferentes partes del proyecto en diferentes trabajos, algunas de las partes una y otra vez. En su lugar, preferiría compilarlo todo una vez que lo implemente en artefactos y simplemente usar estos artefactos para todo lo demás.
Pero no sé cómo asegurarme de que:
- El tamaño del artefacto no explota, porque arrojamos cientos de tarros todos los días en él.
- las compilaciones en sentido descendente utilizan el conjunto exacto de artefactos producidos por el último trabajo de compilación en sentido ascendente y no una mezcla extraña de versión, ya que se ejecuta simultáneamente con el siguiente trabajo de compilación, que podría haber implementado una nueva versión del artefacto a pero no del artefacto b.
Cualquier ayuda, punteros o ideas apreciadas.
Hay muchas formas de responder a esta pregunta. Actualmente estoy usando la misma configuración en mi entorno de desarrollo.
- Puede usar el complemento de bloqueos y cierres para asegurarse de que las cosas no se ejecuten simultáneamente cuando lo necesite. https://wiki.jenkins-ci.org/display/JENKINS/Locks+and+Latches+plugin
- Combine esto con Maven incremental y construcciones paralelas para acelerar las construcciones individuales.
- Agrega algunos esclavos Jenkins para obtener más ''ejecutores''.
- Para evitar que Artifactory se hinche en su repositorio de instantáneas, Artifactory puede configurarse para mantener un cierto número de instantáneas.
- NOTA : Evite utilizar repositorios de instantáneas ''no únicas'' en Artifactory y Maven 3. Consulte http://wiki.jfrog.org/confluence/display/RTF/Local+Repositories .
- Para sus módulos menos cambiados, haga versiones de lanzamiento. Manténgalos en el artefacto. Use el complemento de versión de Maven para implementar todo en Artifactory y hacer todas las etiquetas de control de versión adecuadas (excepto si está utilizando Git, que no funciona bien con el complemento de versión).
- Utilice Jenkins "Deshabilitar el archivo automático de artefactos" para los artefactos de instantáneas que desea propagar a través del repositorio local en Jenkins.
- Use la opción ''-U'' en sus compilaciones de Maven para asegurarse de que se utilizan las últimas instantáneas.
Mi preferencia personal es que sea sencillo: hago un único módulo de Maven que hace toda la aplicación, donde solo el código que cambia con poca frecuencia se coloca en un árbol / trabajo de módulos completamente separado. Para simplificar, mantengo el número de trabajos al mínimo.
Intentamos utilizar un trabajo separado para la prueba, pero eso hizo que fuera difícil rastrear el origen de una falla de la prueba, y también hizo que la "bifurcación de productos" fuera mucho más difícil.