Wikipedia ofrece muy buenos resúmenes de la mayoría de estos términos. Aquí está mi opinión sobre ellos:
La automatización de compilación es la automatización de cómo se construye el software en lugar de invocar manualmente el compilador. Esto se lograría mediante herramientas como, por ejemplo, Make o Ant .
La automatización de implementación consiste en tomar su software integrado y desplegarlo o instalarlo en un sistema de prueba o producción.
La integración continua significa que un proceso automatizado construya su software continuamente a medida que los desarrolladores registran el código y ejecutan pruebas unitarias para garantizar que el código aún funcione. Por ejemplo, cada 15 a 30 minutos un servidor puede reactivarse, escanear VCS para ver si hay nuevos registros, luego actualizar y construir el proyecto si se realizaron cambios. Además de realizar pasos de compilación, esta también es una gran oportunidad para ejecutar pruebas unitarias automatizadas y controles de calidad de código .
La entrega continua es una combinación de todos los conceptos anteriores donde las compilaciones de software también se implementan en un sistema de prueba, opcionalmente con las pruebas realizadas y los informes generados.
Como mínimo, debe tener automatización de compilación, es decir, un script de compilación de algún tipo. Eso le permite hacer clic en un botón o emitir un comando para construir su proyecto. El beneficio de esto es que reduce los errores de ejecutar pasos manualmente. Los entornos de compilación complejos pueden involucrar la generación de código (piense en DAO desde configuraciones, código de interfaz como JAXB ), compilar código, empaquetarlo, personalizar metadatos, etc. Con muchas cosas para hacer, necesita una lista de verificación: ¿por qué no hacer que la lista de verificación sea su script de compilación y utiliza una herramienta para ejecutarlo? Reduce los errores y proporciona consistencia.
El siguiente es CI: es realmente bueno tenerlo, pero no es estrictamente necesario. Ayuda a identificar problemas de construcción temprano. Si tiene varios desarrolladores registrando el código durante todo el día y tal vez no sincronizando sus propios espacios de trabajo constantemente, existe el riesgo de que sus cambios interfieran entre sí. Me refiero específicamente a errores de código estático, no a conflictos de control de versiones. Un servidor de compilación de CI mitigará este riesgo.
Finalmente tenemos los pasos de implementación. La idea aquí es ahorrar tiempo y reducir el error de la implementación manual del software. Al igual que la automatización de compilación, hay cientos de formas de arruinar una implementación de software. Personalmente, me he quedado hasta tarde en la oficina para solucionar problemas de implementación manual en muchas ocasiones cuando necesitamos un sistema que funcione para los clientes que vienen al sitio mañana. La automatización de múltiples sistemas presenta más riesgos: en lugar de que un sistema se bloquee o tenga errores extraños, ahora tenemos múltiplessistemas que pueden salir mal. Sin embargo, ese riesgo es mucho más bajo que alguien que pierde un paso en una lista de verificación o emite un comando incorrecto y arruina un despliegue. Si tiene suerte, simplemente puede restaurar una copia de seguridad de la base de datos y comenzar de nuevo, si tiene mala suerte, un error puede hacer que el sistema funcione incorrectamente. ¿Es un defecto de software? ¿El técnico no configuró una configuración correctamente? Esto lleva tiempo para diagnosticar, tiempo que quizás no tenga y tiempo que no necesita gastar si automatiza el proceso.