Integración continua y entrega continua - AWS Guía prescriptiva

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Integración continua y entrega continua

Desarrolle y mejore las aplicaciones y los servicios con mayor rapidez que las organizaciones que utilizan los procesos tradicionales de desarrollo de software y administración de infraestructuras.

La adopción de prácticas de DevOps con integración continua y entrega continua (CI/CD) promueve un proceso optimizado, automatizado y eficiente para crear, probar e implementar aplicaciones. La CI/CD permite entregar de forma rápida el software, reduce el riesgo de errores de implementación y garantiza que las aplicaciones estén siempre actualizadas con las últimas características y correcciones de errores. El objetivo principal es desarrollar y mejorar las aplicaciones y los servicios a un ritmo más rápido, así como dejar atrás el uso de los procesos tradicionales de desarrollo de software y administración de infraestructuras.

Iniciar

Adoptar la administración de componentes de software

La administración de componentes de software es la práctica de administrar los componentes individuales que se utilizan para crear software, lo que incluye las bibliotecas, los marcos, los repositorios de código fuente, los módulos, los artefactos y las dependencias de terceros. Le recomendamos utilizar un sistema de control de versiones como Git o Apache Subversion para administrar el código fuente, permitir la colaboración y mantener un historial de cambios en el código. Puede supervisar los cambios y los eventos del repositorio para automatizar el proceso, crear las canalizaciones, administrar el código e integrar los flujos de trabajo con otros servicios según sea necesario. 

Crear canalizaciones de CI/CD.

Los procesos de CI/CD son conjuntos de instrucciones automatizadas que se inician con los cambios introducidos en el sistema de control de versiones. Por lo general, incluyen instrucciones para crear la aplicación, ejecutar las pruebas automatizadas e implementar el código en un entorno específico. Puede configurar una canalización de CI/CD automatizada mediante herramientas como AWS CodePipeline, Jenkins, GitLab o CircleCI. También puede configurarlas directamente en los sistemas de control de versiones que admiten la generación de canalizaciones.

Comience con una canalización mínima viable para una integración continua y, luego, pase a una canalización de entrega continua que incluya más acciones y etapas. Trate la configuración de entrega continua como si fuera código. Puede utilizar varias canalizaciones distintas para cada sucursal y equipo, así que piense en las variables de configuración que tiene que configurar y cuál es la mejor manera de brindar soporte a los equipos que utilizarán las canalizaciones.

Considera los plazos de implementación, es decir, los días y las horas en los que quiere implementar el código. Tenga en cuenta las horas de baja demanda del sistema, de modo que, si tiene que hacer una reversión, tendrá el menor impacto en los clientes. Entre otras prácticas recomendadas se incluyen evitar las implementaciones los viernes e implementar un bloqueo del código durante las fechas de mayor actividad o antes de los días festivos. Considere la posibilidad de definir las reglas sobre la implementación del código cuando el autor de la confirmación no se encuentre disponible (por ejemplo, de vacaciones). Tenga en cuenta que se producen errores en las implementaciones y es posible que tenga que recurrir a la ayuda externa. Evalúe los distintos métodos de implementación, como las implementaciones in situ, continuas, inmutables y azules/verdes. Considere la posibilidad de utilizar los servicios totalmente administrados para los flujos de trabajo de entrega continua a fin de aumentar la disponibilidad y la seguridad y, al mismo tiempo, minimizar la complejidad y la administración.

Implementar pruebas automatizadas

Las prácticas modernas recomiendan hacer shift left (acercar las pruebas al desarrollador y al IDE, y en una de las primeras fases del ciclo de vida) para detectar y solucionar los problemas antes de transferirlos a un repositorio e iniciar una canalización. Esta práctica implica un intercambio rápido de información con el desarrollador, ya que los errores se detectan mientras el desarrollador programa. Hacer shift left se traduce en costos más bajos, ya que las pruebas no requieren la ejecución de canalizaciones, lo que puede generar una retroalimentación asincrónica y aumentar los gastos operativos.

Las pruebas automatizadas detectan los errores al principio del proceso del desarrollo. Estas incluyen pruebas unitarias, pruebas de integración y pruebas funcionales. Le recomendamos animar a los desarrolladores a utilizar herramientas para crear pruebas unitarias lo antes posible y a ejecutarlas antes de enviar el código al repositorio central. Además, asegúrese de que los procesos automatizados incluyan el análisis de código estático, la evaluación comparativa del rendimiento y las pruebas de aplicaciones de seguridad.

Crear documentación

Además de implementar una canalización de CI/CD para agilizar los flujos de trabajo de desarrollo, debe mantener una documentación clara y completa para garantizar la eficacia, la capacidad de mantenimiento y la escalabilidad continuas de la canalización. La documentación es un aspecto fundamental de las canalizaciones de CI/CD, ya que permite que los equipos de desarrollo comprendan con claridad el diseño, los componentes y los procesos de la canalización. Al crear la documentación, comience con información general de la canalización, explique las diferencias entre la arquitectura y el diseño, describa las herramientas y tecnologías que se utilizan, especifique la configuración y los ajustes iniciales, describa las medidas de seguridad y el control de acceso, e incluya información sobre la solución de problemas y el mantenimiento.

Utilizar la infraestructura como código

Utilice herramientas como Terraform, Ansible o AWS CloudFormation para administrar la infraestructura y garantizar entornos coherentes y reproducibles. Trate su infraestructura como código, asegúrese de hacer un seguimiento de los cambios en la infraestructura y evite hacer cambios directamente en la consola. Defina toda la infraestructura (lo que incluye el aprovisionamiento de bases de datos) como código e implemente estos cambios mediante canalizaciones. Considere la posibilidad de ejecutar la integración de bases de datos como código en canalizaciones con un pequeño subconjunto de datos de producción desinfectados. Cuando sea posible, haga los cambios y haga un seguimiento de esos cambios en el código.

Al igual que con el código de software, implemente estas prácticas recomendadas para el código de infraestructura:

  • Utilice el control de versiones.

  • Utilice los sistemas de seguimiento de errores y generación de tickets.

  • Haga que entre compañeros se revisen los cambios antes de aplicarlos.

  • Establezca los patrones y los diseños de códigos de infraestructura.

  • Pruebe los cambios en la infraestructura.

Mantenga y siga las métricas estándar

Para mantener un alto nivel de rendimiento, desarrolle métricas clave y haga un seguimiento de estas para comprender el impacto de las canalizaciones en el estado y en el negocio, entre las que se incluyen:

  • Frecuencia de creación. El número de versiones ofrece información sobre la productividad del equipo y la complejidad de los cambios.

  • Frecuencia de implementación. Las implementaciones periódicas indican un proceso de desarrollo ágil y correcto.

  • Tiempo de espera para los cambios. Medir el tiempo medio que tardan los cambios en llegar a la producción puede serle útil para identificar los cuellos de botella en el proceso de implementación.

  • Tiempo medio en la canalización. El tiempo medio desde la fase inicial de la canalización hasta cada fase posterior puede ayudar a optimizar el flujo de trabajo.

  • Volumen de cambios en la producción. Llevar un registro del número de cambios que llegan a la producción puede proporcionar información sobre la estabilidad del entorno de producción.

  • Tiempo de creación. El tiempo promedio de creación puede indicar posibles problemas en el código base o en la infraestructura.

Avanzado

Uso de la administración de la configuración

Las herramientas de administración de la configuración juegan un papel fundamental en la automatización de la implementación, la configuración y la administración del software y de la infraestructura. Proporcionan un enfoque sistemático para administrar los cambios y mantener el estado deseado de la infraestructura, del software y de las configuraciones en varios entornos. Estas herramientas permiten a los desarrolladores definir el estado deseado de un sistema mediante lenguajes declarativos o imperativos. A continuación, la herramienta de administración de la configuración automatiza el proceso de aplicación de estas configuraciones a los sistemas de destino, lo que garantiza la coherencia y la repetibilidad.

Utilice las herramientas de administración de la configuración para automatizar la implementación, la configuración y la administración del software y de la infraestructura. AWS Systems Manager State Manager es un servicio de administración de configuración seguro y escalable que automatiza el proceso de mantener los nodos administrados y otros recursos de AWS en el estado que defina.

Integrar la supervisión y el registro

La integración de las soluciones de supervisión y registro en las canalizaciones de CD ofrece numerosos beneficios para los equipos de desarrollo y para el proceso general de desarrollo de software. Estas soluciones pueden proporcionar información en tiempo real sobre el rendimiento de las aplicaciones, identificar y solucionar los problemas de manera más rápida y promover la mejora continua para garantizar que las aplicaciones sigan siendo fiables, eficaces y escalables durante todo su ciclo de vida. Invertir en soluciones de supervisión y registro es un aspecto clave para mantener una canalización de CD sólida y eficiente. En última instancia, contribuye a la entrega correcta de software de alta calidad.

Cree una cadencia para la combinación

Confirme o combine los cambios de código en la rama principal (troncal o principal) al menos una vez al día o, lo que sería ideal, varias veces al día después de cada tarea. Esta cadencia da lugar a varias invocaciones de canalización diarias. Un modelo de flujo de trabajo ramificado según la extracción coincide con este enfoque. Utilice marcadores de características, lanzamientos ocultos y técnicas similares para personalizar las características que utilizan los clientes. 

Capturar el comportamiento posterior a la implementación

Después de una implementación, capture el comportamiento de la producción mediante pruebas sintéticas automatizadas y sincronice los resultados con la canalización de la entrega continua para garantizar que las medidas correctivas se tomen rápidamente. La prioridad principal para los desarrolladores debe ser corregir los errores detectados en las canalizaciones lo antes posible, registrar los cambios de código en el repositorio de código fuente y verificar la resolución de los errores en la canalización.

Entre las prácticas recomendadas posteriores a la implementación se incluyen observar los indicadores clave de rendimiento (KPI) más importantes y validar que no haya errores en el entorno de producción. Automatice la administración de errores y la evaluación de los KPI posteriores a la implementación para cuantificar el impacto de la versión. Genere de manera automática las métricas de velocidad, seguridad y estabilidad que los desarrolladores puedan utilizar para hacer mejoras. Para más información, consulte Panel de supervisión de DevOps en AWS.

Excel

Adopte las prácticas y tecnologías de vanguardia para obtener un rendimiento óptimo. El perfeccionamiento continuo de los procesos de CI/CD son útiles para mejorar la calidad del software, reducir el tiempo de comercialización y aumentar la agilidad. Cada vez surgen nuevas técnicas y herramientas, por lo que es esencial que su organización se mantenga informada y se adapte para mantener una ventaja competitiva.

Para seguir adaptándose, tenga en cuenta lo siguiente:

  • Defina todo como código, entre esto la aplicación, la configuración, la infraestructura, los datos, las cuentas y organizaciones de AWS, los procesos de implementación, las redes y los controles de seguridad y cumplimiento.

  • Cree las canalizaciones de implementación correspondientes para las imágenes de computación, los servicios compartidos y las aplicaciones.

  • Considere un modelo de GitOps en el que las solicitudes basadas en extracciones inicien un flujo de trabajo para implementar los cambios tras comparar el estado de la infraestructura existente con el estado deseado, tal y como se describe en el código.

  • Considere utilizar las canalizaciones de CD para implementar el machine learning (ML), los datos, el internet de las cosas (IoT) y otras cargas de trabajo.

  • Firme de manera digital todos los artefactos de creación y guárdelos en un repositorio seguro.

  • Haga un seguimiento de la procedencia del software mediante la generación automática de una lista de materiales de software que cree un registro de todos los artefactos versionados y firmados de manera digital que se distribuyen a los clientes.

  • Tras eliminar toda la actividad manual de un proceso de entrega de software, elimine las juntas de revisión manual.

En el caso de las aplicaciones y los servicios que automatizaron todo su proceso de entrega de software, considere la posibilidad de una implementación continua, en la que los equipos implementen cambios que pasen todas las verificaciones en una canalización a los clientes en producción. Para obtener una visualización, consulte el primer diagrama de ¿Qué es la entrega continua? en el sitio web de AWS.

Integrar tecnologías de IA/ML

La integración de las tecnologías de inteligencia artificial (IA) y machine learning (ML) en los procesos de CI/CD ofrece varios beneficios, entre los que se incluyen los siguientes:

  • Generación de pruebas automatizada

  • Priorización de pruebas inteligente

  • Análisis predictivo para la detección de problemas

  • Detección de anomalías y análisis de la causa de origen

  • Revisión del código y control de calidad

  • Optimización de la implementación

Para más información, consulte Cómo agregar inteligencia a las operaciones del desarrollador en el sitio web de AWS.

Adopte las prácticas de ingeniería del caos

La ingeniería del caos implica inyectar errores de manera intencional en los sistemas para poner a prueba su capacidad de resistir eventos inesperados y recuperarse de estos. Al identificar las debilidades y abordarlas de manera proactiva, las organizaciones pueden mejorar la fiabilidad general de sus sistemas y minimizar el impacto de los posibles problemas.

Adopte las prácticas de ingeniería del caos para probar la resiliencia de los sistemas mediante herramientas como Gremlin, Chaos Monkey o Litmus. Haga experimentos controlados con periodicidad para identificar las vulnerabilidades, validar la tolerancia a errores y asegurarse de que la aplicación gestiona los errores inesperados de manera adecuada. Este enfoque proactivo ayuda a mejorar la fiabilidad del sistema y contribuye a brindar una canalización de CI/CD más sólida.

Optimización del rendimiento

Optimice el rendimiento de la aplicación de manera continua mediante herramientas de creación de perfiles, supervisión en tiempo real e intercambio de información. Aplique técnicas como las siguientes para garantizar que las aplicaciones puedan gestionar el aumento del tráfico y la demanda:

  • Optimización del código

  • Creación de perfiles

  • Supervisión en tiempo real

  • Bucles de retroalimentación

  • Almacenamiento en caché

  • Equilibrio de carga

  • Pruebas de escalabilidad y rendimiento

Implementación de la observabilidad avanzada

Mejorar la observabilidad de la infraestructura en la nube va más allá de los aspectos básicos de la recopilación, la agregación y el análisis de métricas, registros y seguimientos. Cuando la observabilidad se mejora con herramientas como Amazon CloudWatch y AWS X-Ray, se convierte en una práctica estratégica que impulsa la entrega y la innovación continuas.

En una sólida canalización de CI/CD, la observabilidad avanzada le permite descubrir información no solo sobre las aplicaciones e infraestructura, sino también sobre el rendimiento y el estado de todo el sistema, lo que incluye la propia canalización. Estos conocimientos ayudan a lo siguiente:

  • Identificar, comprender y abordar rápidamente los posibles problemas para mejorar la estabilidad de las aplicaciones y reducir el tiempo de inactividad

  • Optimizar los procesos de CI/CD para crear entregas más rápidas y fiables

  • Obtener información más profunda sobre el impacto de los cambios y las implementaciones de código para impulsar una toma de decisiones informada

  • Optimizar el uso de los recursos para mejorar la eficiencia operativa y la rentabilidad

Para aumentar la observabilidad, haga lo siguiente:

  • Incorpore la observabilidad en cada capa de las aplicaciones y la infraestructura para crear una visión integral del rendimiento, el comportamiento y el estado de los sistemas.

  • Centralice la recopilación, el almacenamiento y el análisis de datos con herramientas como Amazon CloudWatch para unificar los datos de observabilidad y facilitar su acceso e interpretación.

  • Utilice AWS X-Ray para el seguimiento distribuido a fin de comprender el rendimiento de las aplicaciones y sus servicios subyacentes.

  • Establezca intercambios de información para una mejora continua y utilice los datos de observabilidad para impulsar mejoras iterativas en los sistemas.

Adoptar la observabilidad avanzada no consiste solo en mantener los sistemas, sino que es un paso estratégico para lograr la excelencia operativa e impulsar la innovación continua en su organización.

Implementación de prácticas de GitOps

Implemente las prácticas de GitOps para administrar las configuraciones de la infraestructura y las aplicaciones mediante un repositorio de Git como origen único de información. Este enfoque simplifica la administración de cambios, mejora la trazabilidad y garantiza la coherencia en todos los entornos.