Estoy tratando de agregar integración continua a un proyecto.
Según Wikipedia , una pieza importante de CI son las compilaciones automatizadas. Sin embargo, estoy confundido sobre qué significa exactamente eso, ya que los artículos de automatización de CI y compilación parecen estar en desacuerdo.
Puntos específicos de confusión: qué significa "compilación automatizada" en el contexto de:
- Un proyecto que utiliza un lenguaje interpretado, como Python o Perl?
- construyendo desde la fuente en la máquina de un usuario final?
- ¿Una aplicación que tiene dependencias que no se pueden simplemente precompilar y distribuir, como una base de datos en un RDBMS local para la máquina del usuario?
builds
ybuild
porque no sabía cuál usar.Respuestas:
Tiene razón al señalar que, para algunas tecnologías, no es necesario un paso de compilación. Sin embargo, le recomiendo que tenga una visión más amplia al interpretar el término "automatización de compilación". Piense que "compilar" incluye los siguientes dos componentes principales:
La automatización, entonces, simplemente se refiere a hacer que cualquiera de esas operaciones, si no todas, sea automática (es decir, que no requiere intervención manual). Esto puede incluir una gran variedad de pasos, dependiendo de su tecnología:
Pasos de transformación:
Pasos de garantía de calidad:
En estos días, las buenas herramientas de CI le permitirán abordar todas estas inquietudes. Inicialmente, la mayoría de las tiendas están interesadas en automatizar la compilación de su código, ya que esa es la primera y más visible fuente de problemas en el desarrollo de software convencional.
fuente
Una compilación automatizada es una descripción de un proceso que debe cubrir los siguientes conceptos básicos:
5.1 Recopilación exitosa, prueba de unidad exitosa
Es un proceso de no intervención que debe ejecutarse sin intervención manual.
fuente
En mi opinión, una compilación automatizada es algo que
El objetivo es tener un proceso de implementación que se pueda repetir, leer: probar, para que cuando se implemente en producción, tenga un cierto grado de certeza de que las cosas no saldrán mal. Cuanta menos interacción humana en los procesos de compilación e implementación, más segura será su versión.
Si tiene un lenguaje no compilado, aún puede construir un sitio y comprimirlo para crear un solo artefacto.
Una buena herramienta de CI le permitirá ejecutar muchas tareas en el proceso de compilación, incluida la ejecución de pruebas unitarias. También mantendrá registros de sus compilaciones exitosas y no exitosas, cobertura de prueba, etc. Pero nada de eso es parte de lo que yo definiría como una compilación automatizada. (es decir, un buen proceso de compilación automatizado tiene estas cosas, pero uno pobre no deja de llamarse "compilación automatizada" porque carece de esas cosas).
Sugeriría que las pruebas de integración / regresión se ejecuten como parte del proceso de implementación, en lugar del proceso de compilación (aunque, si tiene un entorno conveniente, puede implementar con cada compilación).
fuente
En el caso de los idiomas interpretados, las cosas pueden ser impredecibles. Algunos idiomas interpenetrados tienen compiladores, pero la mayoría de las veces no es necesario usarlos. En ese caso, generalmente solo escanearía el código en busca de errores de sintaxis y análisis en lugar de compilación o pasaría directamente a ejecutar las pruebas en el código.
Para mí, esto significaría que puede proporcionar un solo comando que los usuarios finales pueden ejecutar para obtener la última versión del programa, compilarlo, configurarlo e implementarlo según sea necesario.
Estos se incluirían en la parte de prueba de la integración continua, ya que puede destruir y reconstruir automáticamente las bases de datos para garantizar que las secuencias de comandos sean correctas y que el programa las pruebe correctamente.
fuente
Lo que está discutiendo en su pregunta son en realidad 3 conceptos diferentes:
La integración continua en su núcleo está haciendo pequeños cambios y sincronizando con frecuencia esos cambios con la "verdad global". En lugar de hacer un pago y retenerlo durante una semana, un desarrollador debe trabajar en tareas que se pueden completar en un día para que su código nunca esté demasiado sincronizado con el repositorio principal.
Para lograr esto sin causarle dolor a su equipo (es decir, verificar la fuente que no construye o rompe la funcionalidad existente). El desarrollador tiene que verificar que su código no "rompa la compilación". Si se hace de forma manual, esto agrega una sobrecarga adicional al proceso de desarrollo (piense en un proyecto que demore mucho tiempo en crearse y / o tenga muchas interdependencias en las que un cambio en una línea de código puede afectar la aplicación de maneras inesperadas).
Para mitigar esta situación, utilizamos otras técnicas para eliminar esta sobrecarga.
Utilizamos compilaciones automatizadas para verificar el origen y compilarlo, opcionalmente, ejecutando pruebas automatizadas que verifican que la aplicación funcione como debería (este paso es tan útil como el conjunto de pruebas).
Un paso más en la entrega continua aborda su problema con la base de datos y otras inquietudes. La idea aquí es proporcionar cierto nivel de versiones para la base de datos y otros factores del entorno para que podamos confirmar lo más rápido posible que la aplicación funciona en un entorno lo más cercano posible a la producción .
fuente
"Compilación automatizada" significa que puede pasar del control de origen a un paquete que se puede enviar con una acción (programable) (generalmente un script de shell o un archivo por lotes).
Lo que constituye exactamente una compilación, en este contexto, depende mucho de qué es exactamente lo que está enviando, cómo se entrega y qué pasos son necesarios para las diversas partes de su pila de desarrollo, pero en cualquier caso, comienza con qué hay en el control de origen, y terminas con un producto que se puede enviar (o un mensaje de error y un gerente de proyecto enojado).
Para un proyecto simple de Python, una compilación automatizada puede consistir en solo dos pasos: verificar las fuentes y copiar los archivos relevantes en los directorios correctos. Para proyectos más complejos, puede involucrar cosas como:
fuente