Arquitectura de línea base de CI/CD con Azure Pipelines
En este artículo se describe un flujo de trabajo de DevOps de alto nivel para implementar cambios de aplicación en entornos de ensayo y producción en Azure. La solución usa prácticas de integración continua e implementación continua (CI/CD) con Azure Pipelines.
Importante
En este artículo se describe una arquitectura general de CI/CD mediante Azure Pipelines. No está pensado para cubrir los detalles de la implementación en distintos entornos, como Azure App Services, Virtual Machines y Azure Power Platform. Los detalles de la plataforma de implementación se tratan en artículos independientes.
Arquitectura
Descargar un archivo de Visio de esta arquitectura.
Nota
Aunque en este artículo se trata la CI/CD para los cambios en la aplicación, también se puede usar Azure Pipelines para compilar canalizaciones de CI/CD para cambios de infraestructura como código (IaC).
Flujo de datos
Los datos fluyen a través del escenario de la manera siguiente:
Canalización de PR: una solicitud de incorporación de cambios (PR) para Git de Azure Repos desencadena una canalización de PR. Esta canalización ejecuta comprobaciones rápidas de calidad. Estas comprobaciones deben incluir:
- Compilar el código, que requiere extraer dependencias de un sistema de administración de dependencias.
- El uso de herramientas para analizar el código, como el análisis estático de código, el linting y el examen de seguridad
- Pruebas unitarias
Si se produce un error en alguna de las comprobaciones, la ejecución de la canalización finaliza y el desarrollador tendrá que realizar los cambios necesarios. Si se superan todas las comprobaciones, la canalización debe requerir una revisión de PR. Si se produce un error en la revisión de PR, el pipeline finaliza y el desarrollador tendrá que realizar los cambios necesarios. Si se superan todas las comprobaciones y las revisiones de PR, la PR se fusionará correctamente.
Canalización de CI: una combinación en Git de Azure Repos desencadena una canalización de CI. Esta tubería ejecuta las mismas comprobaciones que la tubería de PR con algunas adiciones importantes. La canalización de CI ejecuta pruebas de integración. Las pruebas de integración pueden consumir muchos recursos, por lo que ejecutarlas en la canalización de CI equilibra la velocidad de desarrollo y la detección de errores. También es importante tener en cuenta que pasar las pruebas en una PR no siempre garantiza que vayan a tener éxito tras la fusión, ya que los cambios en la rama principal pueden introducir nuevos problemas, lo que subraya la necesidad de realizar pruebas posteriores a la fusión. Estos factores hacen que la canalización de Integración Continua sea un lugar mejor para las pruebas de integración que la canalización de PR. Estas pruebas de integración no deben requerir la implementación de la solución, ya que los artefactos de compilación aún no se han creado. Si las pruebas de integración requieren secretos, la canalización obtiene esos secretos de Azure Key Vault. Si se produce un error en alguna de las comprobaciones, la canalización finaliza y el desarrollador tendrá que realizar los cambios necesarios. El resultado de una ejecución correcta de esta canalización es la creación y publicación de artefactos de compilación.
Desencadenador de una canalización de CD: la publicación de artefactos desencadena la canalización de CD.
Publicación de CD en el almacenamiento provisional: la canalización de CD descarga los artefactos de compilación creados en la canalización de CI e implementa la solución en un entorno de ensayo. A continuación, la canalización ejecuta pruebas de aceptación en el entorno de ensayo para validar la implementación. Si se produce un error en alguna prueba de aceptación, la canalización finaliza y el desarrollador tendrá que realizar los cambios necesarios. Si las pruebas se realizan correctamente, se puede implementar una tarea de validación manual para requerir que una persona o grupo valide la implementación y reanude la canalización.
Publicación de CD en producción: si se reanuda la intervención manual o no hay ninguna intervención manual implementada, la canalización publica la solución en producción. La canalización debe ejecutar pruebas de comprobación de la compilación en producción para asegurarse de que la solución publicada funciona según lo previsto. Si un paso de intervención manual da como resultado una cancelación, se produce un error en la versión o se produce un error en las pruebas de humo, la versión se revierte, la canalización finaliza y el desarrollador tendrá que realizar los cambios necesarios.
Supervisión: Azure Monitor recopila datos de observabilidad, como registros y métricas, para que un operador pueda analizar los datos de mantenimiento, rendimiento y uso. Application Insights recopila todos los datos de supervisión específicos de la aplicación, como los seguimientos. Azure Log Analytics se usa para almacenar todos los datos.
Componentes
Un repositorio de Git de Azure Repos sirve como repositorio de código que proporciona control de versiones y una plataforma para proyectos de colaboración.
azure Pipelines proporciona una manera de compilar, probar, empaquetar y liberar código de infraestructura y aplicación. Este ejemplo tiene tres canalizaciones distintas con las siguientes responsabilidades:
- Las canalizaciones de PR validan el código antes de permitir que una PR se combine mediante linting, compilación y pruebas unitarias.
- Las canalizaciones de CI se ejecutan después de combinar el código. Realizan la misma validación que las canalizaciones de PR, pero agregan pruebas de integración y publican artefactos de compilación si todo se realiza correctamente.
- Las canalizaciones de CD implementan artefactos de compilación, ejecutan pruebas de aceptación y realizan su lanzamiento en producción.
Los feeds de Azure Artifact permiten administrar y compartir paquetes de software, como Maven, npm y NuGet. Artifact Feeds le permite administrar el ciclo de vida de los paquetes, incluido el control de versiones, la promoción y la retirada de paquetes. Esto le ayuda a asegurarse de que el equipo usa las versiones más recientes y seguras de los paquetes.
Key Vault proporciona una manera de administrar datos seguros para tu solución, incluidos secretos, claves de cifrado y certificados. En esta arquitectura, se usa para almacenar secretos de aplicación. Se accede a estos secretos a través de la canalización. Azure Pipelines puede acceder a los secretos con una tarea de Key Vault o mediante la vinculación de secretos desde Key Vault.
Monitor es un recurso de observabilidad que recopila y almacena métricas y registros, telemetría de aplicaciones y métricas de plataforma para los servicios de Azure. Use estos datos para supervisar la aplicación, configurar alertas, paneles y realizar análisis de la causa principal de los errores.
Application Insights es un servicio de supervisión que proporciona información en tiempo real sobre el rendimiento y el uso de las aplicaciones web.
área de trabajo de Log Analytics proporciona una ubicación central donde puede almacenar, consultar y analizar datos de varios orígenes, incluidos recursos, aplicaciones y servicios de Azure.
Alternativas
Aunque este artículo se centra en Azure Pipelines, podría considerar estas alternativas:
Azure DevOps Server podría usarse como un sustituto local.
Jenkins es una herramienta de código abierto que se usa para automatizar compilaciones e implementaciones.
Acciones de GitHub le permiten automatizar los flujos de trabajo de CI/CD directamente desde GitHub.
Los repositorios de GitHub pueden ser utilizados como un repositorio de código. Azure Pipelines se integra perfectamente con repositorios de GitHub.
Este artículo se centra en las prácticas generales de CI/CD con Azure Pipelines. A continuación se muestran algunos entornos de computación en los que podría considerar implementar:
App Service es un servicio basado en HTTP para hospedar aplicaciones web, API REST y back-ends móviles. Puede desarrollar en su lenguaje favorito, y las aplicaciones se ejecutan y escalan con facilidad en entornos basados en Windows y Linux. Web Apps admite ranuras de implementación, como ensayo y producción. Puede implementar una aplicación en una ranura de ensayo y liberarla en la ranura de producción.
Azure Virtual Machines controla las cargas de trabajo que requieren un alto grado de control o dependen de los componentes y servicios del sistema operativo que no son posibles con Web Apps.
Azure Power Platform es una colección de servicios en la nube que permiten a los usuarios compilar, implementar y administrar aplicaciones sin necesidad de infraestructura o experiencia técnica.
azure Functions es una plataforma de proceso sin servidor que puede usar para compilar aplicaciones. Con Functions, puede usar desencadenadores y enlaces para integrar servicios. Functions también admite ranuras de implementación, como el almacenamiento provisional y producción. Puede implementar una aplicación en una ranura de ensayo y liberarla en la ranura de producción.
azure Kubernetes Service (AKS) es un clúster de Kubernetes administrado en Azure. Kubernetes es una plataforma de orquestación de contenedores de código abierto.
azure Container Apps permite ejecutar aplicaciones en contenedor en una plataforma sin servidor.
Detalles del escenario
El uso de prácticas probadas de CI y CD para implementar cambios en la aplicación o la infraestructura proporciona varias ventajas, entre las que se incluyen:
- ciclos de versión más cortos: los procesos automatizados de CI/CD permiten implementar más rápido que los procedimientos manuales. Muchas organizaciones implementan varias veces al día.
- Mejor calidad del código: las puertas de calidad de las canalizaciones de CI, como linting y las pruebas unitarias, dan como resultado un código de mayor calidad.
- Disminución del riesgo de publicación : las prácticas adecuadas de CI/CD reducen drásticamente el riesgo de publicar nuevas características. La implementación se puede probar antes del lanzamiento.
- aumento de la productividad: CI/CD automatizado libera a los desarrolladores de trabajar en integraciones e implementaciones manuales para que puedan centrarse en nuevas características.
- Habilitación de reversiones: aunque las prácticas adecuadas de CI/CD reducen el número de errores o regresiones que se publican, estas se siguen produciendo. CI/CD puede permitir reversiones automatizadas a lanzamientos anteriores.
Casos de uso potenciales
Considere Azure Pipelines y los procesos de CI/CD para:
- Aceleración del desarrollo de aplicaciones y los ciclos de vida de implementación.
- Crear calidad y coherencia en un proceso automatizado de compilación y versión.
- Aumento de la estabilidad y el tiempo de actividad de la aplicación.
Consideraciones
Estas consideraciones implementan los pilares de Azure Well-Architected Framework, que es un conjunto de principios rectores que se pueden usar para mejorar la calidad de una carga de trabajo. Para obtener más información, consulte Microsoft Azure Well-Architected Framework.
Excelencia operativa
Considere la posibilidad de implementar infraestructura como código (IaC) para definir la infraestructura e implementarla en las canalizaciones.
Considere la posibilidad de usar una de las tareas de tokenización disponibles en el marketplace de VSTS, en el contexto suele hacer referencia a un proceso en el que la información confidencial (como claves de API, contraseñas u otros secretos) se sustituye por tokens o marcadores de posición durante la implementación o la configuración.
Utilice Variables de versión en las definiciones de versión para impulsar los cambios de configuración en los entornos. Las variables de versión se pueden limitar a una versión completa o a un entorno determinado. Al usar variables para obtener información secreta, asegúrese de seleccionar el icono de candado.
Considere la posibilidad de usar agentes autohospedados si va a implementar en recursos que se ejecutan en una red virtual protegida. También puede considerar los agentes autohospedados si ejecuta un gran volumen de compilaciones. En los casos de grandes volúmenes de compilación, los agentes autohospedados se pueden usar para acelerar las compilaciones de una manera rentable.
Considere el uso de Application Insights y otras herramientas de supervisión lo antes posible en la canalización de versión. Muchas organizaciones solo comienzan la supervisión en su entorno de producción. Mediante la supervisión de otros entornos, puede identificar errores anteriormente en el proceso de desarrollo y evitar problemas en el entorno de producción.
Considere la posibilidad de usar recursos de supervisión independientes para producción.
Considere la posibilidad de usar canalizaciones de YAML en lugar de la interfaz clásica. Las canalizaciones YAML se pueden tratar como otro código. Las canalizaciones de YAML se pueden comprobar en el control de código fuente y con versiones, por ejemplo.
Considere la posibilidad de usar plantillas YAML para promover la reutilización y simplificar las canalizaciones. Por ejemplo, las canalizaciones de PR y CI son similares. Se podría usar una sola plantilla parametrizada para ambas canalizaciones.
Considere la posibilidad de crear entornos más allá del almacenamiento provisional y de producción para admitir actividades como pruebas manuales de aceptación de usuarios, pruebas de rendimiento y carga y reversiones.
Optimización de costos
La optimización de costos consiste en examinar formas de reducir los gastos innecesarios y mejorar las eficiencias operativas. Para obtener más información, consulte Información general sobre el pilar de optimización de costos.
Los costos de Azure DevOps dependen del número de usuarios de la organización que requieren acceso, junto con otros factores, como el número de versiones o compilaciones simultáneas necesarias y el número de usuarios de prueba. Para más información, consulte Precios de Azure DevOps.
Esta calculadora de precios proporciona una estimación para ejecutar Azure DevOps con 20 usuarios.
Azure DevOps se factura por usuario al mes. Puede haber más cargos en función de las canalizaciones simultáneas necesarias, además de más usuarios de prueba o licencias básicas de usuario.
Seguridad
Tenga en cuenta las ventajas de seguridad del uso de agentes hospedados por Microsoft al elegir si se usan estos o se usan agentes autohospedados.
Asegúrese de que todos los cambios en los entornos se realizan a través de canalizaciones. Implemente controles de acceso basados en rol (RBAC) en el principio de privilegios mínimos, lo que impide que los usuarios accedan a entornos.
Considere la posibilidad de integrar los pasos de Azure Pipelines para realizar un seguimiento de las dependencias, administrar licencias, buscar vulnerabilidades y mantener las dependencias actualizadas.
Pasos siguientes
Revise los siguientes recursos para más información sobre CI/CD y Azure DevOps:
- ¿Qué es DevOps?
- DevOps en Microsoft: cómo trabajamos con Azure DevOps
- Configurar una canalización de CI/CD para .NET con Azure DevOps Projects
- ¿Qué es Azure Repos?
- ¿Qué es Azure Pipelines?
- Azure DevOps
- Información general sobre App Service
- Introducción a Azure Functions
- conceptos básicos de Azure Key Vault
- información general de Azure Monitor