Arquitectura de línea de base de CI/CD con Azure Pipelines

En este artículo se describe un flujo de trabajo de DevOps general para implementar cambios en las aplicaciones en entornos de ensayo y producción de 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 que usa Azure Pipelines. No está pensado para abarcar los detalles de la implementación en diferentes entornos, como Azure App Service, Virtual Machines y Azure Power Platform. Los detalles específicos de cada plataforma de implementación se tratan en artículos independientes.

Architecture

Diagrama de la arquitectura de una canalización CI/CD mediante Azure Pipelines.

Descargue un archivo 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 por el escenario de la siguiente manera:

  1. 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:

    • Creación del código, lo cual requiere extraer dependencias de un sistema de administración de dependencias.
    • El uso de herramientas para analizar el código, como el análisis de código estático, linting y análisis 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, la canalización 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.

  2. Canalización de CI: una combinación en Git de Azure Repos desencadena una canalización de CI. Esta canalización ejecuta las mismas comprobaciones que la canalización de PR con algunas adiciones importantes. La canalización de CI ejecuta pruebas de integración. 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.

  3. Desencadenador de una canalización de CD: la publicación de artefactos desencadena la canalización de CD.

  4. 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 solicitar a una persona o grupo que valide la implementación y reanude la canalización.

  5. 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 publicación o se produce un error en las pruebas de comprobación de la compilación, la versión se revierte, la canalización finaliza y el desarrollador tendrá que realizar los cambios necesarios.

  6. 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 seguimientos. Azure Log Analytics se usa para almacenar todos estos datos.

Componentes

  • Un repositorio Git de Azure Repos actúa como un repositorio de código que proporciona control de versiones y una plataforma para proyectos colaborativos.

  • Azure Pipelines ofrece una forma de compilar, probar, empaquetar y publicar código de aplicación e infraestructura. Este ejemplo tiene tres canalizaciones distintas con las responsabilidades siguientes:

    • 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.
  • Azure Artifact Feeds le permite 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 más seguras de los paquetes.

  • Key Vault proporciona una forma de administrar datos seguros para la 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.

  • Supervisión es un recurso de observabilidad que recopila y almacena métricas y registros, telemetría de aplicaciones y métricas de plataformas de los servicios de Azure. Use estos datos para supervisar la aplicación, configurar alertas y paneles, y realizar el análisis de 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.

  • El á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, puede considerar estas alternativas:

  • Azure DevOps Server (anteriormente conocido como Team Foundation Server) puede usarse como sustituto en un entorno local.

  • Jenkins es una herramienta código abierto que se usa para automatizar compilaciones e implementaciones.

  • Las Acciones de GitHub le permiten automatizar los flujos de trabajo de CI/CD directamente desde GitHub.

  • Los repositorios de GitHub se pueden sustituir como repositorio de código. Azure Pipelines se integra perfectamente con repositorios de GitHub.

Este artículo se centra en los procedimientos generales de CI/CD con Azure Pipelines. A continuación se muestran algunos entornos de proceso en los que podría considerar la implementación:

  • App Service es un servicio basado en HTTP para hospedar aplicaciones web, API REST y back-ends para dispositivos móviles. Puede desarrollar en su lenguaje favorito, y las aplicaciones se ejecutarán y escalarán con facilidad tanto en entornos basados en Windows como en Linux. Web Apps admite ranuras de implementación, como ensayo y producción. Puede implementar una aplicación en un espacio de ensayo y lanzarla en el espacio de producción.

  • Azure Virtual Machines trata las cargas de trabajo que requieren un alto grado de control, o dependen de componentes o servicios del sistema operativo que no son posibles con Web Apps (por ejemplo, la caché global de ensamblados de Windows o COM).

  • 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 ni conocimientos técnicos.

  • Azure Functions es una plataforma de proceso sin servidor que se puede usar para compilar aplicaciones. Con Functions, puede usar desencadenadores y enlaces de datos para integrar los servicios. Functions también admite ranuras de implementación, como el almacenamiento provisional y producción. Puede implementar una aplicación en un espacio de ensayo y lanzarla en el espacio 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 le permite ejecutar aplicaciones en contenedores 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 las siguientes:

  • Ciclos de versión más cortos: los procesos automatizados de CI/CD le 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 la 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 de la versión.
  • Mayor productividad: La CI/CD automatizada permite que los desarrolladores no tengan que 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. La CI/CD puede habilitar reversiones automatizadas en versiones anteriores.

Posibles casos de uso

Considere Azure Pipelines y los procesos de CI/CD para:

  • Aceleración del desarrollo de aplicaciones y los ciclos de vida de implementación.
  • Generación de calidad y coherencia en un proceso automatizado de compilación y lanzamiento.
  • Aumento de la estabilidad y el tiempo de actividad de la aplicación.

Consideraciones

Estas consideraciones implementan los pilares del marco de buena arquitectura de Azure, que es un conjunto de principios guía que se pueden usar para mejorar la calidad de una carga de trabajo. Para más información, consulte Marco de buena arquitectura de Microsoft Azure.

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. Cuando use variables de 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 empiezan la supervisión en su entorno de producción. Al supervisar los demás entornos, puede identificar errores en un momento más temprano del proceso de desarrollo y evitar que los problemas lleguen al 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 de 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 puede 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 las pruebas manuales de aceptación de usuario, pruebas de rendimiento y carga, y reversiones.

Optimización de costos

La optimización de costos trata de buscar formas de reducir los gastos innecesarios y mejorar las eficiencias operativas. Para más información, vea Información general del pilar de optimización de costos.

El costo de Azure DevOps dependerá del número de usuarios de su organización que requieren acceso, además de 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 y mes. Puede haber cargos adicionales en función de las canalizaciones simultáneas que se necesiten, además de usuarios de prueba o licencias de usuario básico adicionales.

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) con 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

Consulte los siguientes recursos para aprender más sobre CI/CD y Azure DevOps: