¿Manera efectiva de mantener proyectos pasados ​​con su entorno de desarrollo laboral?

19

Encuentro que cada vez que quiero ejecutar un proyecto pasado, tomará mucho tiempo antes de que pueda encontrarlo y antes de tener todo configurado nuevamente para que pueda ejecutarse.

Por ejemplo, tengo proyectos de Python que creé en Linux, y depende de los paquetes de software que se instalan fácilmente en Linux, sin embargo, ya no tengo la VM de Linux que estaba usando. Y algunos de mis otros proyectos dependen de otras variables como la configuración del servidor web, las variables PATH, sdk, IDE, la versión del sistema operativo, el dispositivo, etc.

¿Alguien tiene una forma efectiva de manejar este problema? Por ahora solo me he preocupado por mantener el código fuente respaldado, sin embargo, es difícil restablecer el entorno de desarrollo de trabajo y también es difícil mantener el entorno de desarrollo de trabajo .

Korey Hinton
fuente
66
NSA es mi respaldo
Steffe

Respuestas:

17

Lo que he hecho en el pasado es convertir la máquina de desarrollo físico en una VM o, si ya es una VM, conservarla para su uso futuro. No es tan eficiente como me gustaría para el uso del espacio en disco, pero el espacio es barato. Además, este proceso es mucho menos costoso en términos de tiempo que intentar reconfigurar un entorno en el futuro si surge la necesidad.

G_P
fuente
2
Creo que también necesita conservar copias de todo el software / versión e instalar su proyecto desde un script. Es un gran paso adelante poder reproducir rápidamente la instalación cada vez .
tzerb
Esto fue lo que hice en el pasado ... fue excelente para admitir diferentes entornos de cliente, etc. problema ... Pero personalmente creo que los discos duros son baratos. :-)
davewasthere
Con el soporte de LXC mejorando, es seguro usar eso en lugar de VM cuando se trata de entornos de Linux. Es mucho menos exigente en recursos y mucho más rápido. ATM la mejor herramienta para su gestión es estibador
karka91
11

Mi metodología favorita actual es mantener un script que instale TODAS las dependencias necesarias para un proyecto, descargue la fuente y conecte todo. Algunas secuencias de comandos tienen dos modos: uno para producción, que generalmente es un subconjunto del otro modo: desarrollo.

Algunos entornos solo tardan unos 5 minutos en instalarse con un script; en ese caso, mantengo una VM local con una nueva instalación del sistema operativo de destino en el que implemento el script del proyecto cuando llego al trabajo por la mañana, y luego hago toda la codificación trabajo relacionado en esa instancia de VM. Antes de irme, empujo todos los cambios a través de git a mi máquina física o a nuestro repositorio central, y termino la VM.

Si el entorno tarda más en configurarse (instalaciones de larga duración, archivos grandes para descargar, algo así), hago el procedimiento anterior una vez por semana.

El beneficio es que es muy fácil de implementar en una nueva máquina y / o servidor de producción, todo está documentado en el script y el script se verifica con mucha frecuencia.

Max
fuente
4

El concepto que está describiendo es la gestión de la configuración. Esto es lo que parece, una forma de identificar, grabar, versionar / rastrear e informar un entorno. A menudo es una tarea que está fuertemente relacionada con el control de versiones y la gestión de compilación, pero es lo suficientemente distinta que a menudo requiere una estrategia separada, incluso si utiliza algunos de los mismos conceptos y los mismos mecanismos de procesamiento y almacenamiento.

La gestión de la configuración, además de ayudar a mantener un entorno de trabajo bajo control, también ayuda a establecer un registro de los diferentes entornos de trabajo en los que se utiliza el software (desarrollo como se mencionó, más pruebas / control de calidad, despliegue a clientes de rutina, despliegue a clientes que requieren consideración especial o configuración especial o construir propiedades, y así sucesivamente).

Como dije, a menudo esta es una tarea que coincide con el control de la versión de origen y, a menudo, los datos de administración de la configuración residen junto al origen en la documentación y en el repositorio de origen. No tiene que ser así, pero a menudo es una cuestión de conveniencia.

La automatización de algunos aspectos de la gestión de la configuración ha mejorado en gran medida en los últimos años. Algunas respuestas y comentarios sugirieron guiones como una forma de promover la gestión de la configuración, y los guiones son una buena respuesta para ayudar a lograr resultados reproducibles, pero a menudo los guiones hechos a mano por sí mismos son inconsistentes e incompletos. Una de las formas en que esto ha mejorado es mediante el aprovisionamiento automático. Sistemas como marionetas o chefayuda a especificar componentes y sistemas de software para un usuario o máquina en particular o para un perfil de tarea en particular y proporciona 'recetas' que permiten un enfoque directo para configurar una máquina o entorno completo. Básicamente, toma el concepto de un repositorio de distribución de software y lo extiende y generaliza proporcionando no solo los paquetes de software necesarios para un sistema, sino también los perfiles de configuración específicos de cada paquete para que esté listo para usar de la manera apropiada para su situación.

Vagrant toma esto en una dirección ligeramente diferente y proporciona una forma de girar rápidamente las definiciones de máquinas virtuales, de modo que una VM puede tener su software y hardware virtual aprovisionados automáticamente, y puede resultar una forma conveniente de reproducir una representación particular de un hardware entorno utilizado por el usuario de su software.

Cada sistema (y variaciones) tarda un poco en configurarse, pero tiene un valor claro si considera que la tarea de recargar y reconfigurar es una tarea común.

JustinC
fuente
Por favor, ¿podría ampliar cuál es la estrategia que menciona en su declaración "pero es lo suficientemente distinta que a menudo requiere una estrategia separada"? Iba a usar Vagrant y almacenar una configuración de VM en el repositorio de mi código fuente, y me pregunto en qué punto tendría que tratarse de manera diferente.
CL22
3

Docker sería una buena opción. Puede usar un dockerfile para actuar como un manifiesto para la VM que desea. No necesita almacenar ninguna imagen, descargará la requerida. Además, puede usar sus propias imágenes, por lo que puede crear su propia imagen base y luego agregar los componentes requeridos por el entorno.

El uso de Docker también puede mejorar otras partes de su flujo de trabajo:

  • El entorno creado se puede poner en el mismo CVS que su proyecto, lo que le brinda un entorno versionado (¡limpio!)
  • La ventana acoplable se puede utilizar para aprovisionar el entorno en vivo, reduciendo los dolores de cabeza de lanzar sus proyectos en producción.
  • Si otros comienzan a trabajar con usted, todo lo que necesitan es el dockerfile para cargar esa configuración de entorno enorme.

Entonces, las ideas aquí sobre el uso de una VM son solo parcialmente correctas, sé que los discos duros son cada vez más grandes, pero no es una razón para usar todo el espacio que tiene. Además, cuando un entorno VM necesita más espacio en el disco duro internamente, esto puede ser un poco complicado y es probable que deba reconstruir uno. Aunque el tamaño del archivo puede no ser un problema, la velocidad de Internet se convierte en el cuello de botella cuando necesita enviar más de 5Go en una conexión DSL normal.

Salketer
fuente
2

La mayoría de los sistemas (idiomas, tiempos de ejecución o sistemas operativos) tienen alguna forma estandarizada de instalar software y configuraciones, por lo tanto, intente usarlos. Como:

  • Maven o Gradle para Java
  • CPAN para Perl
  • rpm para RedHat / Fedora
  • dpkg / apt-get para Linux
  • Paquetes MSI para Windows

Luego, haga las instrucciones de instalación que expliquen exactamente qué debe instalarse / qué pasos son necesarios:

  • Proporcione instrucciones breves sobre lo que supone que está instalado (sistema operativo base, tiempo de ejecución base como Java / Perl / Python ...)
  • Escriba una secuencia de comandos corta que realice las instalaciones requeridas (idealmente solo una invocación de una herramienta como Maven)
  • Pruebe esto en una instalación nueva (como en una VM)

Entonces deberías poder recrear el entorno y otros también deberían poder hacerlo (lo que puede ser importante si no es un proyecto en solitario).

Es posible que deba almacenar los paquetes de instalación necesarios en algún lugar, o simplemente puede incluir instrucciones de descarga (a menos que el sistema realice un seguimiento de ellas, como apt-get o Maven). Eso depende de cuánto confíe en los proveedores de los paquetes; probablemente no sea necesario almacenar los paquetes principales de Debian, pero con algún pequeño proyecto de software libre, podría ser una buena idea.

La solución VM también funcionará, y probablemente sea menos trabajo a corto plazo (solo conserve la VM). Sin embargo, creo que esta solución ofrece más flexibilidad, por ejemplo, al cambiar el entorno.

sleske
fuente