Planeamiento de una canalización de versión mediante Azure Pipelines

Completado

En esta sección, seguirá el planeamiento de Andy y Mara de una canalización básica de CD que se ejecuta en Azure Pipelines.

Cuando hayan terminado, harán una demostración al resto del equipo. La canalización será una prueba de concepto que mejorarán y expandirán a medida que obtengan más información y reciban los comentarios de Tim y Amita.

¿Cuáles son los elementos de una canalización básica de CD?

Una canalización básica de CD contiene un desencadenador para poner el proceso en marcha y al menos una fase o fase de implementación. Una fase se compone de trabajos. Un trabajo es una serie de pasos que definen cómo compilar, probar o implementar la aplicación.

Diagram that shows a hand-drawn illustration of an artifact moving to a deployment environment.

Andy: Ya tenemos el artefacto de compilación . Es el archivo ZIP que crea nuestra canalización de compilación. Pero ¿cómo lo implementamos en un entorno activo de ?

¿Qué es una fase de canalización?

Una fase es una parte de la canalización que se puede ejecutar de forma independiente y se puede desencadenar mediante diferentes mecanismos. Un mecanismo podría ser el éxito de la fase anterior, una programación o incluso un desencadenador manual. En el siguiente módulo, aprenderemos más sobre estos mecanismos.

Mara: Podríamos tener una fase que compilara la aplicación y otra que ejecutara las pruebas.

Diagram that shows a hand-drawn illustration of a deployment pipeline that contains two stages, Build and Deploy.

Mara: Ya hemos definido las tareas para la fase de compilación de nuestra canalización. Nuestra fase de implementación puede ser similar, incluidas las tareas que implementan la compilación en un entorno.

La pregunta es la siguiente: ¿dónde debemos implementar el artefacto?

¿Qué es un entorno?

Probablemente ha usado el término entorno para hacer referencia a la ubicación en la que se ejecuta la aplicación o el servicio. Por ejemplo, el entorno de producción podría ser el lugar en el que los usuarios finales acceden a la aplicación.

Siguiendo este ejemplo, el entorno de producción podría ser lo siguiente:

  • Una máquina física o virtual (VM).
  • Un entorno contenedorizado, como Kubernetes.
  • Un servicio administrado, como Azure App Service.
  • Un entorno sin servidor, como Azure Functions.

Un artefacto se implementa en un entorno. Azure Pipelines facilita la implementación en casi cualquier tipo de entorno, ya sea local o en la nube.

En Azure Pipelines, el término entorno tiene un segundo significado. En este caso, un entorno es una representación abstracta de su entorno de implementación, como un clúster de Kubernetes, una instancia de App Service o una máquina virtual.

Un entorno de Azure Pipelines registra el historial de implementación para ayudarle a identificar el origen de los cambios. Mediante el uso de entornos de Azure Pipelines, también puede definir comprobaciones de seguridad y formas de controlar cómo se promueve un artefacto de una fase de la canalización a la otra. Lo que incluya un entorno dependerá de lo que quiera hacer con el artefacto. Un entorno en el que quiera probar el artefacto probablemente se definirá de forma distinta a aquel en el que quiera implementar el artefacto para los usuarios finales.

Una manera de definir un entorno de Azure Pipelines es usar un archivo YAML. El archivo YAML incluirá una sección environment, que especificará el entorno de Azure Pipelines en el que implementará el artefacto.

Cuando planee la canalización de versión, deberá decidir dónde se ejecutará la aplicación o el servicio. Vamos a seguir escuchando para ver qué deciden Andy y Mara.

Andy: —En términos generales, ¿qué tipo de entorno queremos? ¿Queremos realizar la implementación de forma local o en la nube?

Mara: Podríamos pedir a Tim que cree una máquina virtual para nosotros en el laboratorio, pero siempre se queda sin hardware. Nos será más fácil y rápido configurar una prueba de concepto si usamos la nube.

Andy: Sí, pero hay muchas opciones disponibles en la nube; podemos usar Azure Pipelines para realizar la implementación en cualquiera de ellas. ¿Cuál deberíamos probar?

Mara: —Los equipos que desarrollan nuestros juegos usan Azure para hospedar algunos de sus sistemas de back-end. Realizan la configuración de forma rápida y parecen estar satisfechos con el servicio. Creo que deberíamos usar Azure para nuestra nube.

Andy: ¡Vale, me parece bien! Pero Azure ofrece muchas opciones de proceso. ¿Cuál elegimos?

Andy muestra estas opciones en la pizarra:

  • Máquinas virtuales
  • Contenedores
  • Azure App Service
  • Informática sin servidor

Nota:

Encontrará más información sobre cada una de estas opciones de proceso al final de este módulo.

Mara: —Sé que los contenedores y la informática sin servidor son populares actualmente. En comparación con las VM, ambos son ligeros en cuanto a recursos. También son fáciles de sustituir y de escalar horizontalmente. Las dos opciones son interesantes, pero me inquieta tener que aprender a usar dos tecnologías a la vez. Me gustaría tener que concentrarme solo en la creación de la canalización.

Andy: —Opino lo mismo. Nos quedan dos opciones: VM o App Service. Creo que las máquinas virtuales serían una mejor opción si estuviéramos moviendo una aplicación de una línea empresarial, una que requiriera acceso completo a un entorno en particular, a la nube. No estamos haciendo algo tan importante.

Mara: —Entonces, nos queda App Service, que sería mi elección. Está diseñado para funcionar con Azure DevOps y ofrece ventajas. Es un entorno de plataforma como servicio (PaaS) para aplicaciones web, por lo que nos quita gran parte de la carga. No tendremos que preocuparnos por la infraestructura. También incluye características de seguridad y nos permite realizar equilibrios de carga y escalados automáticos.

Andy: —Parece que App Service es lo que necesitamos. Usémoslo. En cualquier caso, solo vamos a crear una prueba de concepto. Siempre podemos cambiar la opción de proceso si queremos probar otra más adelante.

¿Cómo realiza Azure Pipelines los pasos de implementación?

Para poder implementar la aplicación, Azure Pipelines primero necesita la autenticación con el entorno de destino. Azure Pipelines proporciona diferentes mecanismos de autenticación. Usar uno u otro dependerá del entorno de destino en el que vaya a realizar la implementación. Encontrará más información sobre estos mecanismos al final de este módulo.

Andy: —Tenemos nuestro artefacto de compilación y sabemos que compilaremos e implementaremos en fases de la canalización. También hemos definido el entorno de destino de nuestra implementación, que será App Service. Mi pregunta ahora es la siguiente: ¿cómo se autentica Azure Pipelines con App Service? Sé que esta será una de las preocupaciones de Tim. Necesitamos asegurarnos de que el proceso sea seguro.

Después de investigar un poco, Andy y Mara proponen los pasos generales que permiten que Azure Pipelines se implemente en App Service:

  1. Especificar el entorno de implementación de destino en la configuración de canalización.
  2. Proporcionar una manera de que Azure Pipelines autentique el acceso a ese entorno.
  3. Usar las tareas de Azure Pipelines para implementar el artefacto de compilación en ese entorno.

Mara: —Por lo que hemos investigado, necesitamos crear una conexión de servicio para especificar el entorno de destino y autenticar el acceso a él. Tras definir la conexión de servicio, estará disponible para usarla en todas nuestras tareas. Después, es necesario usar las tareas integradas DownloadPipelineArtifact para descargar el artefacto de compilación en el agente de canalización y AzureWebApp para implementar la aplicación en Azure App Service.

¿Qué son los trabajos y las estrategias?

Su canalización de compilación define un agente de compilación, variables de canalización y las tareas necesarias para compilar el software.

La parte de implementación de la canalización contiene estos mismos elementos. Normalmente, la configuración de implementación también define uno o varios trabajos, un entorno de canalización y estrategias. Anteriormente, hemos detallado los entornos de canalización.

A continuación, se muestra un ejemplo de configuración que ejecutará más adelante en este módulo. Esta configuración implementa el sitio web Space Game en Azure App Service.

- stage: 'DeployDev'
  displayName: 'Deploy to dev environment'
  dependsOn: Build
  jobs:
  - deployment: Deploy
    pool:
      vmImage: 'ubuntu-20.04'
    environment: dev
    variables:
    - group: 'Release Pipeline'
    strategy:
      runOnce:
        deploy:
          steps:
          - download: current
            artifact: drop
          - task: AzureWebApp@1
            displayName: 'Azure App Service Deploy: website'
            inputs:
              azureSubscription: 'Resource Manager - Tailspin - Space Game'
              appName: '$(WebAppName)'
              package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'

Trabajos

Un trabajo está formado por una serie de pasos, o tareas, que se ejecutan secuencialmente como una unidad. Cada fase de canalización tiene un trabajo de forma predeterminada, incluso aunque esa fase no utilice la palabra clave job.

Un trabajo puede ejecutarse en un grupo de agentes, en un contenedor o directamente en el servidor de Azure DevOps. El trabajo de ejemplo que se muestra aquí se ejecuta en un agente de Ubuntu hospedado por Microsoft.

Puede especificar las condiciones con las que se ejecutará cada trabajo. En el trabajo de ejemplo que se muestra aquí, no se define ninguna condición. De forma predeterminada, un trabajo se ejecuta si no depende de ningún otro trabajo o si todos los trabajos de los que depende se han completado correctamente.

También puede ejecutar trabajos en paralelo o secuencialmente. Mediante el uso de la canalización de compilación existente como ejemplo, puede usar trabajos paralelos para compilar el software en agentes de Windows, Linux y macOS simultáneamente.

Recuerde que un trabajo de implementación es un tipo especial de trabajo que juega un papel importante en las fases de implementación. Los trabajos de implementación registran el estado de las implementaciones en Azure Pipelines, lo que le proporciona una pista de auditoría. Los trabajos de implementación también ayudan a definir la estrategia de implementación, que veremos en breve.

Estrategias

Una estrategia define cómo se implementa la aplicación. Obtendrá más información sobre estrategias, como la de implementación azul-verde y la de valor controlado, en un módulo futuro. Por ahora, usará la estrategia runOnce para descargar el paquete de Space Game de la canalización e implementarlo en Azure App Service.

¿Cómo se conecta Azure Pipelines a Azure?

Para implementar la aplicación en un recurso de Azure, como una máquina virtual o App Service, necesita una conexión de servicio. Una conexión de servicio proporciona acceso seguro a la suscripción a Azure mediante uno de los dos métodos:

  • Autenticación de entidad de servicio
  • Identidades administradas de recursos de Azure

Puede obtener más información sobre estos modelos de seguridad al final de este módulo, pero el resumen sería el siguiente:

  • Una entidad de servicio es una identidad con un rol limitado que puede acceder a recursos de Azure. Considere una entidad de servicio como una cuenta de servicio que puede realizar tareas automatizadas en su nombre.
  • Las identidades administradas para recursos de Azure son una característica de Microsoft Entra ID que simplifica el proceso de trabajo con entidades de servicio. Dado que existen identidades administradas en el inquilino de Microsoft Entra, la infraestructura de Azure puede autenticar el servicio y administrar la cuenta automáticamente.

Las identidades administradas simplifican el proceso de trabajar con entidades de servicio; pero en este módulo, usaremos la autenticación de la entidad de servicio porque una conexión de servicio puede detectar automáticamente los recursos de Azure y asignar automáticamente los roles de entidad de servicio adecuados.

El plan

Andy y Mara están listos para comenzar. Van a hacer lo siguiente:

  • Aprovechar su configuración de compilación de Azure Pipelines existente.
  • Definir una fase de compilación que cree el artefacto.
  • Definir una fase de implementación que implemente el artefacto en App Service.

Diagram that shows a hand-drawn illustration of a deployment pipeline that contains two stages. The deployment stage deploys the artifact to App Service.

Andy: —¿Es correcto este dibujo? Usamos Azure Pipelines para implementar en App Service . Para ello, tomaremos el artefacto de compilación como entrada para la fase de implementación . Las tareas de la fase de implementación descargarán el artefacto y usarán una conexión de servicio para implementar el artefacto en App Service .

Mara: —Eso lo resume todo. Empecemos.

Comprobación de conocimientos

1.

Tiene una gran idea para una nueva aplicación web. Ha estado trabajando con código en el portátil, pero le gustaría que su equipo le diera su opinión al respecto antes de continuar. ¿Cuál es la forma más rápida de implementar su aplicación en Azure para poder compartirla con su equipo?

2.

Para realizar una implementación en Azure App Service, ¿qué recursos necesita Azure Pipelines?

3.

¿Cuál de las siguientes afirmaciones describe la relación que hay entre tareas, fases y trabajos?