¿Qué es una canalización de CI/CD?
¿Qué es una canalización de CI/CD?
Las empresas se ven presionadas para hacer frente a las actualizaciones de software, las correcciones de errores y las nuevas innovaciones en un mercado de aplicaciones cada vez más competitivo. Los equipos de software y operaciones deben trabajar de manera coherente para abordar los comentarios de los usuarios, resolver problemas e implementar actualizaciones sin comprometer las operaciones comerciales. Los ciclos de desarrollo de software convencionales, en particular los basados en el modelo de cascada secuencial, tienen dificultades para mantenerse al día con el ritmo de la entrega de software moderno. A medida que el ciclo de vida del desarrollo de software se hace más compacto, los equipos de desarrollo recurren a la CI/CD para crear código preciso, de alta calidad y más seguro de manera eficiente.
CI/CD son las siglas de integración continua y entrega continua. En algunos casos, el CD también puede significar una implementación continua.
- La integración continua permite a varios desarrolladores trabajar en su código y combinarlo simultáneamente sin comprometer la estabilidad del código.
- La entrega continua es un flujo de trabajo automatizado para probar, validar y preparar el software para su lanzamiento con la aprobación humana.
- La implementación continua es similar a la entrega continua, excepto que la aprobación se automatiza mediante reglas preconfiguradas.
En conjunto, la CI/CD se puede implementar como una canalización que automatiza todos los procesos que antes se realizaban de forma manual. Para comprender mejor cómo funciona la canalización de CI/CD, consulte el siguiente diagrama.
Cada etapa del proceso de CI/CD comprende actividades específicas dentro del proceso de desarrollo de software. Incluyen pruebas automatizadas para examinar el código en busca de calidad, vulnerabilidades y otros problemas técnicos antes de que las compilaciones de software se propaguen. De esta manera, los equipos de desarrollo pueden identificar y corregir los problemas de código antes, lo que ahorra a las empresas una cantidad considerable de tiempo, recursos y costos.
La configuración de una canalización de CI/CD parece sencilla. Sin embargo, las empresas suelen enfrentarse a desafíos a la hora de implementar el flujo de trabajo de CI/CD, especialmente con una configuración local. Por ejemplo, las empresas experimentan cuellos de botella en la infraestructura cuando necesitan administrar una mayor cantidad de aplicaciones, herramientas y miembros del equipo. Si no se aborda, los desarrolladores dedican más tiempo a arreglar la canalización en lugar de trabajar en el código en sí.
Trasladar los flujos de trabajo de CI/CD a la nube de AWS permite a los equipos escalar las cargas de trabajo de desarrollo de software modernas, comunicar los cambios de manera más eficaz y administrar los recursos de manera más eficiente. Por ejemplo, Duolingo migró su proceso de CI/CD a AWS EC2 Mac e implementó estrategias avanzadas de escalado automático. Como resultado, redujeron el tiempo de construcción de 50 minutos a solo 16 minutos.
¿Cómo se puede establecer una canalización de CI/CD?
AWS hace que la implementación de la CI/CD sea más sencilla, automatizada y segura con servicios gestionados y automatizados. En lugar de aprovisionar manualmente las herramientas de desarrollo, los servidores y los recursos, su equipo puede centrarse en actividades de alto valor, como responder a las solicitudes de los usuarios y elaborar estrategias para el proceso de lanzamiento del software.
Para empezar, puede usar AWS CloudFormation para implementar automáticamente los recursos en la nube, que los equipos de DevOps necesitan para configurar una canalización de CI/CD. Empiece por describir los recursos que necesita en la plantilla o por usar plantillas prediseñadas. Luego, CloudFormation aprovisiona los recursos que, en conjunto, forman el entorno fundamental que admite la CI/CD. A continuación, puede implementar las etapas de canalización de CI/CD en la nube de AWS de la siguiente manera.
Fuente
La fase de fuente hace un seguimiento de los cambios de versión que realizan los desarrolladores. Los desarrolladores copian una versión del código original del repositorio central compartido a su máquina local. A continuación, editan, compilan, prueban y combinan el código modificado con el repositorio.
A continuación, le explicamos cómo su equipo puede realizar y gestionar los cambios de código con las herramientas de AWS.
Paso 1: Crear códigos con IDE
Un desarrollador puede crear código nuevo o editar el código existente con AWS Cloud9, un entorno de desarrollo integrado (IDE) basado en la nube que admite los lenguajes de programación más populares. Con Cloud9, puede escribir, ejecutar y depurar el código fuente en un navegador web siempre que tenga acceso a Internet. Como alternativa, si instala un IDE de terceros, puede descargar kits de desarrollo de software (SDK) para permitir la escritura de código en varios lenguajes, incluidos Java, Python y JavaScript. Los SDK le permiten acceder a los recursos y bibliotecas de AWS a través de la interfaz de programación de aplicaciones (API) desde su entorno de codificación preferido.
Paso 2: Enviar código al repositorio central
Los desarrolladores utilizan herramientas de terceros, como GitHub, para crear repositorios de código privado, gestionar solicitudes de cambios y combinar cambios. Actúa como un sistema de control de versiones, que le permite realizar un seguimiento de los cambios que otros desarrolladores han realizado y volver a un código fuente funcional anterior si es necesario.
Creación y pruebas
En la fase de compilación, el código almacenado en el repositorio central se envía a un servidor de compilación. Luego, el servidor de compilación convierte el código fuente y las dependencias en un archivo de software denominado artefacto, que los desarrolladores pueden ejecutar en etapas posteriores. Por ejemplo, si está creando un programa Java, obtendrá un archivo JAR o WAR. En esta etapa se pueden realizar varias pruebas preliminares, incluido el análisis de código unitario y estático.
- Las pruebas unitarias garantizan que las funciones individuales del software produzcan los resultados correctos.
- El análisis de código estático comprueba el código fuente para identificar errores, vulnerabilidades de seguridad y el cumplimiento de los estándares de codificación.
Si el código no pasa ninguna prueba, los desarrolladores lo revierten al estado anterior y resuelven los problemas.
Convencionalmente, los equipos de software necesitan configurar sus propios servidores de compilación para empaquetar sus aplicaciones. Además, deberán escribir manualmente los guiones de prueba, validarlos y supervisar los resultados mediante iteraciones repetidas. Ahora pueden usar AWS CodeBuild para acelerar el flujo de trabajo de creación de CI/CD. Permite a su equipo automatizar las compilaciones y probar el software a medida que realizan cambios. Localiza el código fuente del repositorio especificado y ejecuta el script de compilación que configuraste.
AWS CodeBuild escala automáticamente su capacidad informática para adaptarse a sus cargas de trabajo de compilación. De esta forma, no tiene que esperar a que se completen las compilaciones anteriores para comenzar una nueva. Los equipos de software pueden identificar los problemas de código desde el principio y resolverlos antes de que se vuelvan complejos.
Por ejemplo, si está creando un proyecto de Node.js, puede integrar el marco de pruebas de Jasmine o Jest con AWS CodeBuild. Estos marcos le permiten escribir fácilmente casos de prueba, especificar los resultados esperados y validarlos durante las ejecuciones de compilación.
La fase de prueba se produce inmediatamente después de la construcción. Está diseñado para someter la aplicación a pruebas más rigurosas, lo que permite a los equipos de software mejorar la calidad del código, el rendimiento, la seguridad y otros aspectos clave. Con una canalización de CI/CD, las pruebas se automatizan y se extienden a varias áreas.
- Las pruebas de integración garantizan que todos los servicios y componentes de terceros que utiliza la aplicación interactúen correctamente entre sí.
- Las pruebas funcionales proporcionan una evaluación integral de la aplicación desde la perspectiva del usuario final.
- Las pruebas de seguridad examinan la aplicación para detectar posibles riesgos y vulnerabilidades de seguridad.
- Las pruebas de rendimiento garantizan que la aplicación siga siendo responsiva y funcional en caso de condiciones extremas o inesperadas, como un aumento repentino del tráfico.
Una vez más, la aplicación debe pasar todas las pruebas especificadas antes de pasar a la siguiente etapa.
Preproducción
La preproducción permite realizar las comprobaciones finales de la aplicación antes de ponerla a disposición de los usuarios finales. En esta etapa, los equipos de software implementan la aplicación en un entorno que imita las implementaciones del mundo real. Con frecuencia, utilizan datos simulados e inscriben a un grupo de usuarios finales para probar la aplicación con el objetivo de detectar problemas no detectados antes del lanzamiento.
Por ejemplo, ha actualizado una aplicación y quiere comprobar cómo se comporta con las interacciones de los usuarios. Su implementación en el entorno de ensayo le ayuda a evaluar el rendimiento del software sin interrumpir las operaciones empresariales. Tras cumplir todas las condiciones de prueba, los equipos de software implementan la aplicación en el entorno de producción, lo que la hace accesible a los usuarios finales.
La implementación entre entornos puede ser un desafío, especialmente si los equipos lo hacen manualmente. AWS CodeDeploy puede simplificar los esfuerzos de implementación de aplicaciones. Automatiza la implementación de aplicaciones en varios entornos. Puede ver las actividades de implementación, realizar un seguimiento de los cambios y volver a una versión anterior si es necesario. También cierra la brecha entre la preproducción y la producción. Por ejemplo, puede usar las instrucciones de despliegue exactas que usa para preparar una versión de producción.
Producción
La producción es el entorno en vivo en el que los usuarios reales acceden a su aplicación. Tras modificar, probar y validar los cambios, los equipos de software lanzan la aplicación actualizada en el entorno de producción. Si bien la medida marca el final del proceso de CI/CD, continúan los esfuerzos para garantizar que la aplicación cumpla con los requisitos empresariales, de seguridad y de rendimiento. Por lo tanto, tendrá que supervisar continuamente la aplicación mientras funciona en producción.
Amazon CloudWatch es un servicio que proporciona a los equipos de desarrollo y operaciones visibilidad sobre las aplicaciones que implementan en AWS, en las instalaciones u otros entornos de nube. Recopila y visualiza automáticamente los datos operativos, lo que le permite comprender mejor el rendimiento de su aplicación en condiciones reales. Además, puede configurar alertas y recibir notificaciones de los eventos que requieren la atención inmediata de sus equipos.
¿Cómo se puede automatizar una canalización de CI/CD?
La optimización de las herramientas de CI/CD de diferentes proveedores puede ser un desafío, especialmente si implica configuraciones manuales extensas. Sin embargo, con AWS CodePipeline, puede automatizar, escalar y acelerar todo el proceso de publicación del código sin perder la flexibilidad.
AWS CodePipeline le permite modelar un flujo de trabajo de CI/CD con una interfaz gráfica de usuario. Puede integrar fácilmente los servicios de AWS en su cartera o conectarse a las herramientas y los recursos existentes que utiliza. Por ejemplo, si quiere usar Jenkins como servidor de compilación, puede integrarlo con AWS CodePipeline.
A continuación, resumimos los pasos para hacerlo.
- Instale Jenkins y el complemento AWS CodePipeline para Jenkins.
- A continuación, defina el permiso de acceso con AWS Identity and Access Management (IAM) para Jenkins. Esto permite a Jenkins usar credenciales autorizadas para interactuar con AWS CodePipeline.
- Inicie sesión en la consola de AWS CodePipeline y cree una canalización personalizada.
- Conecte la canalización a un repositorio de código fuente compartido, como GitHub.
- Luego, agregue una etapa de compilación y seleccione Jenkins como servidor de compilación.
- Agregue las etapas de prueba necesarias, incluidas las acciones de prueba requeridas y los activadores de compilación.
- A continuación, conecte la fase de implementación a AWS CodeDeploy u otro servicio de implementación.
¿Cómo puede AWS cumplir con sus necesidades de canalización de CI/CD?
Una canalización de CI/CD permite a las empresas producir, probar y publicar actualizaciones de aplicaciones con mayor rapidez sin comprometer la calidad y la seguridad del software. Los equipos de desarrollo de software modifican el código, combinan los cambios, automatizan las pruebas, programan la implementación y mucho más con herramientas de CI/CD automatizadas. Sin embargo, algunos equipos se enfrentan a desafíos para escalar los flujos de trabajo de CI/CD debido a las limitaciones de infraestructura, recursos y procesos.
AWS ofrece un conjunto de soluciones basadas en la nube para crear, optimizar y escalar su canalización de CI/CD.
- AWS CloudFormation aprovisiona los recursos en los que se ejecutan las herramientas de CI/CD.
- AWS Cloud9 permite a los desarrolladores escribir, ejecutar y depurar código desde su navegador.
- AWS CodeBuild le permite compilar, probar y empaquetar su aplicación sin tener que administrar sus propios servidores de compilación.
- AWS CodeDeploy automatiza la implementación en cualquier entorno, incluidas las instancias locales y de AWS.
- AWS CodePipeline le permite modelar todo el flujo de trabajo de CI/CD, desde el entorno de origen hasta el entorno de producción en vivo.
- AWS CloudWatch permite a los equipos operativos supervisar, registrar y analizar de forma continua las aplicaciones implementadas.
Si necesita más ayuda para configurar una canalización de CI/CD, póngase en contacto con Amazon Professional Services.