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

80

Cada vez que un nuevo desarrollador se une al equipo o la computadora que un desarrollador está usando cambios, el desarrollador necesita hacer mucho trabajo para configurar el entorno de desarrollo local para que el proyecto actual funcione. Como equipo de SCRUM, estamos tratando de automatizar todo, incluida la implementación y las pruebas, por lo que lo que estoy preguntando es: ¿existe una 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é la base de datos y tuve que hacer cambios menores en los diversos archivos de configuración, etc. ¿Hay alguna manera de reducir este trabajo a un clic?

nimcap
fuente

Respuestas:

68

Hay varias opciones y, a veces, resulta útil una combinación de ellas:

  • instalación automatizada
  • imagen de disco
  • virtualización
  • control de código fuente

Detalles sobre las distintas opciones:

  1. Automatizado de instalación Herramientas para la automatización de la instalación y la configuración de los diversos servicios de una estación de trabajo, herramientas y archivos de configuración:

    • Puppet tiene una curva de aprendizaje pero es poderoso. Usted define 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 adecuado. Solicitó un clic, pero Puppet de forma predeterminada es cero clic, ya que verifica su máquina periódicamente para asegurarse de que aún esté configurada como se desea. Detectará cuándo se ha cambiado un archivo o modo y solucionará el problema. Actualmente utilizo esto para mantener un puñado de cajas RedHat Linux, aunque es capaz de manejar miles. (No es compatible con Windows desde 2009-05-08).
    • Cfengine es otro. He visto esto utilizado con éxito en una tienda con 70 ingenieros que utilizan RedHat Linux. Sus limitaciones fueron parte del motivo de Puppet.
    • SmartFrog es otra herramienta para configurar hosts. Es compatible con Windows.
    • Secuencias de comandos de Shell. RightScale tiene ejemplos de cómo configurar una imagen de Amazon EC2 utilizando scripts de shell.
    • Instale 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 al instalar un paquete que a su vez instala otros paquetes a través de dependencias.
  2. Imágenes de disco Por supuesto, también existen herramientas de creación de imágenes de disco para almacenar una imagen de un host configurado de modo que se pueda restaurar en otro host. Al igual que con la virtualización, esto es especialmente bueno para las cajas de prueba, ya que es fácil restaurar las cosas a una pizarra limpia. 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. La virtualización es otra opción, por ejemplo, hacer copias de una imagen de Xen, VirtualPC o VMWare para crear nuevos hosts. Esto es especialmente útil con las cajas de prueba, ya que no importa qué lío cree una prueba, puede restaurar fácilmente a un estado limpio y conocido. Al igual que con las herramientas de imágenes de disco, mantener los hosts actualizados requiere más pasos manuales y vigilancia que si se utiliza una herramienta de instalación / configuración automatizada.

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

Actualmente utilizo una combinación de lo anterior para automatizar el proceso de la siguiente manera:

  • Comience con una instalación de sistema operativo barebones en un invitado VMWare
  • Ejecute un script de shell para instalar Puppet y recuperar sus configuraciones del control de código fuente
  • Puppet para instalar herramientas / componentes / configuraciones
  • Consulte los archivos del control de código fuente para crear e implementar nuestra aplicación web
Pete TerMaat
fuente
En nuestra oficina hay windows, linux y mac os. así que elegiré la opción de virtualización.
nimcap
Volamos con virtualización y es una buena solución. Cuando comencé, me tomó de 3 a 4 días configurarlo, ahora los nuevos desarrolladores se configuran en el tiempo que lleva copiar una imagen de VPC.
Burt
5
No, no escribí ese artículo, aunque a juzgar por las similitudes, parece que lo inspiré. :-)
Pete TerMaat
20

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

Vagabundo

Como han mencionado Pete TerMaat y otros, la virtualización es una excelente manera de administrar y automatizar entornos de desarrollo. Vagrant básicamente elimina el dolor de configurar estas cajas virtuales.

En cuestión de minutos, puede tener una copia completamente nueva de su distribución de Linux favorita en funcionamiento y aprovisionada 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. Incluso puedes SSH convagrant ssh . Si comete un error o rompe algo, simplemente vagrant destroyhágalo y vagrant upcomience de nuevo.

Vagrant crea automáticamente una carpeta sincronizada con su sistema de archivos local, lo que significa que no necesita desarrollar dentro de la máquina virtual (es decir, usando Vim). Utilice el editor que elija.

Ahora creo una nueva "caja Vagrant" para casi todos los proyectos que hago. Toda mi configuración se guarda en el repositorio del proyecto, por lo que es fácil incorporar a otro miembro del equipo. Simplemente tienen que extraer el repositorio y ejecutarvagrant up , y están literalmente listos para funcionar.

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 se basan en PHP 5.3, pero algunos más nuevos que ejecutan PHP 5.4. Simplemente instale la versión que desee para ese proyecto.

¡Echale un vistazo!

Jonathan
fuente
1
La depuración puede ser una molestia en entornos virtualizados
Jonathan
13

Un punto importante es configurar sus proyectos en control de código fuente, de modo que pueda compilarlos, implementarlos y ejecutarlos inmediatamente después del pago.

Eso significa que también debe verificar la infraestructura auxiliar, como Makefiles, ant buildfiles, etc., y la configuración de las herramientas, como los archivos de proyecto IDE.

Eso debería solucionar los problemas de configuración para proyectos individuales.

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

Editar:

Idealmente, en lugar de registrar la infraestructura de ayuda, verifica la información que permite que la compilación genere la infraestructura de ayuda. Este es el enfoque adoptado, por ejemplo, por el sistema de construcció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, por ejemplo, a un IDE específico, y las configuraciones en la infraestructura auxiliar (rutas, etc.) no necesitan duplicarse la configuración principal del proyecto.

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

sleske
fuente
7

Me gusta usar Virtual PC o VMware para virtualizar el entorno de desarrollo. Esto proporciona un "entorno de desarrollo" estándar que se puede compartir entre los desarrolladores. No tiene que preocuparse por el software que el usuario pueda agregar a su sistema y 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 ambos en un sistema (utilizando dos versiones diferentes de una tecnología central).

Jeremyasnyder
fuente
¿La ejecución en un entorno VirtualPc / VMWare afecta mucho el rendimiento? ¿Utiliza Visual Studio 2008?
Joel Gauvreau
Conozco al menos una gran tienda de desarrollo de software que hace TODO su desarrollo exclusivamente en máquinas virtuales (VMWare). Las cosas están mucho mejor ahora que las CPU tienen soporte de virtualización de hardware ...
Tomfanning
Debería tener cuidado con los conflictos de nombres de computadora. Windows no está muy contento cuando dos máquinas con el mismo nombre aparecen en una sola red. También prefiero no tener mi entorno de desarrollo en una máquina virtual. La sobrecarga realmente puede afectar mi desempeño.
Kieveli
2
Utilizamos un entorno de desarrollo completamente virtualizado. Usamos VMServer o VirtualBox para alojar las VM de Vista. La imagen de la máquina virtual contiene toda nuestra pila de desarrollo, pero no está adjunta al dominio corporativo. Cuando un usuario necesita una nueva máquina, la copia localmente, ejecuta NewSID y luego se une al dominio con un nombre de máquina único. En el hardware moderno, no hay una degradación notable del rendimiento. Usamos VS2008 con ~ 20 proyectos C ++ / C # en una solución y todo funciona bien.
Colin Desmond
Una gran ventaja que veo con la virtualización es la capacidad de guardar el estado actual tal como está, de modo que cuando vuelva a él más tarde, vuelva exactamente a donde estaba. No está exactamente relacionado con la configuración de una nueva máquina de desarrollo, pero es un buen efecto secundario de usar una máquina virtual.
Joel Gauvreau
3

Utilice puppet para configurar su entorno de desarrollo y producción. Usar un sistema de automatización de primer nivel es la única forma de escalar sus operaciones.

David Schmitt
fuente
1

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

tehvan
fuente
1

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

Usamos dos repositorios para esto, por lo que el código y las herramientas / configuración vivían en lugares separados.

Mike Reedell
fuente
1

Recomiendo encarecidamente Blueprint de DevStructure. Es de código abierto y su caso de uso es en realidad la razón exacta por la que originalmente escribimos el software. Nuestros objetivos han cambiado un poco, pero sigue siendo la herramienta perfecta para lo que está describiendo. En resumen, puede crear configuraciones de servidor reutilizables: administración de configuración muy simple. ¡Espero que esto ayude!

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

Matt Tanase
fuente
1
¿Se trata de un entorno de desarrollo o de un servidor?
nimcap
1

Yo mismo he estado pensando en esto. Hay algunas otras tecnologías que podrías incluir. Esto es lo que estoy configurando actualmente:

  • Imágenes de instalación pre-sembradas basadas en PXE (Debian Squeeze). Puede iniciar una máquina completa (o un nuevo dispositivo virtual) y seleccionar la imagen en el menú de inicio de PXE. Esto tiene la principal ventaja de poder instalar su entorno en máquinas físicas (además de dispositivos virtuales).
  • Alguien ya mencionó a Puppet. Yo uso CFEngine pero es un trato similar. Básicamente, su configuración está documentada y centralizada en archivos de políticas que un agente aplica continuamente al cliente.
  • si no desea un entorno rígido (es decir, los desarrolladores pueden elegir una combinación de conjuntos de herramientas), puede lanzar sus propios paquetes deb para que los nuevos desarrolladores puedan escribir sudo apt-get install acmecorp-eclipse-envo 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(proxy de paquete). Además de ahorrar ancho de banda, hará que sus instalaciones sean mucho más rápidas (ya que los paquetes se almacenan en caché en su red local).
hoipolloi
fuente
0

Si usa máquinas en una configuración estándar, puede crear una imagen del disco con una instalación nueva y perfectamente configurada; ese es un enfoque muy popular en muchas corporaciones (y no solo para 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 convierta en la configuración deseada, y simplemente descomprímalo como root para crear el entorno deseado desde cero.

Alex Martelli
fuente
0

si está usando una versión de Linux, probablemente tenga un sistema de administración de paquetes: piensa .rpm para fedora / redhat, o .deb para ubuntu / debian. muchas de las cosas que describe ya tienen paquetes disponibles: svn, eclipse, etc., podría crear sus propios paquetes para el software específico de la empresa, crear un repositorio (quizás solo disponible en la red local) y luego su configuración podría reducirse a una sola script bash que agregaría el repositorio de la compañía a /etc/apt/sources.list (debian / ubuntu) y luego llamaría a un comando como,


/home/newhire$ apt-get update && apt-get install some complete package list

puede usar buildbot para luego automatizar las compilaciones regulares de los paquetes de la empresa que cambian con frecuencia.

si28719e
fuente
0

Pruebe DevScript en http://nsnihalsahu.github.io/devscript . Es un comando como, devscript lampo devscript laravelo devscript django. En unos pocos minutos, dependiendo de la velocidad de su empresa de Internet

Nihal Sahu
fuente