Forma efectiva de garantizar un "sistema de pizarra limpia" para un servicio de integración continua

10

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.

Alexander Gladysh
fuente

Respuestas:

5

Echa un vistazo a Chef / Vagabundo . No estoy seguro de si será lo suficientemente rápido, pero hay algo que considerar.

En caso de que no esté familiarizado con Chef, es un servidor diseñado para permitir el aprovisionamiento de servidores basado en código simple. Recomiendo echar un vistazo a uno de los webcasts. Webcast del Chef Django

Vagabundo, veewee, chef-solo y cuchillo-solo , creo que este cubre la mayor parte de lo que quieres hacer.

Publicación de blog de Vagrant Una publicación de blog que muestra una configuración rápida de un servidor utilizando Vagrant.

Philip Tinney
fuente
Gracias. ¿Le gustaría proporcionar más detalles en su respuesta?
Alexander Gladysh
No lo he usado para esto, así que todo lo que puedo hacer es publicar algunos enlaces que creo que deberían ayudar.
Philip Tinney el
13

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.

Lars Kotthoff
fuente
Gracias, pero Jenkins es un servidor de CI y me gustaría saber sobre los medios para construir uno nosotros mismos.
Alexander Gladysh
2
@AlexanderGladysh ¿Por qué quieres reinventar la rueda? Las compilaciones de Jenkins pueden ejecutar todo, desde crear archivos hasta scripts de shell simples, además tiene una interfaz robusta, un gran soporte y muchos complementos. Incluso si su compilación es muy complicada, tiene que ser un script de shell en algún lugar que jenkins pueda ejecutar
TheLQ
Incluso si no desea usar Jenkins, creo que algo basado en la nube sería el camino a seguir para usted. Puede personalizar una imagen de máquina para proporcionar el software que desea y solo agregar configuración y código para probar al iniciar la instancia para reducir el tiempo de inicio.
Lars Kotthoff
De todos modos, Jenkins o no Jenkins, ¿qué usar para obtener instantáneas de sistema operativo de pizarra limpia rápidamente? (Por favor, deje de mencionar nubes de terceros; esto debe ejecutarse en nuestros propios servidores).
Alexander Gladysh
¿Ejecutar una nube Eucalyptus / OpenStack / ... en sus propios servidores?
Lars Kotthoff
2

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.

tecnología tenaz
fuente
Gracias, pero me gustaría configurar las cosas directamente dentro de la instancia de Xen VM, no afuera; esto es mucho más fácil de organizar en mi caso específico. Investigaré a Jenkins, pero todavía estoy buscando una solución más estrecha.
Alexander Gladysh
Además, explique con respecto a "utilizar la infraestructura de VM y crear una plantilla base".
Alexander Gladysh
2

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.

Jenkins ha sido mencionado por bastantes. Puede comenzar con los scripts, pero Jenkins le proporcionará la misma flexibilidad con menos gastos generales.

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.

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.

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.

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.

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.

Jeff Ferland
fuente
Ugh Tal vez estoy lento hoy, pero intenté buscar en el sitio de Nimbula, pero no puedo ver la razón detrás del discurso de marketing. ¿Le interesa señalar un texto sensato que describa cómo hacer lo que necesito? (Es decir, configurar una plantilla de máquina invitada y, a partir de la secuencia de comandos, crear una instancia y matarla para cada sesión de CI).
Alexander Gladysh
@AlexanderGladysh Es útil si está utilizando muchas máquinas para construir / mucho trabajo de CI. Es inútil si no tiene suficiente carga de trabajo para garantizar un grupo de al menos 3 máquinas.
Jeff Ferland