Queremos establecer un servicio de integración continua (CI) para nuestro proyecto. Ese servicio de CI debe controlar todos los aspectos de la vida del proyecto, incluida la implementación.
Es decir, queremos que un agente de CI en cada iteración tome un sistema limpio (específicamente Ubuntu Server), implemente nuestro proyecto allí y ejecute pruebas.
Probablemente escribiríamos el servicio de CI nosotros mismos, desde cero, ya que nuestro ecosistema es bastante inusual. La pregunta es: ¿cómo proporcionar un sistema de pizarra limpia para cada iteración de CI?
La implementación del proyecto instala algunos paquetes de Debian, configura varios sitios nginx y también instala algunos paquetes en un administrador de paquetes de implementación específico del lenguaje (LuaRocks), en todo el sistema. Nada más intrusivo que eso (creo). Por lo tanto, es más importante poder configurar una pizarra limpia rápidamente (dentro de un minuto en hardware moderno, más rápido, mejor) que garantizar un aislamiento y una limpieza absolutos.
Veo dos formas de hacer lo que necesitamos:
- O bien, establecer una cárcel de algún tipo (como lxc, tal vez).
- O instale alguna máquina virtual que pueda hacer instantáneas y úselas.
Pero en este momento no tengo suficiente información para decidir.
¿Qué me aconsejarías? ¿Alguna otra opción? ¿Algún nombre de herramienta específico?
Nota: El servicio de CI se ejecutará dentro de un invitado Citrix XenServer. Las soluciones pagas están bien si los precios son razonables. (Por lo general, no son razonables en este campo). Las soluciones de CI remotas no están bien.
fuente
Echa un vistazo a Jenkins . Tiene complementos que le permiten ejecutar compilaciones en máquinas virtuales en VMWare o VirtualBox o en la nube de Amazon / a Eucalyptus . Para las máquinas virtuales que se ejecutan en la nube, puede especificar un script de inicio en el que podría tomar medidas como instalar paquetes.
fuente
Usaría la infraestructura de VM y crearía una plantilla base, o usaría la nube como sugirió @LarsKotthoff. Es fácil girarlos rápidamente, y puede estar seguro de dónde comenzó.
Sin embargo, en última instancia, necesitará algo fuera de esa VM para organizar lo que está sucediendo (configurar la máquina y comenzar el proceso que desee en la máquina). Vería a Jenkins por su capacidad de capturar la salida de scripts para su posterior inspección.
Aunque Jenkins comenzó como un servidor de CI, muchas organizaciones con las que he trabajado ahora lo usan por mucho más que eso, realmente es una herramienta para comenzar (manualmente o programado) y capturar resultados, y validar lo que sucedió como se esperaba. Y es muy flexible.
fuente
Jenkins ha sido mencionado por bastantes. Puede comenzar con los scripts, pero Jenkins le proporcionará la misma flexibilidad con menos gastos generales.
Aquí es donde las imágenes de máquinas virtuales son útiles. Puede configurar su imagen limpia y hacer que cada máquina lance una bifurcación. La imagen original nunca se modifica, pero sus pruebas no notarán la diferencia. Definitivamente debería poder obtener una imagen de arranque ejecutándose en un minuto.
Si está buscando varias máquinas en funcionamiento a la vez, eche un vistazo a Nimbula (estoy siendo desvergonzado; trabajo para ellos). Para implementaciones más pequeñas, es gratis y le permite reunir su propia nube privada para realizar pruebas ... o cualquier otra cosa. Entre Jenkins y un archivo de orquestación, puede activar servidores host, probar clientes y todo lo demás para ejecutar automáticamente toda la gama de códigos de prueba sin ninguna interacción.
fuente