¿Qué significa "compilación automatizada"?

14

Estoy tratando de agregar integración continua a un proyecto.

Según en Wikipedia , una pieza importante de CI es la creación automática. Sin embargo, estoy confundido acerca de lo que eso significa exactamente, ya que los artículos de CI y automatización de compilación parecen no estar de acuerdo.

Puntos específicos de confusión: lo que significa "compilación automatizada" significa en el contexto de:

  • un proyecto que usa 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 precompilar y distribuir simplemente, como una base de datos en un RDBMS local a la máquina del usuario?
pregunta 13.12.2011 - 18:46

6 respuestas

14

Tiene razón al señalar que, para algunas tecnologías, un paso de compilación no es necesario. Sin embargo, le recomiendo que tome una visión más amplia al interpretar el término "automatización de compilación". Piense en la "compilación" que incluye los siguientes dos componentes principales:

  • El proceso para los artefactos de origen de transformación (código, esquema de base de datos, documentación, etc.) implementado para un usuario final.
  • La aplicación de medidas de garantía de calidad durante dicha transformación

La automatización, entonces, simplemente se refiere a realizar cualquiera de estas operaciones, si no todas, de manera 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:

  • compilación
  • enlace
  • embalaje
  • Implementación
  • Migración de datos
  • Copia de seguridad
  • Notificación

Pasos de control de calidad:

  • Advertencias / errores del compilador
  • Pruebas unitarias
  • Pruebas de integración
  • Pruebas del sistema
  • autenticación de implementación

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 es la primera y más visible fuente de problemas en el desarrollo de software convencional.

    
respondido por el Stephen Gross 13.12.2011 - 19:14
21

Una compilación automatizada es una descripción de un proceso que debe cubrir los siguientes conceptos básicos:

  1. Obtenga el código más reciente de Source Control
  2. Compile el último código en el ejecutable
  3. Ejecutar pruebas (pruebas unitarias, pruebas del sistema, pruebas de integración) contra el código compilado
  4. Implementar ejecutable completado en una ubicación conocida para la implementación.
  5. Publicar los resultados de la compilación.
    5.1 Compilación exitosa, éxito de la prueba unitaria

Es un proceso de no intervención que debe ejecutarse con cero intervención manual.

    
respondido por el Sheldon Warkentin 13.12.2011 - 18:58
2

En mi opinión, una compilación automatizada es algo que

  • sucede automáticamente, ya sea en un horario o con cada confirmación de control de fuente
  • crea un conjunto de artefactos que se pueden implementar simplemente en cualquier servidor

El objetivo es tener un proceso de implementación que se pueda repetir, leer, probar, de modo que para el momento en que se implementa en la producción, tenga un grado bastante seguro de que las cosas no saldrán mal. Cuanto menor sea la interacción humana en los procesos de compilación e implementación, más seguro será su lanzamiento.

Si tiene un lenguaje no compilado, aún puede crear un sitio y comprimirlo para crear un único artefacto.

Una buena herramienta de CI le permitirá escribir 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 definiría como una compilación automatizada. (Es decir, un buen proceso de compilación automatizado tiene estas cosas, pero a uno pobre no se le llama "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 implementarlo con cada compilación).

    
respondido por el pdr 13.12.2011 - 18:57
1
a project using an interpreted language, such as Python or Perl?

En el caso de los idiomas interpretados, las cosas pueden ser impredecibles. Algunos lenguajes interpenetrados tienen compiladores, pero la mayoría de las veces es probable que no sea necesario utilizarlos. En ese caso, generalmente solo escaneo el código en busca de sintaxis y errores de análisis en lugar de compilación o me dirijo directamente a ejecutar las pruebas en el código.

  

¿construyendo desde la fuente en la máquina de un usuario final?

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.

  

una aplicación que tiene dependencias que no pueden ser precompiladas simplemente y   distribuido, como una base de datos en un RDBMS local para   la máquina del usuario?

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 asegurarse de que los scripts sean correctos y que el programa se pruebe correctamente.

    
respondido por el rjzii 13.12.2011 - 19:12
1

Lo que estás discutiendo en tu pregunta son en realidad 3 conceptos diferentes:

Integración continua en su núcleo es hacer pequeños cambios y sincronizarlos frecuentemente con la "verdad global". En lugar de realizar un pago y retenerlo durante una semana, un desarrollador debe trabajar en las tareas que se pueden completar en un día para que su código nunca esté fuera de sincronía con el repositorio principal.

Para lograr esto sin causarle dolor a su equipo (es decir, verificar la fuente que no genera o rompe la funcionalidad existente). El desarrollador tiene que verificar que su código no "rompa la compilación". Si se hace manualmente, esto agrega una sobrecarga adicional al proceso de desarrollo (piense en un proyecto que demora mucho tiempo en construirse y / o tiene muchas interdependencias donde un cambio en una línea de código puede afectar la aplicación de manera inesperada).

Para mitigar esta situación, usamos otras técnicas para eliminar esta sobrecarga.

Usamos compilaciones automatizadas para verificar la fuente y compilarla opcionalmente ejecutando pruebas automatizadas que verifican que la aplicación funciona como debería (este paso es tan útil como la prueba suite).

Otro paso entrega continua resuelve su problema con la base de datos y otras inquietudes. La idea aquí es proporcionar un cierto nivel de control 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 cerca posible de la producción .

    
respondido por el Michael Brown 13.12.2011 - 19:50
0

"Compilación automatizada" significa que puede pasar del control de origen a un paquete enviable con una acción (programable) (normalmente 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 distintas partes de su pila de desarrollo, pero en cualquier caso empiezas con lo que está en el control de código fuente y terminas con un producto que se puede enviar (o un mensaje de error y un administrador de proyectos enojado).

Para un proyecto Python simple, una compilación automatizada puede consistir en solo dos pasos: revisar las fuentes y copiar los archivos relevantes en los directorios correctos. Para proyectos más complejos, podría involucrar cosas como:

  • compilar, enlazar
  • ejecutando pruebas automatizadas
  • creando paquetes de instalación
  • instalando
  • modificar la (s) base (s) de datos
  • crear copias de seguridad (en caso de que necesite revertir)
respondido por el tdammers 13.12.2011 - 21:28

Lea otras preguntas en las etiquetas

Comentarios Recientes

Subir de nivel implica escribir código automáticamente, ya sea en un proyecto de JavaScript o tratando de mejorar uno existente. Aquí hay un desglose: WritingBranchesCommitsCompilation para compilaciones automatizadas: en C ++, tanto durante la configuración como después de la integración, todos los archivos para una copia de trabajo se reemplazan y copian en un punto de expansión especificado en.geom. Para Mac OS X, este es el tiempo de compilación : git login --login-pass = binario -svf-to-http:... Lee mas