Configuración de aplicaciones y máquinas virtuales

Completado

Es habitual compilar aplicaciones y otro código personalizado para la solución de Azure. Las aplicaciones personalizadas pueden incluir sitios web, API y aplicaciones en segundo plano que se ejecutan sin interacción humana. En esta unidad, verá cómo diseñar un flujo de trabajo para compilar e implementar una aplicación junto con su infraestructura.

Compilación de aplicaciones

Muchos tipos de aplicaciones deben compilarse o crearse antes de que se puedan usar. El proceso de compilación toma el código fuente de la aplicación, realiza una secuencia de actividades en él y, después, crea un conjunto de archivos que se pueden implementar.

El proceso de compilación compila el código fuente en archivos binarios o ejecutables. Normalmente, un proceso de compilación incluye actividades adicionales, como comprimir los archivos de imagen que se van a servir a los usuarios del sitio web, realizar linting en el código para comprobar que sigue los procedimientos de codificación correctos y ejecutar pruebas unitarias que comprueben el comportamiento de partes individuales de la aplicación. También puede realizar pasos como firmar digitalmente los archivos para garantizar que no se pueden modificar.

Sea cual sea la serie de pasos, la salida del proceso de compilación es un artefacto que se puede implementar. Normalmente, el artefacto se guarda en el sistema de archivos del ejecutor del flujo de trabajo. Las partes posteriores del flujo de trabajo deben trabajar con el artefacto para implementarlo mediante los entornos y probarlo a medida que avanza por las puertas de calidad que se definan en la definición del flujo de trabajo.

Nota:

Puede que haya oído hablar de los términos integración continua e implementación continua, o CI y CD. Un proceso de compilación se encuentra dentro de la parte de integración continua del flujo de trabajo.

Artefactos del flujo de trabajo

Los artefactos que se generan en el flujo de trabajo no se almacenan en el repositorio de Git. Se derivan del código fuente, pero no son código propio, por lo que no pertenecen a un repositorio de control de código fuente. Se crean en el sistema de archivos del ejecutor del flujo de trabajo. Se crea un nuevo ejecutor para cada trabajo de flujo de trabajo, por lo que necesita una manera de compartir los archivos entre trabajos y ejecutores.

Los artefactos de canalización proporcionan una manera de almacenar archivos en Acciones de GitHub, y están asociados a la ejecución concreta del flujo de trabajo. Use la acción de flujo de trabajo actions/upload-artifact para indicar a Acciones de GitHub que cargue un archivo o una carpeta desde el sistema de archivos del ejecutor como un artefacto de flujo de trabajo:

- name: Upload folder as a workflow artifact
  uses: actions/upload-artifact@v3
  with:
    name: my-artifact-name
    path: ./my-folder

La propiedad path es la ubicación que contiene el código compilado o los archivos de salida en el sistema de archivos del ejecutor del trabajo. El contenido de esta ubicación se cargará en el artefacto. Puede especificar un único archivo, varios archivos o una carpeta.

Cada artefacto tiene un nombre, que se especifica mediante la propiedad name. Use el nombre del artefacto para hacer referencia a él más adelante en el flujo de trabajo. Los trabajos del flujo de trabajo posteriores pueden descargar el artefacto a fin de que puedan trabajar con él para implementar el sitio web en el servidor que lo hospeda, por poner un caso:

Diagrama en el que se muestra un flujo de trabajo que carga un artefacto denominado

Use la acción actions/download-artifact para descargar todos los artefactos del flujo de trabajo:

- uses: actions/download-artifact@v3

O bien, especifique un nombre de artefacto para descargar solo un artefacto específico:

- uses: actions/download-artifact@v3
  with:
    name: my-artifact-name

Implementación de aplicaciones

El proceso de compilación de una aplicación genera y carga un artefacto que se puede implementar. Los trabajos posteriores del flujo de trabajo implementan el artefacto. La manera de implementar una aplicación depende del servicio que se use para hospedarla.

Implementación en Azure App Service

La empresa de juguetes usa Azure App Service para hospedar su sitio web. Puede crear y configurar una aplicación de App Service mediante Bicep, pero cuando llegue el momento de implementar la propia aplicación, dispondrá de varias opciones para obtener la aplicación compilada en la infraestructura de hospedaje. Estas opciones se administran como parte del plano de datos de App Service.

El enfoque más común es usar la acción azure/webapps-deploy:

- uses: azure/webapps-deploy@v2
  with:
    app-name: my-app-service
    package: my-artifact-name/website.zip

Debe proporcionar varios datos para implementar la aplicación en App Service. Entre esta información se incluye el nombre del recurso de la aplicación de App Service, que se especifica mediante la propiedad app-name. Como ha aprendido en la unidad anterior, debe agregar una salida al archivo de Bicep y usar una variable de flujo de trabajo para propagar el nombre de la aplicación a través del flujo de trabajo. También debe especificar un archivo .zip con la aplicación que se va a implementar mediante la propiedad package. Esta suele ser la ruta de acceso a un artefacto de flujo de trabajo.

App Service tiene su propio sistema de autenticación de plano de datos que usa para las implementaciones. La acción azure/webapps-deploy controla automáticamente el proceso de autenticación:

Diagrama en el que se ilustra el proceso de intercambio de credenciales.

La acción azure/webapps-deploy usa la identidad asociada a la sesión activa de Azure del trabajo, donde ha iniciado sesión con una identidad de carga de trabajo. La acción crea y descarga las credenciales necesarias para la implementación. Luego usa las credenciales de implementación cuando se comunica con la API de plano de datos de App Service.

App Service también proporciona algunas otras características relacionadas con la implementación, incluidas las ranuras de implementación. Las ranuras ayudan a implementar de forma segura versiones nuevas de las aplicaciones sin tiempo de inactividad. También ayudan a preparar la nueva versión de la aplicación antes de enviarle tráfico de producción. En este módulo no se usan ranuras, pero proporcionamos un vínculo para obtener más información sobre ellas en la página Resumen al final del módulo.

Implementación de aplicaciones en otros servicios de Azure

Azure proporciona muchas otras opciones para hospedar las aplicaciones, cada una de las cuales tiene su propio enfoque de implementación.

Azure Functions se basa en App Service y usa un proceso de implementación similar al descrito anteriormente.

Si implementa en una máquina virtual, normalmente debe conectarse a la instancia de máquina virtual para instalar la aplicación. A menudo necesita usar herramientas especializadas, como Chef, Puppet o Ansible, para organizar una implementación en máquinas virtuales.

Si usa Kubernetes o Azure Kubernetes Service (AKS), normalmente usaría un enfoque ligeramente diferente para compilar e implementar la solución. Una vez compilada la aplicación, el flujo de trabajo crea una imagen de contenedor y la publica en un registro de contenedor de donde la lee el clúster de Kubernetes. Dado que el registro de contenedor mantiene la aplicación compilada, por lo general no se usa un artefacto de flujo de trabajo.

En este módulo, nos centramos en Azure App Service para ilustrar los conceptos de flujo de trabajo implicados. En la página Resumen al final del módulo, se proporcionan vínculos para obtener más información sobre la implementación en otros servicios de hospedaje.

Prueba de aplicaciones en el flujo de trabajo

En un módulo anterior, ha obtenido información sobre el valor y la importancia de ejecutar pruebas automatizadas desde el flujo de trabajo. Al implementar una aplicación, es una buena práctica que el flujo de trabajo ejecute algunas pruebas que invoquen el código de la aplicación. Estas pruebas reducen el riesgo de que una aplicación o un error de implementación puedan provocar tiempo de inactividad. En escenarios más avanzados, puede incluso realizar un conjunto de casos de prueba en la aplicación, como invocar API, o enviar y supervisar una transacción sintética.

Muchas aplicaciones implementan puntos de conexión de comprobación de estado. Cuando un punto de conexión de comprobación de estado recibe una solicitud, realiza una serie de comprobaciones en el sitio web, como asegurarse de que las bases de datos y los servicios de red son accesibles desde el entorno de la aplicación. La respuesta que devuelve el sitio indica si la aplicación es correcta. Los desarrolladores pueden escribir y personalizar sus propias comprobaciones de estado para satisfacer los requisitos de la aplicación. Si la aplicación tiene un punto de conexión de comprobación de estado, a menudo tiene sentido supervisarlo desde el flujo de trabajo una vez que finalice el trabajo de implementación.

El flujo de trabajo de implementación

En el ejercicio siguiente, actualizará el flujo de trabajo de implementación a fin de agregar nuevos trabajos para compilar la aplicación del sitio web e implementarla en cada entorno:

Diagrama que muestra el flujo de trabajo revisado, incluido un nuevo trabajo de compilación y un trabajo de implementación de la aplicación.