¿Cómo combinar Vagrant con Jenkins para el entorno de integración continua perfecto?

85

Tiene un proyecto que tiene algunos requisitos de software para ejecutar (por ejemplo: una versión específica de Apache, una versión de PHP, una instancia de una base de datos MySQL y un par de otras piezas de software).

Ya ha descubierto Vagrant , por lo que su entorno virtual está configurado. Puede crear cajas a partir de sus archivos de configuración y libros de cocina.

También ha comprendido las ventajas de un sistema de integración continua como Jenkins .

Ahora le gustaría combinar estos dos mundos (Vagrant y Jenkins) para obtener el entorno de integración continua perfecto. Para ser más específico, le gustaría no instalar el software requerido por su proyecto en la máquina que ejecuta Jenkins, pero le gustaría utilizar el entorno virtual proporcionado por Vagrant para construir periódicamente su proyecto sobre él. El software CI (Jenkins) construirá la caja Vagrant para usted y construirá y probará su proyecto en la parte superior.

¿Cómo configuraría su entorno para lograr esto?

Roberto Aloi
fuente
4
Además, su configuración de Jenkins es una caja Vagrant, por lo que puede ejecutar este entorno CI en múltiples plataformas, ya que existen muchas diferencias entre ellas.
Stephan Eggermont
1
¿Ha creado ese ambiente? La combinación de Docker & Jenkins ya es bien conocida, sin embargo, no será suficiente para entornos Windows, en cuyo caso la única buena opción, IMO, es Vagrant + Jenkins. Hay algunos aspectos a considerar, por ejemplo, ¿realmente necesitamos esclavos y en qué contextos o podríamos usar un solo servidor para crear un entorno de compilación vagabundo por proyecto a pedido (en muchas empresas solo se construyen pocos proyectos constantemente, la mayoría rara vez se construye), o deberíamos usar esto además del sistema de deduplicación para reducir la huella del disco.
Majkinetor

Respuestas:

35

es una buena solución para el sistema de compilación, mi sugerencia:

  1. Su jenkins actual funciona como CI maestro (probablemente iniciado por el usuario jenkins)
  2. Cree otro usuario en la misma máquina u otra máquina para que funcione como modo esclavo jenkins
    • jenkins slave se puede invocar desde jenkins master, y puede usar un usuario diferente como vagrant que tenía permiso y entorno para vagrant, por lo tanto, no interferirá con el servidor maestro original de jenkins.
    • cree su caja de vagabundos base, luego puede reutilizarse para acelerar su implementación
  3. La mayoría de la información de instalación (paquetes) podría ser administrada por puppet (o chef) para ser cargada en su caja virtual.

Probablemente puedas echar un vistazo a veewee , que puede crear una caja vagabunda sobre la marcha.

Aquí está el Make CI más fácil con Jenkins CI y Vagrant como mi guía para esta sugerencia.

Larry Cai
fuente
1
Desafortunadamente
langlauf.io
2
En caso de que alguien esté interesado en el enlace roto, aquí hay una copia de Make CI más fácil con Jenkins CI y Vagrant
Gilberto Treviño
12

Puede probar el complemento Vagrant para Jenkins que actualmente es compatible con Jenkins CD 1.532.3

Puede ver una demostración de este complemento en http://unethicalblogger.com/2012/03/13/vagrant-plugin-in-action.html

Christophe Furmaniak
fuente
7
este complemento no es compatible con Jenkins por encima de 1.490, por lo que es una gran limitación :-(
kenyee
no admite vagabundo que se ejecuta en esclavos también :(
Christophe Furmaniak
1
Sí, pero luego debes manejar todo el ciclo de vida de la VM por ti mismo (crear, destruir o no al final del trabajo, ...). La idea detrás del complemento es que el complemento lo hace por usted y luego puede concentrarse en su propósito principal: usar una máquina virtual como un contenedor aislado.
Christophe Furmaniak
2
El complemento mencionado tiene problemas molestos, que aún no se han solucionado ( issues.jenkins-ci.org/browse/JENKINS-26326 ), y el desarrollo se detuvo hace un año. No lo recomendaría.
Ross Ivantsiv
1
Ejecutar la instancia vagabunda a pedido para realizar la compilación parece ser lo correcto. ¿Si este complemento aún no funciona?
Atifm
1

Personalmente, sugeriría usar Hashicorp Packer para construir sus cajas Vagrant para desarrolladores, y luego usarlo para generar también una imagen de Docker o AWS u OpenStack que puede ejecutar en su sistema CI. Vagrant es una herramienta increíble, pero la sobrecarga de las VM puede ser un poco alta para que un sistema de CI las haga girar constantemente hacia arriba y hacia abajo, especialmente si desea una respuesta realmente rápida.

En un cliente anterior, básicamente arrancamos las máquinas Vagrant una vez con el sistema, y ​​luego ejecutamos las compilaciones Docker / virtualenv dentro de esas VM y las destruimos periódicamente cuando había una actualización importante o un problema con el entorno que no se comportaba correctamente.

https://www.packer.io/docs/builders/openstack.html

dragón788
fuente
Si puedo preguntar, ¿ejecutó jenkins como un usuario separado? Si es así, ¿cómo se las arregló para proporcionar acceso a vagabundo? Gracias
Jaswanth Manigundan
Siempre que vagrant se instale normalmente, se coloca en la ruta del sistema. Los cuadros en sí mismos normalmente se cargan en el directorio de inicio del usuario actual, pero puede anular el hogar vagabundo con una variable de entorno. Combinamos todo esto, además de hacer que la caja se extraiga con una versión específica como parte del proceso de compilación para que se almacene en caché una vez y luego se reutilice.
dragon788