Introducción a CI/CD
Tiempo estimado de finalización: 1 hora
La Integración Continua y Entrega Continua (CI/CD) puede imaginarse como un pipeline (tubería), donde el código nuevo se ingresa por un extremo, se prueba a través de una serie de etapas (fuente, construcción, prueba, staging y producción) y luego se publica como código listo para producción.

Descripción general del pipeline de CI/CD
Cada etapa del pipeline de CI/CD se estructura como una unidad lógica en el proceso de entrega. Cada etapa actúa como una compuerta (gate) que veta un cierto aspecto del código. A medida que el código progresa a través del pipeline, se asume que la calidad del código es mayor en las etapas posteriores, porque se continúan verificando más aspectos del mismo. Los problemas descubiertos en una etapa temprana impiden que el código siga avanzando. Los resultados de las pruebas se envían inmediatamente al equipo, y todas las construcciones y lanzamientos posteriores se detienen si el software no supera la etapa.
AWS ofrece un conjunto completo de herramientas para desarrolladores de CI/CD para acelerar el desarrollo de software y los ciclos de lanzamiento. AWS CodePipeline automatiza las fases de construcción, prueba y despliegue del proceso de lanzamiento cada vez que hay un cambio en el código, basándose en el modelo de lanzamiento definido. Esto permite la entrega rápida y confiable de características y actualizaciones.
AWS CodePipeline puede abordar una variedad de casos de uso de desarrollo y operaciones, incluyendo:
- Compilar, construir y probar código con AWS CodeBuild.
- Entrega continua de aplicaciones basadas en contenedores a la nube.
- Validación previa al despliegue de artefactos (como descriptores e imágenes de contenedor) requeridos para servicios de red o funciones de red nativas de la nube específicas.
- Pruebas funcionales, de integración y de rendimiento, incluyendo pruebas de línea base y regresión.
- Pruebas de confiabilidad y recuperación ante desastres (DR).
AWS CodePipeline puede integrarse con otros servicios. Estos pueden ser servicios de AWS como Amazon Simple Storage Service (Amazon S3), o productos de terceros como GitHub, Docker BuildKit, Docker Scout y Docker Hub.

Componentes del pipeline de CI/CD de AWS
AWS puede configurar pipelines de CI/CD utilizando las siguientes herramientas para desarrolladores:
- AWS CodeConnections (para usar repositorios de GitHub).
- AWS CodeBuild.
- AWS CodePipeline.
- AWS CodeDeploy.
- Amazon Elastic Container Registry (ECR).
- Docker Build Cloud.
- Docker Scout.
- Docker TestContainers.
- Docker Hub.
La creación de pipelines de CI/CD utilizando estos servicios se puede automatizar usando AWS CDK y AWS CloudFormation.
Integración Continua
La Integración Continua (CI) es una práctica de desarrollo de software de DevOps en la que los desarrolladores integran regularmente sus cambios de código en un repositorio central, tras lo cual se ejecutan construcciones y pruebas automatizadas. La Integración Continua se refiere más a menudo a la etapa de construcción o integración del proceso de lanzamiento de software y conlleva tanto un componente de automatización (por ejemplo, un servicio de CI o construcción) como un componente cultural (por ejemplo, aprender a integrar con frecuencia). Los objetivos clave de la Integración Continua son encontrar y abordar errores más rápido, mejorar la calidad del software y reducir el tiempo que lleva validar y lanzar nuevas actualizaciones de software.
¿Por qué es necesaria la Integración Continua?
En el pasado, los desarrolladores de un equipo podían trabajar de forma aislada durante un largo período de tiempo y solo integraban sus cambios a la rama principal una vez que su trabajo estaba completo. Esto hacía que la integración de los cambios de código fuera difícil y lenta, y también resultaba en la acumulación de errores durante mucho tiempo sin corrección. Estos factores hacían que fuera más difícil entregar actualizaciones a los clientes rápidamente.
¿Cómo funciona la Integración Continua?
Con la Integración Continua, los desarrolladores realizan commits frecuentemente en un repositorio compartido utilizando un sistema de control de versiones como Git. Antes de cada commit, los desarrolladores pueden elegir ejecutar pruebas unitarias locales en su código como una capa de verificación adicional antes de integrar. Un servicio de Integración Continua construye y ejecuta automáticamente pruebas unitarias sobre los nuevos cambios de código para detectar inmediatamente cualquier error.

La Integración Continua se refiere a las etapas de construcción y pruebas unitarias del proceso de lanzamiento de software. Cada revisión que se envía dispara una construcción y prueba automatizada. Con la entrega continua, los cambios de código se construyen, prueban y preparan automáticamente para un lanzamiento a producción. La entrega continua expande la Integración Continua al desplegar todos los cambios de código a un entorno de pruebas y/o entorno de producción después de la etapa de construcción.
Explicación de la Entrega Continua
La Entrega Continua (CD) es una práctica de desarrollo de software en la que los cambios de código se preparan automáticamente para un lanzamiento a producción. Un pilar del desarrollo de aplicaciones modernas, la entrega continua expande la integración continua al desplegar todos los cambios de código a un entorno de pruebas y/o entorno de producción después de la etapa de construcción. Cuando se implementa correctamente, los desarrolladores siempre tendrán un artefacto de construcción listo para el despliegue que ha pasado por un proceso de prueba estandarizado.
La Entrega Continua permite a los desarrolladores automatizar las pruebas más allá de las pruebas unitarias para que puedan verificar las actualizaciones de las aplicaciones en múltiples dimensiones antes de desplegarlas a los clientes. Estas pruebas pueden incluir pruebas de UI, pruebas de carga, pruebas de integración, pruebas de confiabilidad de API, etc. Esto ayuda a los desarrolladores a validar más a fondo las actualizaciones y descubrir problemas de manera preventiva. Con la nube, es fácil y rentable automatizar la creación y replicación de múltiples entornos para pruebas, lo cual era anteriormente difícil de hacer en entornos locales (on-premises).
Entrega Continua vs. Despliegue Continuo
Con la Entrega Continua, cada cambio de código se construye, se prueba y luego se envía a un entorno de pruebas o staging que no es de producción. Puede haber múltiples etapas de prueba paralelas antes de un despliegue a producción. La diferencia entre la Entrega Continua y el Despliegue Continuo es la presencia de una aprobación manual para actualizar a producción. Con el Despliegue Continuo, el paso a producción ocurre automáticamente sin una aprobación explícita.

El Despliegue Continuo automatiza todo el proceso de lanzamiento de software. Cada revisión que se envía dispara un flujo automatizado que construye, prueba y luego prepara la actualización. La decisión final de desplegar a un entorno de producción en vivo es activada por el desarrollador.
