Actualmente estoy usando jenkins / hudson para la integración continua de un gran proyecto principalmente en C ++. Tenemos proyectos separados para troncal y cada sucursal. Además, hay algunos proyectos relacionados para el código Java, pero la configuración para ellos es bastante básica en este momento (aunque podemos hacer más más adelante). Los proyectos de C ++ hacen lo siguiente:
- Compila todo con opciones para reconfigurar, hacer una compilación limpia o usar una caja nueva
- Opcionalmente, crea y ejecuta todas las pruebas.
- Opcionalmente ejecuta todas las pruebas usando Memcheck de Valgrind
- Ejecuta cppcheck
- Genera documentación de doxygen
- Publica informes: pruebas unitarias, valgrind, cppcheck, advertencias del compilador, SLOC, tareas abiertas y cobertura de código (usando gcov, gcovr y el complemento de cobertura)
- Implementa código todas las noches o bajo demanda en un entorno de prueba y un repositorio de paquetes
Todo es configurable para compilaciones automáticas y opcional para compilaciones bajo demanda. Debajo, hay un script bash que controla gran parte de esto, que además depende de nuestro sistema de compilación, que usa automake y autoconf junto con scripts bash personalizados.
Comenzamos a usar Hudson (en ese momento) porque eso es lo que usaban los chicos de Java y solo queríamos compilaciones nocturnas. Desde entonces, hemos agregado mucho más y seguimos agregando más. En cierto modo, Hudson es genial, pero ciertamente no es ideal.
He analizado otras soluciones y la única que parece que podría ser un reemplazo es buildbot. ¿Buildbot sería mejor para esta situación? ¿Vale la pena la inversión ya que ya estamos usando Hudson? ¿Por qué?
EDITAR : Alguien preguntó por qué no he encontrado que Hudson / Jenkins sea ideal. La respuesta corta es que todo se puede mejorar. Simplemente me pregunto si Jenkins es la mejor solución actual para mi caso de uso o si hay algo mejor (¿buildbot?) Que sería más fácil de mantener a largo plazo incluso cuando surgen nuevos requisitos.