2012-03-28 12 views
8

Soy un desarrollador de Qt/C++. Me gustaría configurar un entorno de integración continua mediante el cual después de cometer el código fuente, se desencadena un proceso de construcción que construyen el código para las 3 plataformas que estoy usando:Sistema de compilación continua para Qt

  • Linux
  • OS X
  • Win32

Si es posible, ¿cómo configuro ese entorno? Cualquier sugerencia o enlace son bienvenidos. He leído acerca de Jenkins, pero no encuentro ningún buen tutorial para él.

+0

¿Puede ser el sistema SVN al que usted le asigna el código fuente que tiene una API que puede usar para capturar tales eventos (como commit)? – badmaash

+2

Esta no es una pregunta de programación. Probablemente pertenece a http://programmers.stackexchange.com/ – Gray

Respuesta

0

Claro que es posible. La mayoría de los sistemas de control de versiones pueden ejecutar secuencias de comandos personalizadas en el servidor. Algunos de ellos (git, por ejemplo) tienen ganchos para lograr lo mismo a nivel local. Eche un vistazo al git's post-commit hook.

Todo lo que necesita es crear una secuencia de comandos que active las compilaciones multiplataforma.

0

La mayoría de los sistemas de control de versiones permiten ganchos post-commit para permitir el inicio de eventos como compilaciones. Alternativamente, los sistemas de compilación se pueden configurar para sondear regularmente un repositorio de control de origen y administrar su propia programación de compilación (así es como usamos Jenkins).

Algo a tener en cuenta es cuánto tiempo llevará completar una compilación en varias plataformas y la cantidad típica de registros en ese intervalo. Es posible que encuentre registros en lotes una mejor manera de realizar construcciones de integración continua si tiene un equipo de tamaño adecuado o recursos limitados del servidor de compilación. De lo contrario, su sistema de compilación podría terminar tratando de ponerse al día rápidamente.

En cuanto a si es posible construir en todas las plataformas de destino, eso depende de su cadena de herramientas.

2

Dos soluciones que vienen a la mente:

BuildBot

BuildBot es un sistema de integración continua altamente personalizable escrito en Python. El componente maestro ofrece una buena GUI basada en web para monitorear y desencadenar construcciones; los componentes esclavos se colocan en las máquinas de destino (generalmente máquinas virtuales pero podrían ser la computadora portátil Mac de uno de los desarrolladores). Los documentos son lo suficientemente buenos como para construir un sistema básico, la personalización podría ser un poco difícil (al menos lo fue para mí). Usando los enganches commit/push provistos por los sistemas VC, puede activar fácilmente las compilaciones maestra y desencadenante en los esclavos. También es compatible con construcciones incrementales (una necesidad si su proyecto es grande).

CDash

Desarrollado por los autores de CMake, CDash es una aplicación web recogida construye procedentes de toda la red, no es exactamente lo que pidieron, pero creo que vale la pena intentarlo. Muy poderoso si tienes un equipo de desarrolladores que pueden enviar continuamente resultados de compilación en sus máquinas al servidor (y si usas CMake es casi transparente). No puede desencadenar compilaciones desde el servidor como lo hace Buildbot, pero puede configurar un montón de VM con un cron que verifica los cambios y en caso de que ejecute la compilación y envíe resultados a CDash

+0

¿Querías decir BuildBot? Tengo que construir mi proyecto con g ++ en Unix y Mac, pero creo que estoy usando MSVC2008 para compilarlo en Windows. ¿Cómo es posible con BuildBot manejar sistemas que no son de Unix? He preparado una máquina virtual lista para la compilación en Windows, pero este enfoque es propenso a errores y no es muy automático ... – linello

+0

Utilizo MinGW toolchain para construir bajo Windows usando qmake, pero estamos planeando migrar a CMake, que puede manejar proyectos de VS En ambos casos, un esclavo BuildBot puede realizar la construcción. – Masci

+0

Utilizamos buildbot CI para el desarrollo de Qt multiplataforma (Mac, Windows, Linux) y funciona bien (repositorios SVN y git). Sin embargo, el soporte para construir diferentes ramas de git podría ser mejor. –

2

Jenkins admite esta característica a través de complementos para todos los principales sistemas de control de fuente Si está considerando seriamente usar Jenkins (y lo recomendaría encarecidamente), considere comprar John Ferguson Smart's Jenkins: The Definitive Guide.

4

también sugieren Jenkins por varias razones:

  • Se ejecutará en todas las plataformas que enumeró.
  • Se puede configurar para iniciar una compilación cuando se actualiza el repositorio (sugerencia: configure el Trabajo en "Poll SCM" y no tendrá que ensuciar con su herramienta SCM para que Jenkins comience a construir).
  • Proporciona un buen soporte (principalmente a través de complementos) para pruebas unitarias. [Eres proyecto está haciendo las pruebas unitarias, ¿verdad?]
  • El precio es correcto

Un problema más grande va a tener es que yo sepa, Qt en realidad no hacen compilación cruzada para otras plataformas también . Usando Jenkins (y los complementos apropiados), deberías ser capaz de resolver esto.

Un método que viene rápidamente a la mente es tener una instancia de Jenkins en cada plataforma. Cada instancia es responsable de construir la versión para su propia plataforma. Al final de la creación, los artefactos creados se ponen todos en una ubicación común compartida.

+5

> [una instancia de Jenkins en cada plataforma] - El esclavo de Jenkins en cada plataforma sería mejor; de esa manera usted tiene un control central, no tiene que actualizar cada instancia, los artefactos se almacenan en el maestro, etc. –

Cuestiones relacionadas