¿Cómo se ve un flujo de trabajo de desarrollo con Vagrant?

El mio es:

  1. Cuando comienzo un proyecto, creo un Vagrantfile para definir el entorno de desarrollo.
  2. Verifico el Vagrantfile en el control de origen, con el código inicial del proyecto
  3. Creo mi máquina virtual de desarrollo usando Vagrant ($ vagrant up)
  4. Me conecto a mi dev vm ($ vagrant ssh) y luego configuro algo para ejecutar mi aplicación, preferiblemente configurado para reiniciar el servidor cuando cambio el código para poder ignorarlo más adelante.
  5. Vuelvo a mi host IDE y navegador y comienzo a desarrollar
  6. Cuando dejo de trabajar, apago la VM ($ vagrant halt)
  7. Si alguna vez tengo que agregar una nueva biblioteca o cambiar el entorno de desarrollo, destruyo la VM ($ vagrant destroy), edito el vagrantfile y creo una nueva VM ($ vagrant up)

Mostré un ejemplo simple en una publicación de blog reciente: Automatice su entorno de desarrollo con Vagrant

Usted crea un Vagrantfile que especifica las capacidades en la VM que desea crear. El archivo vagabundo especifica RAM, número de CPU, qué carpetas compartidas desea crear, para que pueda acceder a los archivos en su VM desde las herramientas en su máquina host.

Vagabundo también interactúa con Chef o Puppet. Aquí es donde realmente amo a Vagrant. Ambas herramientas son herramientas de aprovisionamiento: instalar los paquetes que enumere en los archivos. Entonces, enumere todos los paquetes que su proyecto necesita instalados: herramienta de control de versiones, herramienta de base de datos, herramientas de compilación, otras herramientas ambientales (memcached, mecanismos de cola de trabajos, etc.)

Me gusta usar Puppet, por lo que mi manifiesto de Puppet se parece a:

paquete {“git-core”:
asegurar => presente,
}

paquete {“sqlite3”:
asegurar => presente,
}

paquete {“libsqlite3-dev”:
asegurar => presente,
}

paquete {“curl”:
asegurar => presente,
}

paquete {“libssl-dev”:
asegurar => presente,
}

Y estos son todos los paquetes que necesitan instalar varias herramientas en nuestra cadena de herramientas.

Lo que me gusta hacer aquí es comprobar todo esto en el control de versiones y compartir el archivo vagabundo y los archivos chef / puppet con el equipo. Se podría crear fácilmente un nuevo cuadro de desarrollo, con * literalmente * todo lo que necesita para su proyecto, en un solo comando:

$ vagabundo

Los archivos de títeres / chef también se pueden usar cuando implementa la aplicación, para automatizar la configuración del paquete para esos servidores también. O también puede abrir un servidor CI con relativa facilidad.

Entonces, una vez que vagas, puedes usar un editor de texto en tu máquina host y editar los archivos en la carpeta compartida que configuraste en tu archivo Vagrant. O use (vi / emacs / lo que sea) en la VM.

También me gusta usar el reenvío de agentes SSH, por lo que no tengo que configurar claves SSH para la VM en los servidores que uso.

Vagrant también se puede utilizar para generar máquinas virtuales que puede proporcionar a otros miembros del equipo, para que puedan tener los beneficios de este entorno liofilizado.

Una vez que todo está configurado, el flujo de trabajo se ve así:

  1. Un nuevo miembro del equipo revisa su repositorio y lo graba en él.
  2. Ella ejecuta ‘vagabundo’ para inicializar la VM.
  3. Puede conectarse a, por ejemplo, localhost: 8000 y conectarse a la VM, que ahora ejecuta un servidor web y escucha en esa dirección.
  4. Puede editar el código en el repositorio, y los cambios se reflejarán en la VM, reflejándose en localhost: 8000.
  5. Si el entorno central cambia, ella puede ejecutar ‘vagrant destroy && vagrant up’ para recrear la VM.

Tenga en cuenta las cosas que no tenía que hacer:

  • Instale un montón de paquetes binarios específicos de la plataforma, como una base de datos, un servidor web o una miríada de otros paquetes específicos de la plataforma que pueden diferir de su máquina de desarrollo a sus máquinas de producción. No usar macports o homebrew y esperar que los mismos paquetes estén disponibles en aptitude, o preocuparse de que haya grandes diferencias de plataforma.
  • Configure un servidor web o una base de datos. Alguien escribió esas instrucciones una vez y las puso en algún tipo de script al que hace referencia el archivo Vagrant.
  • Cambiar configuraciones. En lugar de que todos agreguen una configuración a su servidor web, entorno, etc., simplemente actualice el Vagrantfile o sus scripts de aprovisionamiento, destruya la VM e inicialícela nuevamente.

Todos deberían usar Vagrant . Es tan fácil como ejecutar `vagrant init` en su raíz de repositorio y hacer que Vagrant ejecute sus scripts de aprovisionamiento de producción existentes, o mover esa lista de instrucciones en su archivo README a un script bash.

Luego, cada vez que tenga que usar `vagrant ssh` y editar la configuración o algo en su VM, asegúrese de agregarlo al Vagrantfile o los scripts de aprovisionamiento para que nadie más tenga que hacerlo.