Pregunta ¿Cómo automatizar la configuración del entorno de desarrollo? [cerrado]


Cada vez que un nuevo desarrollador se une al equipo o la computadora un desarrollador está utilizando los cambios, el desarrollador necesita hacer un montón de trabajo para configurar el entorno de desarrollo local para que el proyecto actual funcione. Como equipo SCRUM, estamos tratando de automatizar todo, incluidas la implementación y las pruebas, por lo que lo que estoy preguntando es si existe alguna herramienta o práctica para automatizar la configuración del entorno de desarrollo local.

Por ejemplo, para configurar mi entorno, primero tuve que instalar eclipse, luego SVN, Apache, Tomcat, MySQL, PHP. Después de eso llené el DB y tuve que hacer pequeños cambios en los diversos archivos de configuración, etc. ¿Hay alguna forma de reducir este trabajo a un solo clic?


74
2018-05-08 11:10


origen


Respuestas:


Hay varias opciones, y a veces una combinación de estas es útil:

  • instalación automatizada
  • imágenes de disco
  • virtualización
  • control de código fuente

Detalles sobre las diversas opciones:

  1. Instalación automatizada  Herramientas para automatizar la instalación y configuración de varios servicios, herramientas y archivos de configuración de una estación de trabajo:

    • Marioneta tiene una curva de aprendizaje, pero es poderoso. Usted define las clases de máquinas (caja de desarrollo, servidor web, etc.) y luego hace lo necesario para instalar, configurar y mantener la caja en el estado correcto. Pidió un clic, pero Puppet de forma predeterminada no tiene ningún clic, ya que revisa su máquina periódicamente para asegurarse de que aún esté configurada como lo desea. Detectará cuándo se ha cambiado un archivo o modo y solucionará el problema. Actualmente uso esto para mantener un puñado de cajas RedHat Linux, aunque es capaz de manejar miles. (No es compatible con Windows a partir de 2009-05-08).
    • Cfengine es otro. He visto esto utilizado con éxito en una tienda con 70 ingenieros que usan RedHat Linux. Sus limitaciones fueron parte del motivo de Puppet.
    • SmartFrog es otra herramienta para configurar hosts. Es compatible con Windows.
    • Guiones de Shell. RightScale tiene ejemplos de cómo configurar una imagen de Amazon EC2 utilizando scripts de shell.
    • Instalar paquetes. En una caja Unix es posible hacer esto completamente con paquetes, y en Windows msi puede ser una opción. Por ejemplo, RubyWorks le proporciona una pila completa de Ruby on Rails, todo mediante la instalación de un paquete que a su vez instala otros paquetes a través de dependencias.
  2. Imágenes de disco  Entonces, por supuesto, también hay herramientas de imágenes de disco para almacenar una imagen de un host configurado de modo que se pueda restaurar a otro host. Al igual que con la virtualización, esto es especialmente bueno para los cuadros de prueba, ya que es fácil restaurar las cosas a un borrón y cuenta nueva. Mantener las cosas continuamente actualizadas sigue siendo un problema. ¿Vale la pena crear nuevas imágenes solo para propagar un cambio en el archivo de configuración?

  3. Virtualización es otra opción, por ejemplo, hacer copias de una imagen Xen, VirtualPC o VMWare para crear nuevos hosts. Esto es especialmente útil con los cuadros de prueba, ya que sin importar qué desastre crea una prueba, puede restaurar fácilmente a un estado limpio y conocido. Al igual que las herramientas de imágenes de disco, mantener los servidores actualizados requiere más pasos manuales y mayor vigilancia que si se utilizara una herramienta de instalación / configuración automatizada.

  4. Control de código fuente  Una vez que tenga las herramientas necesarias instaladas / configuradas, entonces hacer compilaciones debería ser una cuestión de verificar lo que se necesita de un repositorio de código fuente y construirlo.

Actualmente utilizo una combinación de los anteriores para automatizar el proceso de la siguiente manera:

  • Comience con una instalación del sistema operativo barebones en un invitado de VMWare
  • Ejecute un script de shell para instalar Puppet y recuperar sus configuraciones desde el control del código fuente
  • Marioneta para instalar herramientas / componentes / configuraciones
  • Echa un vistazo a los archivos del control de código fuente para crear y desplegar nuestra aplicación web

63
2018-05-08 11:55



Me encontré con esta pregunta y me sorprendió mucho que nadie haya mencionado Vagabundo todavía.

Vagrant

Como mencionaron Pete TerMaat y otros, la virtualización es una excelente forma de administrar y automatizar entornos de desarrollo. Vagrant básicamente quita el dolor de la configuración de estas cajas virtuales.

En cuestión de minutos puede tener una copia completamente nueva de su distribución de Linux favorita en funcionamiento, y aprovisionado exactamente de la misma manera que su servidor de producción.

No más peleas con OSX o Windows para instalar PHP, MySQL, etc. Todo el software vive y se ejecuta dentro de la máquina virtual. Puedes incluso SSH con vagrant ssh. Si comete un error o rompe algo, simplemente vagrant destroy eso y vagrant up para comenzar de nuevo

Vagrant crea automáticamente un carpeta sincronizada a su sistema de archivos local, lo que significa que no necesita desarrollarse dentro de la máquina virtual (es decir, usando Vim). Usa lo que sea tu editor de elección.

Ahora creo una nueva "caja de Vagabundos" para casi todos los proyectos que hago. Todas mis configuraciones se guardan en el repositorio del proyecto, por lo que es fácil atraer a otro miembro del equipo. Simplemente tienen que tirar del repositorio y correr vagrant up, y están literalmente listos para ir.

Esto también hace que sea mucho más fácil manejar proyectos que tienen diferentes requisitos de software. Tal vez tenga algunos proyectos que dependen de PHP 5.3, pero algunos más nuevos que ejecutan PHP 5.4. Simplemente instale la versión que desea para ese proyecto.

¡Echale un vistazo!


17
2018-05-21 17:39



Un punto importante es configurar sus proyectos en control de fuente de manera que pueda construir, implementar y ejecutar inmediatamente después de finalizar la compra.

Eso significa que también debe registrar en la infraestructura auxiliar, como Makefiles, archivos de compilación de hormigas, etc., y la configuración de las herramientas, como los archivos de proyectos IDE.

Eso debería encargarse de la complicación de configuración para proyectos individuales.

Para la configuración básica de la máquina, puede usar una imagen estándar. Otra opción es usar las herramientas de su plataforma para automatizar la instalación. En Linux, puede crear un metapaquete que depende de todos los paquetes que necesita. En Windows, algo similar debería ser posible usando MSI o similar.

Editar:

Lo ideal es que, en lugar de verificar la infraestructura de ayuda, verifique la información que permite la compilación de generar la infraestructura de ayuda. Este es el enfoque adoptado por, p. el sistema de compilación GNU (autotools, etc.), o por Maven. Esto es aún más elegante, porque puede (teóricamente) generar infraestructura para cualquier entorno de compilación (compatible), por lo que no está obligado a, p. un IDE específico, y las configuraciones en la infraestructura de ayuda (rutas, etc.) no necesitan duplicar las configuraciones principales del proyecto.

Sin embargo, este también es un enfoque más complejo, por lo que si no puede hacer que funcione, creo que es aceptable verificar cosas como archivos IDE directamente.


13
2018-05-08 11:19



Me gusta usar Virtual PC o VMware para virtualizar el entorno de desarrollo. Esto proporciona un "entorno de desarrollo" estándar que podría compartirse entre los desarrolladores. No tiene que preocuparse por el software que el usuario podría agregar a su sistema que pueda entrar en conflicto con su entorno de desarrollo. También me proporciona una forma de trabajar en dos proyectos donde los entornos de desarrollo no pueden estar en un sistema (usando dos versiones diferentes de una tecnología central).


7
2018-05-08 11:18



Utilizar marioneta para configurar su entorno de desarrollo y producción El uso de un sistema de automatización de primer nivel es la única forma de escalar tus operaciones.


3
2018-05-08 11:19



Siempre existe la opción de usar máquinas virtuales (ver p. Reproductor VMWare) Cree un entorno y cópielo para cada empleado nuevo con una configuración mínima necesaria.


1
2018-05-08 11:15



En un lugar anterior teníamos todo (y me refiero a TODO) en SCM (clearcase luego SVN). Cuando un nuevo desarrollador puede, instalan ClearCase | SVN y aspiran el repositorio. Esto también maneja el caso cuando necesita actualizar una lib / herramienta particular ya que puede hacer que los equipos de desarrollo actualicen su entorno.

Usamos dos repo para este código y herramientas / config vividas en lugares separados.


1
2018-05-08 13:32



Recomiendo Blueprint de DevStructure. Es de código abierto y tu caso de uso es en realidad el exacto razón por la que originalmente escribimos el software. Nuestros objetivos han cambiado algo, pero todavía es la herramienta perfecta para lo que usted está describiendo. En resumen, puede crear configuraciones de servidores reutilizables: administración de configuraciones muertas y simples. ¡Espero que esto ayude!

https://github.com/devstructure/blueprint (Blueprint @ Github)


1
2018-06-04 06:11



He estado pensando sobre esto yo mismo. Hay algunas otras tecnologías que podrías incluir en la mezcla. Esto es lo que estoy configurando actualmente:

  • Imágenes de instalación pre-sembradas basadas en PXE (Debian Squeeze). Puede iniciar una máquina de cero (o un nuevo dispositivo virtual) y seleccionar la imagen desde el menú de inicio de PXE. Esto tiene la gran ventaja de poder instalar su entorno en máquinas físicas (además de los dispositivos virtuales).
  • Alguien ya ha mencionado a Puppet. Yo uso CFEngine pero es un trato similar. Esencialmente, su configuración está documentada y centralizada en los archivos de políticas que un agente del cliente aplica continuamente.
  • si no desea un entorno rígido (es decir, los desarrolladores pueden elegir una combinación de juegos de herramientas) puede enrollar sus propios paquetes de deb para que los nuevos desarrolladores puedan escribir sudo apt-get install acmecorp-eclipse-env o sudo apt-get install acmecorp-intellij-env, por ejemplo.
  • Un poco fuera de tema, pero si ejecuta un entorno basado en Debian (es decir, Ubuntu), considere instalar apt-cacher (paquete proxy). Además de ahorrar ancho de banda, hará que sus instalaciones sean mucho más rápidas (ya que los paquetes están en la memoria caché de su red local).

1
2017-08-17 22:51



Si está utilizando OSX y trabajando con Rails. Sugeriría cualquiera de los siguientes:


1
2017-09-10 19:08



Si utiliza máquinas en una configuración estándar, puede crear una imagen del disco con una nueva instalación perfectamente configurada; ese es un enfoque muy popular en muchas empresas (y no solo para los desarrolladores). Si necesita sistemas operativos configurados por separado, puede tar-bz2 todos los archivos agregados y modificados una vez que un sistema operativo configurado se convierte en la configuración deseada, y simplemente desatarlo como raíz para crear el entorno deseado desde cero.


0
2018-05-08 11:14