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 .
fuente
Respuestas:
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.
fuente
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.
fuente
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.
fuente
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:
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.
fuente
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:
Luego, haga las instrucciones de instalación que expliquen exactamente qué debe instalarse / qué pasos son necesarios:
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.
fuente