Ejercicio: Configuración del entorno de Azure DevOps

Completado

En esta unidad, deberá asegurarse de que la organización de Azure DevOps esté configurada para completar el resto del módulo. También creará los entornos de Azure App Service en los que va a realizar la implementación.

Para lograr estos objetivos, hará lo siguiente:

  • Agregar un usuario para procurar que Azure DevOps pueda conectarse a la suscripción de Azure
  • Configurar un proyecto de Azure DevOps para este módulo.
  • En Azure Boards, mueva el elemento de trabajo de este módulo a la columna En curso.
  • Asegúrese de que el proyecto esté configurado localmente para que pueda enviar los cambios a la canalización.
  • Cree la instancia de Azure App Service y la aplicación de Azure Functions con la CLI de Azure en Azure Cloud Shell.
  • Cree variables de canalización que definan los nombres de la instancia de App Service y Azure Functions.
  • Cree una conexión de servicio que permita a Azure Pipelines acceder de forma segura a la suscripción de Azure.

Adición de un usuario a Azure DevOps

Para completar este módulo, hay que tener una suscripción a Azure propia. Puede comenzar a trabajar con Azure de forma gratuita.

Aunque no necesita una suscripción a Azure para trabajar con Azure DevOps, en este ejercicio se usa Azure DevOps para realizar la implementación en recursos de Azure de la suscripción a Azure. Para simplificar el proceso, usaremos la misma cuenta Microsoft para iniciar sesión en la suscripción de Azure y en la organización de Azure DevOps.

Importante

Si inicia sesión con cuestas distintas, debe agregar un usuario a la organización de DevOps en la cuenta Microsoft que use para iniciar sesión en Azure. Para obtener más información, vea Adición de usuarios a su organización o proyecto. Cuando agregue el usuario, elija el nivel de acceso Básico.

Después, cierre la sesión de Azure DevOps e inicie sesión con la nueva cuenta de usuario. Use la cuenta Microsoft que utilice para iniciar sesión en la suscripción de Azure.

Obtención del proyecto de Azure DevOps

Asegúrese de que la organización de Azure DevOps está configurada para completar el resto de este módulo. Para ello, ejecutaremos una plantilla que crea un proyecto en Azure DevOps.

Los módulos de esta ruta de aprendizaje forman una progresión a medida que sigue el recorrido del equipo web de Tailspin en DevOps. Con fines de aprendizaje, cada módulo tiene su propio proyecto de Azure DevOps.

Ejecución de la plantilla

  1. Ejecute una plantilla que configure la organización de Azure DevOps:

  2. En el sitio del generador de demostraciones de Azure DevOps, seleccione Iniciar sesión. Si se le solicita, acepte los términos de uso. Aparece la página Crear proyecto.

  3. En la página Crear proyecto, escriba un nombre de proyecto, como Space Game - web - Azure Functions y, a continuación, en Seleccionar organización, seleccione la organización que usa para la suscripción de Azure.

    Captura de pantalla del generador de demostraciones de Azure DevOps en la que se muestra cómo crear el proyecto.

  4. En la sección siguiente, seleccione Yes, I want to fork this repository (Sí, quiero bifurcar este repositorio) y después Autorizar.

    Si aparece una ventana, autorice el acceso a su cuenta de GitHub.

    Importante

    La habilitación de esta opción de bifurcación es necesaria para que la plantilla se conecte al repositorio de GitHub. Selecciónela incluso si ya ha bifurcado el proyecto del sitio web de Space Game. La plantilla usa la bifurcación existente.

  5. Seleccione Crear un proyecto.

    La plantilla tarda unos minutos en ejecutarse.

  6. Cuando el proyecto se haya aprovisionado correctamente, seleccione Navegar al proyecto para ir a este en Azure DevOps.

Importante

La página Limpieza del entorno de Azure DevOps de este módulo contiene pasos importantes que debe realizar, incluso si no completa el módulo. La limpieza ayuda a garantizar que no se queda sin minutos de compilación libres.

Establecimiento de la visibilidad del proyecto

La bifurcación del repositorio Space Game en GitHub inicialmente se establece en pública mientras que el proyecto creado por la plantilla de Azure DevOps se establece en privado. Cualquier persona puede acceder a un repositorio público en GitHub, mientras que a un repositorio privado solo puede acceder usted y personas con las que decida compartirlo. Del mismo modo, en Azure DevOps, los proyectos públicos proporcionan acceso de solo lectura a los usuarios no autenticados, mientras que los privados requieren que los usuarios tengan acceso y se autentiquen para acceder a los servicios.

En este momento, no es necesario modificar ninguna de estas configuraciones para los fines de este módulo. Sin embargo, para sus proyectos personales, debe determinar la visibilidad y el acceso que desea conceder a otros usuarios. Por ejemplo, si el proyecto es de código abierto, podría elegir que tanto el repositorio de GitHub como el proyecto de Azure DevOps fueran públicos. Si el proyecto es de su propiedad, normalmente tanto el repositorio de GitHub como el proyecto de Azure DevOps son privados.

Más adelante encontrará los siguientes recursos útiles para determinar qué opción es mejor para su proyecto:

Asignar un elemento de trabajo y pasarlo al estado En curso

Aquí se asigna un elemento de trabajo a sí mismo en Azure Boards y establece el estado del elemento de trabajo como En curso. En la práctica, usted y el equipo tendrían que crear elementos de trabajo al principio de cada sprint o iteración de trabajo.

En este ejercicio se crea una lista de comprobación a partir de la cual se va a trabajar. Permite que otros miembros del equipo vean lo que hace y cuánto trabajo queda pendiente. El elemento de trabajo también ayuda a aplicar límites de trabajo en curso (WIP) para que el equipo no asuma demasiado trabajo a la vez.

  1. En Azure DevOps, vaya a la categoría Paneles y, después, seleccione Paneles en el menú.

    Azure DevOps muestra la ubicación del menú Boards.

  2. Abra el elemento de trabajo de refactorización de la API de tabla de clasificación como instancia de Azure Functions mediante la selección del título. Asígnese este elemento de trabajo y, a continuación, seleccione Guardar y cerrar.

  3. Seleccione la flecha abajo en la parte inferior de la tarjeta y elija En curso o seleccione la tarjeta y arrástrela a la columna En curso.

    Captura de pantalla de la tarjeta del elemento de trabajo que resalta la ubicación de la flecha abajo.

  4. El elemento de trabajo se mueve de la columna Tareas pendientes a la columna En curso.

    Captura de pantalla de Azure Boards en la que se resalta la tarjeta del elemento de trabajo en la columna En curso.

Al final de este módulo, moverá la tarjeta a la columna Listo después de haber completado la tarea.

Creación de los entornos de Azure App Service y Azure Functions

Aquí creará la instancia de App Service y la aplicación de Azure Functions necesarias para implementar la nueva versión del sitio y la API.

En el módulo de Learn Crear una canalización de versión en Azure Pipelines, se accedió a App Service desde Azure Portal. Aunque el portal es una excelente manera de explorar lo que está disponible en Azure o realizar tareas básicas, la activación de componentes como App Service puede resultar tediosa.

En este módulo usará la CLI de Azure para activar una instancia de App Service. Puede tener acceso a la CLI de Azure desde un terminal o a través de Visual Studio Code. Aquí, accederemos a la CLI de Azure desde Azure Cloud Shell. Esta experiencia de shell basada en explorador se hospeda en la nube. En Cloud Shell, la CLI de Azure está configurada para su uso con la suscripción de Azure.

Importante

Para completar los ejercicios de este módulo se necesita una suscripción de Azure propia.

Acceso a Cloud Shell a través de Azure Portal

  1. Inicie sesión en Azure Portal.

  2. En los controles globales del encabezado de página, seleccione Cloud Shell.

    Captura de pantalla de Azure Portal en la que se muestra la ubicación del elemento de menú Cloud Shell.

    Se abre un terminal y se conecta a Azure Cloud Shell.

  3. Si es necesario, seleccione Bash en el menú del terminal.

    Nota:

    Cloud Shell necesita un recurso de Azure Storage para conservar los archivos que se creen en Cloud Shell. Al abrir Cloud Shell por primera vez, se le pedirá que cree un grupo de recursos, una cuenta de almacenamiento y un recurso compartido de Azure Files. Esta configuración se usa automáticamente para todas las sesiones de Cloud Shell futuras.

Selección de una región de Azure

Una región consiste en uno o varios centros de datos de Azure de una ubicación geográfica. Este de EE. UU., Oeste de EE. UU. y Europa del Norte son ejemplos de regiones. Todos los recursos de Azure, incluida una instancia de App Service, tienen una región asignada.

Para facilitar la ejecución de los comandos, vamos a empezar por establecer una región predeterminada. Una vez establecida, los comandos que especifique usarán esa región hasta que indique otra distinta.

  1. En Cloud Shell, ejecute el comando az account list-locations para ver las regiones que están disponibles en su suscripción de Azure:

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. En la columna Name de la salida, elija una región cercana. Por ejemplo, elija eastasia o westus2.

  3. Ejecute az configure para establecer la región predeterminada. Reemplace <REGION> por el nombre de la región elegida.

    az configure --defaults location=<REGION>
    

    En este ejemplo se establece westus2 como la región predeterminada:

    az configure --defaults location=westus2
    

Creación de variables de Bash

Aquí, creará variables de Bash para que el proceso de instalación sea más cómodo y menos propenso a errores. El uso de variables para cadenas de texto compartidas ayuda a evitar errores tipográficos accidentales.

  1. Desde Cloud Shell, genere un número aleatorio, que se usará para crear nombres únicos globales para ciertos servicios en el paso siguiente.

    resourceSuffix=$RANDOM
    
  2. Cree tres nombres únicos globales para las cuentas de App Service, Azure Functions y de almacenamiento. Estos comandos usan comillas dobles, lo que indica a Bash que resuelva las variables mediante la sintaxis insertada.

    webName="tailspin-space-game-web-${resourceSuffix}"
    leaderboardName="tailspin-space-game-leaderboard-${resourceSuffix}"
    storageName="tailspinspacegame${resourceSuffix}"
    
  3. Cree dos variables de Bash más para almacenar los nombres del grupo de recursos y el plan de servicio.

    rgName='tailspin-space-game-rg'
    planName='tailspin-space-game-asp'
    

Creación de los recursos de Azure necesarios

Nuestra solución requiere varios recursos de Azure para la implementación, que crearemos ahora.

Nota:

En este ejercicio se usa la configuración de red predeterminada, para poder acceder al sitio desde Internet. En la práctica, podría configurar una red virtual de Azure para incluir el sitio web en una red a la que solo usted y el equipo puedan acceder. Más adelante, puede volver a configurar la red virtual para que el sitio web esté disponible para los usuarios.

  1. Ejecute el comando az group create para crear un grupo de recursos con el nombre que ha definido previamente:

    az group create --name $rgName
    
  2. Ejecute el comando az appservice plan create siguiente para crear un plan de App Service con el nombre que definimos en la tarea anterior:

    az appservice plan create \
      --name $planName \
      --resource-group $rgName \
      --sku B1 \
      --is-linux
    

    El parámetro --sku especifica el plan B1. Este plan se ejecuta en el nivel Básico. El parámetro --is-linux especifica los trabajos de Linux (subprocesos que se usan en la programación de tareas y los eventos).

    Importante

    Si la SKU B1 no está disponible en la suscripción de Azure, elija otro plan, como S1 (Estándar).

  3. Ejecute el comando az webapp create siguiente para crear la instancia de App Service:

    az webapp create \
      --name $webName \
      --resource-group $rgName \
      --plan $planName \
      --runtime "DOTNETCORE|6.0"
    
  4. Azure Functions necesita una cuenta de almacenamiento para la implementación. Ejecute el comando az storage account create siguiente para crearla:

    az storage account create \
      --name $storageName \
      --resource-group $rgName \
      --sku Standard_LRS
    
  5. Ejecute el comando az functionapp create siguiente para crear la instancia de la aplicación de Azure Functions. Reemplace <region> por la región que prefiera.

    az functionapp create \
      --name $leaderboardName \
      --resource-group $rgName \
      --storage-account $storageName \
      --functions-version 4 \
      --consumption-plan-location <region>
    
  6. Ejecute el comando az webapp list siguiente para mostrar el nombre de host y el estado de la instancia de App Service:

    az webapp list \
      --resource-group $rgName \
      --query "[].{hostName: defaultHostName, state: state}" \
      --output table
    

    Anote el nombre de host del servicio en ejecución. Debe tener un aspecto similar al siguiente, pero el identificador del número aleatorio será distinto. Necesitará el nombre de host web más adelante cuando compruebe el trabajo.

    HostName                                        State
    ----------------------------------------------  -------
    tailspin-space-game-web-4692.azurewebsites.net  Running
    
  7. Ejecute el comando az functionapp list siguiente para mostrar el nombre de host y el estado de la instancia de Azure Functions.

    az functionapp list \
      --resource-group $rgName \
      --query "[].{hostName: defaultHostName, state: state}" \
      --output table
    

    Anote el nombre de host del servicio en ejecución. Debe tener un aspecto similar al siguiente, pero el identificador del número aleatorio será distinto. Necesitará el nombre de host de tabla de clasificación más adelante cuando compruebe el trabajo.

    HostName                                                State
    ------------------------------------------------------  -------
    tailspin-space-game-leaderboard-4692.azurewebsites.net  Running
    
  8. Copie estos dos nombres de host en una ubicación a la que después pueda acceder fácilmente.

  9. Como paso opcional, abra un explorador y escriba un nombre de host para comprobar que se está ejecutando. Aparece la página principal predeterminada.

Importante

La página Limpiar el entorno de Azure DevOps de este módulo contiene pasos de limpieza importantes. La limpieza sirve para evitar que se nos cobre por los recursos de Azure después de completar este módulo. No olvide realizar los pasos de limpieza, aunque no haya completado este módulo.

Creación de variables de canalización en Azure Pipelines

En el módulo Crear una canalización de versión en Azure Pipelines, agregamos una variable a la canalización que almacena el nombre de la aplicación web en App Service. Aquí hará lo mismo. Además, agregará el nombre de la aplicación de tabla de clasificación para la instancia de Azure Functions.

Podríamos codificar estos nombres de forma rígida en la configuración de la canalización, pero si los definimos como variables, la configuración será más reutilizable. Además, si los nombres de las instancias cambian, podremos actualizar las variables y desencadenar la canalización sin modificar la configuración.

Vamos a agregar un grupo de variables al proyecto.

  1. El proyecto Space Game - web - Azure Functions debe estar abierto en Azure DevOps.

  2. En el menú, seleccione Canalizaciones y, a continuación, en Canalizaciones seleccione Biblioteca. Aparece el panel Biblioteca.

    Captura de pantalla del menú de Azure DevOps que resalta la opción Biblioteca en Canalizaciones.

  3. En la barra de comandos o en el centro del panel, seleccione Grupo de variables. Aparece la página Nuevo grupo de variables.

  4. Como nombre del grupo de variables, escriba Release.

  5. En Variables, seleccione Agregar.

  6. Para el nombre de la variable, escriba WebAppName. Como valor, escriba el nombre de la instancia de App Service que se creó para la aplicación web, como tailspin-space-game-web-4692.

    Importante

    Establezca el nombre de la instancia de App Service, no su nombre de host completo. En este ejercicio, por ejemplo, tailspin-space-game-web-4692 es la parte de la instancia del nombre de host tailspin-space-game-web-4692.azurewebsites.net.

  7. Agregue otra variable denominada LeaderboardAppName con el valor de la instancia de tabla de clasificación, por ejemplo tailspin-space-game-leaderboard-4692.

  8. Agregue una última variable denominada ResourceGroupName con el valor tailspin-space-game-rg.

  9. En la barra de comandos, cerca de la parte superior de la página, seleccione Guardar para guardar el grupo de variables Release en la canalización.

    Las variables del grupo correspondiente deben ser similares:

    Captura de pantalla de Azure Pipelines en la que se muestra el grupo de variables. El grupo contiene tres variables.

Crear el entorno de pico

En módulos anteriores, creó entornos de desarrollo, prueba y ensayo. Aquí hará lo mismo. Esta vez, creará un entorno denominado pico.

  1. En el menú de Azure DevOps, en Canalizaciones, seleccione Entornos.

    Captura de pantalla de Azure Pipelines en la que se muestra la ubicación de la opción de menú Entornos.

  2. Seleccione Crear entorno. Aparece el panel Nuevo entorno.

  3. En Nombre, escriba pico.

  4. Deje los campos restantes con sus valores predeterminados.

  5. Seleccione Crear.

Creación de una conexión de servicio

Aquí creará una conexión de servicio que permita a Azure Pipelines acceder a la suscripción de Azure. Azure Pipelines usa esta conexión de servicio para implementar el sitio web en App Service. Creó una conexión de servicio similar en el módulo anterior.

Importante

Asegúrese de que ha iniciado sesión tanto en Azure Portal como en Azure DevOps con la misma cuenta de Microsoft.

  1. En Azure DevOps, en el proyecto de canalización Space Game - web - Azure Functions, bajo el menú, seleccione Configuración del proyecto. Aparece el panel Detalles del proyecto.

  2. En el menú, en Canalizaciones, seleccione Conexiones de servicio.

  3. En la página Conexiones de servicio, seleccione Nueva conexión de servicio y, a continuación, en el panel Nueva conexión de servicio, seleccione Azure Resource Manager y después Siguiente.

  4. En el panel Nueva conexión de servicio, seleccione Entidad de servicio (automática) y, a continuación, elija Siguiente.

  5. En el panel Nueva conexión de servicio de Azure, seleccione o especifique la configuración siguiente:

    Campo Value
    Nivel de ámbito Suscripción
    Subscription Seleccione su suscripción a Azure.
    Grupo de recursos tailspin-space-game-rg
    Nombre de conexión de servicio Resource Manager - Tailspin - Space Game

    Durante el proceso, es posible que se le pida que inicie sesión en la cuenta Microsoft.

  6. Asegúrese de tener seleccionada la opción Conceder permiso de acceso a todas las canalizaciones.

  7. Seleccione Guardar.

Azure DevOps realiza una conexión de prueba para comprobar que se puede conectar a la suscripción a Azure. Si Azure DevOps no se puede conectar, tiene la oportunidad de iniciar sesión una segunda vez.