automation agile development-environment scrum

automation - ¿Cómo automatizar la configuración del entorno de desarrollo?



agile development-environment (14)

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?


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.


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. Herramientas de instalación automatizadas para automatizar la instalación y configuración de varios servicios, herramientas y archivos de configuración de una estación de trabajo:

    • Puppet tiene una curva de aprendizaje pero es poderosa. 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 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 Luego, por supuesto, también hay herramientas de imágenes de disco para almacenar una imagen de un host configurado de manera 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. Virtualization 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 haya instalado / configurado 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 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

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 (proxy de paquete). 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).

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

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 provisioned 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. Usted puede incluso SSH con vagrant ssh . Si cometes un error o rompes algo, acaba vagrant destroy manera vagrant up y vagrant up de nuevo.

Vagrant crea automáticamente una carpeta sincronizada para su sistema de archivos local, lo que significa que no necesita desarrollarse dentro de la máquina virtual (es decir, usar 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 sacar el repo y correr vagrant up , y están literalmente listos para partir.

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.

Vagrant


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).


Pruebe DevScript en http://nsnihalsahu.github.io/devscript . Es un comando como, devscript lamp o devscript laravel o devscript django . En unos minutos, dependiendo de la velocidad de su co de internet


Puede descargar la última versión de Java JDK desde el sitio Java de Oracle: descargas de Java SE. Encontrará instrucciones para instalar JDK en los archivos descargados, siga las instrucciones dadas para instalar y configurar la configuración. Finalmente establezca las variables de entorno PATH y JAVA_HOME para hacer referencia al directorio que contiene java y javac, generalmente java_install_dir/bin y java_install_dir respectivamente.

Si está ejecutando Windows e instaló el JDK en C:/jdk1.8.0_102 , tendría que poner la siguiente línea en su archivo C:/autoexec.bat .

set PATH=C:/jdk1.8.0_102/bin;%PATH% set JAVA_HOME=C:/jdk1.8.0_102

Alternativamente, también puede hacer clic derecho en Mi PC, seleccionar Propiedades, luego Avanzado, luego Variables de entorno. Luego, actualizará el valor de PATH y presionará el botón OK.

En Linux, si el SDK está instalado en /usr/local/jdk1.8.0_102 y utiliza el shell C, colocará el siguiente código en su archivo .cshrc.

setenv PATH /usr/local/jdk1.8.0_102/bin:$PATH setenv JAVA_HOME /usr/local/jdk1.8.0_102

Alternativamente, si usa Android Studio, sabrá automáticamente dónde ha instalado su Java. Android IDEs

Hay tantas tecnologías sofisticadas disponibles para desarrollar aplicaciones de Android, las tecnologías familiares, que utilizan predominantemente herramientas de la siguiente manera

Android Studio Eclipse IDE(Deprecated)

Elysium Academy Proporciona capacitación para Android, MICROSOFT, REDHAT, CEH y VMware con profesionales certificados que tienen muy buenas experiencias y habilidades


Recomiendo Blueprint de DevStructure. Es de código abierto y su caso de uso es realmente la razón exacta 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)



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.


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


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 que la generación genere la infraestructura de ayuda. Este es el enfoque adoptado, por ejemplo, por 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 (soportado), 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 es aceptable verificar cosas como archivos IDE directamente.


Use puppet 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.


si está usando un sabor 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 describes ya tienen paquetes disponibles: svn, eclipse, etc. podrías enrollar tus propios paquetes para software específicos de la compañía, crear un repositorio (quizás solo disponible en la red local) y luego tu configuración podría reducirse a una sola bash script que agregaría el repo de la compañía a /etc/apt/sources.list (debian / ubuntu) y luego llamaría un comando como,

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

podría usar buildbot para luego automatizar compilaciones regulares para paquetes de empresas que cambian con frecuencia.