2010-11-02 11 views
21

Actualmente estoy investigando una buena configuración para un servidor de integración continua que construiría varias aplicaciones C++ para varias distribuciones de Linux.Servidor de integración continua para C++: ¿qué ocurre con las dependencias de biblioteca?

Mi pregunta principal es cómo otros usuarios aquí han manejado las diferencias en las bibliotecas del sistema entre las distribuciones de Linux?

Si bien puede ser relativamente fácil construir dependencias directas como bibliotecas de UI junto con una aplicación, las dependencias "indirectas" como glibc parecen un gran problema si se deben construir junto con la aplicación cada vez. Por lo tanto, estoy pensando en mover la ejecución de compilación real a una máquina virtual separada para cada distribución, p. usando rlogin para ejecutar los comandos. Mi objetivo es evitar las incompatibilidades binarias entre las versiones de biblioteca de máquina de creación y las implementadas en las distribuciones de destino.

¿Alguien aquí tiene alguna experiencia con este proceso y podría decir si lo anterior parece un enfoque factible?

+0

Me gustaría ver una buena respuesta a esta pregunta. Además de la pregunta original, me gustaría saber cómo puedo hacer una compilación cruzada para mingw en Linux también (uso mingw en Windows). Además, utilizo Qt framework y QTestLib para pruebas unitarias. ¡Gracias! –

+0

También me gustaría ver una buena respuesta a esta pregunta.En mi humilde opinión, esto va a problemas de "gestión de la configuración" ya que cada módulo se "acopla" a otros módulos, y al vincular una lib, eso significa que debe vincular implícitamente las librerías ascendentes. Como eso requiere lib-versioning-limitations, este problema se complica rápidamente (por ejemplo, DLL-hell, o RPM-hell). La propagación indirecta de la dependencia es esencial, en el contexto de versiones compatibles limitadas. – charley

Respuesta

4

Buildbot tiene la noción de buildmasters and buildslaves.

Un buildmaster se encarga de mostrar la GUI web, enviar correos electrónicos, desencadenar construcciones y otras tareas domésticas. Los buildslaves esperan en el buildmaster y cuando se les ordena realizar compilaciones.

Tenemos buildbot configurado para construir en una cantidad de plataformas diferentes, algunas de ellas VM, y nos está funcionando bien.

6

Usamos Jenkins (Integración contigua) y CMake (sistema de compilación) para este fin. Jenkins es similar a Buildbot, es decir, también tiene buildmaster y buildslaves. Actualmente tengo configurados 8 esclavos para construir para 4 plataformas diferentes (FC8, FC10, FC12 y Windows 7). Construimos binarios tanto de depuración como de versión, así que dediqué un esclavo para cada plataforma y tipo de compilación.

En cuanto a las bibliotecas de terceros como Qt & Boost, las compilé en cada plataforma y las registré en un repositorio separado.

@esavard: Utilizamos CMake 2.8 para hacer compilación cruzada, no he usado minigw, pero una búsqueda rápida en Google indica que es posible. Aquí está a link a un tutorial para realizar una compilación cruzada para Windows en Linux usando CMake y miniGW.

No he usado Buildbot y no puedo comentar sobre sus características pero pensé que debería mencionar una alternativa que estamos usando actualmente.

Espero que esto ayude.

+0

+1 para CMake ... – Macke

+0

¿Crees que podría lograr algo similar usando qmake en lugar de CMake (usamos qmake ahora y estábamos usando Scons antes)? –

+0

No he usado qmake, así que no puedo decir con certeza cómo funcionaría. [Aquí] (http://silmor.de/29) es un enlace que habla sobre la compilación cruzada de aplicaciones Qt para Windows en Linux con qmake. Scons también es muy bueno, lo intenté antes de optar por CMake. Fuimos con CMake por su compatibilidad con múltiples IDE. Tenemos personas que usan Eclipse, Code :: Blocks, VS05, VS10 y Emacs. Los únicos problemas que encontré fueron para admitir encabezados precompilados usando CMake. – user258808

0

Definitivamente buildbot y muchas máquinas virtuales es el camino a seguir con esto. Tenemos servidores VMWare ESX que alojan muchos esclavos de compilación que compilan toda la noche nuestra aplicación. La aplicación luego se prueba en otra máquina virtual (no en el esclavo de compilación y solo tiene una instalación predeterminada del sistema operativo) para verificar que funcione y que todas las dependencias estén empaquetadas.

Lo bueno que me gustaría hacer es hacer que la fase de tiempo de ejecución de prueba sea un paso automático, pero todavía no me ha dado tiempo para hacerlo.

Cuestiones relacionadas