Ejercicio: Creación de un agente de compilación que se ejecuta en Azure
En esta unidad, para configurar un agente de compilación que pueda usarse en Microsoft Azure Pipelines, se usará una máquina virtual que se ejecute en Microsoft Azure. Proporcionamos una máquina virtual que se puede usar a lo largo de este módulo.
En esta unidad, aprenderá a:
- Crear una máquina virtual Ubuntu en Azure que actúe como agente de compilación.
- Crear un grupo de agentes en Microsoft Azure DevOps
- Crear un token de acceso para autenticar al agente con Azure DevOps.
- Configurar el agente con el software necesario para compilar el sitio web Space Game
- Configurar el agente para que se conecte a Azure DevOps a fin de recibir trabajos de compilación.
- Confirmar que el agente está conectado a Azure DevOps y listo para recibir trabajos de compilación
Hay muchas maneras de crear una máquina virtual en Azure. En esta unidad, creará una máquina virtual Ubuntu con un terminal interactivo llamado Cloud Shell.
Para configurar la máquina virtual, hay varias opciones:
- En el caso de una máquina virtual Linux, puede conectarse directamente a través de SSH y configurar el sistema de forma interactiva.
- Para automatizar la implementación, use una plantilla de ARM, Bicep u otra herramienta de aprovisionamiento automatizado.
- Si necesita implementar muchos agentes de compilación, puede crear una imagen de máquina virtual que tenga todo el software preinstalado.
Configurar un sistema de forma interactiva es una buena manera de empezar, ya que ayuda a comprender el proceso y lo que hace falta. Por simplificar el proceso, conéctese a la máquina virtual Ubuntu a través de SSH y ejecute scripts de shell para configurar el agente de compilación.
Nota:
Si no sabe cómo conectarse o cómo configurar un sistema Linux, simplemente siga los pasos. Puede aplicar los mismos conceptos a los agentes de compilación de Windows.
Creación de una máquina virtual Linux
En esta sección, creará una máquina virtual que ejecuta Ubuntu 20.04 y que actuará como agente de compilación. La máquina virtual aún no está configurada para actuar como agente de compilación ni tiene ninguna de las herramientas necesarias para compilar la aplicación web Space Game. Eso se configurará en breve.
Acceso a Cloud Shell a través de Azure Portal
Importante
Para completar los ejercicios de este módulo, necesita una suscripción de Azure propia.
Abra Azure Portal e inicie sesión.
En el menú, seleccione Cloud Shell. Cuando se le solicite, seleccione la experiencia de Bash.
Nota:
Cloud Shell necesita un recurso de almacenamiento de Azure para conservar los archivos que se creen en Cloud Shell. La primera vez que abra Cloud Shell, 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. A cada recurso de Azure, incluidas las máquinas virtuales de Azure, se le asigna una región.
Para facilitar la ejecución de los comandos, empezaremos seleccionando una región predeterminada. Después de especificar la región predeterminada, los comandos posteriores la usan a menos que especifique otra.
En Cloud Shell, ejecute el siguiente comando
az account list-locations
para enumerar las regiones que están disponibles en la suscripción de Azure:az account list-locations \ --query "[].{Name: name, DisplayName: displayName}" \ --output table
En la columna
Name
de la salida, seleccione una región cercana. Por ejemplo, elijaeastasia
owestus2
.Ejecute
az configure
para establecer la región predeterminada. Reemplace<REGION>
por el nombre de la región que seleccionó:az configure --defaults location=<REGION>
En este ejemplo se establece
westus2
como la región predeterminada:az configure --defaults location=westus2
Crear un grupo de recursos
Cree un grupo de recursos para contener los recursos usados en este módulo de formación.
Ejecute el siguiente comando
az group create
para crear un grupo de recursos denominado tailspin-space-game-rg:az group create --name tailspin-space-game-rg
Creación de la máquina virtual
Para crear la máquina virtual, ejecute el siguiente comando az vm create
:
az vm create \
--name MyLinuxAgent \
--resource-group tailspin-space-game-rg \
--image canonical:0001-com-ubuntu-server-focal:20_04-lts:latest \
--size Standard_DS2_v2 \
--admin-username azureuser \
--generate-ssh-keys
La máquina virtual tardará unos minutos en aparecer.
Standard_DS2_v2 especifica el tamaño de la máquina virtual. El tamaño de una máquina virtual define la velocidad de su procesador, la cantidad de memoria, la cantidad inicial de almacenamiento y el ancho de banda de red esperado. Es el mismo tamaño que proporcionan los agentes hospedados por Microsoft. En la práctica, puede elegir un tamaño que proporcione más potencia de proceso o más funcionalidades, como procesamiento de gráficos.
El argumento --resource-group
especifica el grupo de recursos que contiene todo lo que hay que crear. Un grupo de recursos permite administrar todas las máquinas virtuales, los discos, las interfaces de red y otros elementos que componen la solución como una unidad.
Crear el grupo de agentes
Recuerde que un grupo de agentes organiza agentes de compilación. En esta sección, creará el grupo de agentes en Azure DevOps. Más adelante se va a especificar el nombre del grupo de agentes al configurar el agente, de modo que se pueda registrar en el grupo correcto.
En Azure DevOps, vaya al proyecto Space Game - web - Agent.
Seleccione Configuración del proyecto.
En Canalizaciones, seleccione Grupos de agentes.
Seleccione Agregar grupo.
En la ventana Agregar grupo:
- En Pool to link (Grupo que vincular), seleccione Nuevo.
- En Pool type (Tipo de grupo), seleccione Autohospedado.
- En Nombre, escriba MyAgentPool.
En la práctica, elegiría un nombre más acorde para el grupo.
Seleccione Crear. El nuevo grupo de agentes aparece en la lista.
Crear un token de acceso personal
Para que el agente de compilación se registre en Azure DevOps, necesita una manera de autenticarse.
A tal efecto, cree un token de acceso personal. Los token de acceso personal, o PAT, son una alternativa a las contraseñas. Un PAT se puede usar para autenticarse en servicios como Azure DevOps.
Importante
Al igual que con una contraseña, asegúrese de conservar el token de acceso en un lugar seguro. En esta sección, almacenará el token de acceso como una variable de entorno para que no aparezca en el script de shell.
En Azure DevOps, abra la configuración de perfil y seleccione Token de acceso personal.
Seleccione Nuevo token.
Escriba un nombre para el token, como Agente de compilación.
En Ámbitos, seleccione el vínculo Mostrar todos los ámbitos de la parte inferior.
Busque Grupos de agentes y, después, seleccione Leer y administrar.
Seleccione Crear.
Copie el token en un lugar seguro.
En breve se va a usar el token para habilitar el agente de compilación a fin de autenticar el acceso a Azure Pipelines.
Conexión a la máquina virtual
En esta sección, se conectará a la máquina virtual Linux a través de SSH para poder configurarla.
Recuerde que no se puede iniciar sesión de forma interactiva en un agente hospedado por Microsoft. Dado que un agente de compilación privado es propio, se puede iniciar sesión y configurarlo del modo que se quiera.
La capacidad de conectar con el agente de compilación permite configurarlo con las herramientas necesarias para compilar el software. También permite solucionar problemas mientras se compila la configuración de la canalización.
Para obtener la dirección IP de la máquina virtual, ejecute
az vm show
en Cloud Shell:IPADDRESS=$(az vm show \ --name MyLinuxAgent \ --resource-group tailspin-space-game-rg \ --show-details \ --query [publicIps] \ --output tsv)
Este comando almacena la dirección IP en una variable de Bash denominada
IPADDRESS
.Imprima la dirección IP de la máquina virtual en la consola:
echo $IPADDRESS
Cree una conexión SSH a la máquina virtual. En lugar de $IPADDRESS, escriba la dirección IP que recibió en el paso anterior. En la solicitud, indique yes para continuar con la conexión.
ssh azureuser@$IPADDRESS
Ahora está conectado a la máquina virtual a través de SSH.
Este comando funciona porque se ha proporcionado la opción
--generate-ssh-keys
al ejecutaraz vm create
anteriormente. Esta opción crea un par de claves SSH que permiten iniciar sesión en la máquina virtual.
Instalar herramientas de compilación en la máquina virtual
En esta sección, configurará la máquina virtual con las herramientas necesarias para compilar el sitio web Space Game.
Recuerde que el proceso de compilación existente usa estas herramientas:
- SDK de .NET, que se usa para compilar la aplicación
- Node.js, que se usa para realizar tareas de compilación
- npm, el administrador de paquetes de Node.js.
- gulp, un paquete de Node.js que se usa para minimizar archivos JavaScript y CSS
Estas son las herramientas principales que se necesitan el proceso de compilación. Para instalarlas, deberá descargar y ejecutar un script de shell desde GitHub.
Nota:
El proceso de compilación usa otras herramientas, como node-sass para convertir archivos Sass (.scss) en archivos CSS (.css). Pero Node.js instala estas herramientas cuando se ejecuta la compilación.
Vamos a empezar actualizando el administrador de paquetes de Ubuntu, denominado apt. Con esta acción se recupera la información más reciente de los repositorios de paquetes, y suele ser lo primero que se hace al configurar un nuevo sistema Ubuntu.
En la conexión SSH, actualice la memoria caché del administrador de paquetes apt:
sudo apt-get update
sudo
ejecuta el comando con privilegios de administrador o raíz.Ejecute el siguiente comando para descargar un script de shell denominado build-tools.sh
curl
desde GitHub:curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-tools.sh > build-tools.sh
Imprima el script en el terminal de forma que pueda examinar el contenido:
cat build-tools.sh
Se muestra el siguiente resultado:
#!/bin/bash set -e # Select a default .NET version if one is not specified if [ -z "$DOTNET_VERSION" ]; then DOTNET_VERSION=6.0.300 fi # Add the Node.js PPA so that we can install the latest version curl -sL https://deb.nodesource.com/setup_16.x | bash - # Install Node.js and jq apt-get install -y nodejs apt-get install -y jq # Install gulp npm install -g gulp # Change ownership of the .npm directory to the sudo (non-root) user chown -R $SUDO_USER ~/.npm # Install .NET as the sudo (non-root) user sudo -i -u $SUDO_USER bash << EOF curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin -c LTS -v $DOTNET_VERSION EOF
El script instala Node.js, npm, gulp y .NET Core.
Al establecer la variable de entorno
DOTNET_VERSION
, se puede especificar la versión de .NET que se va a instalar. Si esta variable no se establece, el script instala la versión que use la configuración de compilación existente. Con fines de aprendizaje, no vamos a establecer esta variable, sino que dejaremos que el script use la versión predeterminada.Haga ejecutable el script y ejecútelo:
chmod u+x build-tools.sh sudo ./build-tools.sh
El script tarda unos minutos en ejecutarse.
En la práctica, ahora se podrían ejecutar comandos para comprobar que cada componente de software se ha instalado correctamente.
Instalar el software del agente en la máquina virtual
Es hora de instalar el software del agente en la máquina virtual. Este software permite que la máquina virtual actúe como agente de compilación y reciba trabajos de compilación de Azure Pipelines.
El proceso de registro busca software instalado antes de registrar el agente en Azure Pipelines. Por lo tanto, es importante configurar el agente después de instalar el resto del software. En la práctica, puede registrar al agente una segunda vez si necesita instalar software adicional.
La documentación explica cómo configurar agentes de Linux autohospedados y agentes de macOS y Windows de forma manual. Hay que ejecutar un script de shell para configurar el agente de forma muy similar a cuando se configuraron las herramientas de compilación en la sección anterior.
Importante
El script que se va a ejecutar lo hace meramente con fines de aprendizaje. En la práctica, primero hay que saber cómo afecta a todo el sistema cada uno de los comandos de los scripts que compilemos. Al término de este módulo, le recomendaremos documentación donde se describen de forma más completa las posibles opciones.
Ejecute el siguiente comando para descargar un script de shell denominado build-agent.sh
curl
desde GitHub:curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-agent.sh > build-agent.sh
Imprima el script en el terminal de forma que pueda examinar el contenido:
cat build-agent.sh
Se muestra el siguiente resultado:
#!/bin/bash set -e # Select a default agent version if one is not specified if [ -z "$AZP_AGENT_VERSION" ]; then AZP_AGENT_VERSION=2.187.2 fi # Verify Azure Pipelines token is set if [ -z "$AZP_TOKEN" ]; then echo 1>&2 "error: missing AZP_TOKEN environment variable" exit 1 fi # Verify Azure DevOps URL is set if [ -z "$AZP_URL" ]; then echo 1>&2 "error: missing AZP_URL environment variable" exit 1 fi # If a working directory was specified, create that directory if [ -n "$AZP_WORK" ]; then mkdir -p "$AZP_WORK" fi # Create the Downloads directory under the user's home directory if [ -n "$HOME/Downloads" ]; then mkdir -p "$HOME/Downloads" fi # Download the agent package curl https://vstsagentpackage.azureedge.net/agent/$AZP_AGENT_VERSION/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz > $HOME/Downloads/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz # Create the working directory for the agent service to run jobs under if [ -n "$AZP_WORK" ]; then mkdir -p "$AZP_WORK" fi # Create a working directory to extract the agent package to mkdir -p $HOME/azp/agent # Move to the working directory cd $HOME/azp/agent # Extract the agent package to the working directory tar zxvf $HOME/Downloads/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz # Install the agent software ./bin/installdependencies.sh # Configure the agent as the sudo (non-root) user chown $SUDO_USER $HOME/azp/agent sudo -u $SUDO_USER ./config.sh --unattended \ --agent "${AZP_AGENT_NAME:-$(hostname)}" \ --url "$AZP_URL" \ --auth PAT \ --token "$AZP_TOKEN" \ --pool "${AZP_POOL:-Default}" \ --work "${AZP_WORK:-_work}" \ --replace \ --acceptTeeEula # Install and start the agent service ./svc.sh install ./svc.sh start
No es necesario saber cómo funciona cada línea, pero este es un breve resumen de lo que hace este script:
- Descarga el paquete del agente como un archivo .tar.gz y extrae su contenido.
- En los archivos extraídos, el script hace lo siguiente:
- Ejecuta un script de shell denominado installdependencies.sh para instalar el software del agente.
- Ejecuta un script de shell denominado config.sh para configurar el agente y registrarlo en Azure Pipelines.
- Ejecuta un script de shell denominado svc.sh para instalar e iniciar el servicio del agente.
El script usa variables de entorno para que pueda proporcionar detalles sobre la organización de Azure DevOps. A continuación, se muestra un resumen:
Variable de Bash Descripción Valor predeterminado AZP_AGENT_VERSION
Versión del software del agente que se va a instalar Versión que se ha usado por última vez para probar este módulo AZP_URL
Dirección URL de la organización de Azure DevOps (Ninguna) AZP_TOKEN
Token de acceso personal (Ninguna) AZP_AGENT_NAME
Nombre del agente tal como aparece en Azure DevOps Nombre de host del sistema AZP_POOL
Nombre del grupo de agentes Predeterminado AZP_WORK
Directorio de trabajo del agente para realizar tareas de compilación _work Si el script no proporciona un valor predeterminado para una variable que no se ha establecido, imprime un mensaje de error y sale inmediatamente.
En los siguientes pasos, establezca estas variables de entorno:
AZP_AGENT_VERSION
AZP_URL
AZP_TOKEN
AZP_AGENT_NAME
AZP_POOL
Por ahora, se recomienda dejar las demás variables sin establecer.
Establezca la variable de entorno
AZP_AGENT_NAME
para especificar el nombre del agente. Se recomienda MyLinuxAgent.export AZP_AGENT_NAME=MyLinuxAgent
Establezca la variable de entorno
AZP_URL
para especificar la dirección URL de la organización de Azure DevOps.Reemplace <organization> por la suya. Puede obtener el nombre en la pestaña del explorador que muestra Azure DevOps.
export AZP_URL=https://dev.azure.com/organization
Establezca la variable de entorno
AZP_TOKEN
para especificar el token de acceso personal (el valor de token largo que copió anteriormente en esta unidad).Reemplace <token> por el token.
export AZP_TOKEN=token
Establezca la variable de entorno
AZP_POOL
para especificar el nombre del grupo de agentes. Anteriormente ha creado un grupo denominado MyAgentPool.export AZP_POOL=MyAgentPool
Establezca la variable de entorno
AZP_AGENT_VERSION
para especificar la versión más reciente del agente.export AZP_AGENT_VERSION=$(curl -s https://api.github.com/repos/microsoft/azure-pipelines-agent/releases | jq -r '.[0].tag_name' | cut -d "v" -f 2)
Una canalización de YAML en una máquina Linux debe usar la versión más reciente del agente, aun cuando se encuentre en versión preliminar. El software del agente se actualiza constantemente, por lo que se debe aplicar
curl
a la información de versión en el repositorio de GitHub. El comando usajq
para leer la versión más reciente de la cadena JSON que se devuelve.Imprima la versión del agente en la consola. Si lo desea, consulte aquí para asegurarse de que es la versión más reciente.
echo $AZP_AGENT_VERSION
Haga ejecutable el script y, a continuación, ejecútelo:
chmod u+x build-agent.sh sudo -E ./build-agent.sh
sudo
permite que el script se ejecute como usuario raíz. El argumento-E
conserva las variables de entorno actuales, incluidas las que ha establecido, para que estén disponibles para el script.Mientras el script se ejecuta, se ve cómo el agente se conecta a Azure DevOps, cómo se ha agregado al grupo de agentes y cómo se ha probado la conexión del agente.
Comprobación de que el agente se está ejecutando
Ha instalado correctamente las herramientas de compilación y el software del agente en la máquina virtual. Como paso de verificación, vaya a Azure DevOps y compruebe que el agente está en el grupo de agentes.
En Azure DevOps, vaya al proyecto Space Game - web - Agent.
Seleccione Configuración del proyecto.
En Canalizaciones, seleccione Grupos de agentes.
Seleccione MyAgentPool.
Seleccione la pestaña Agentes.
Como se puede ver, el agente está en línea y listo para aceptar trabajos de compilación.
Sugerencia
Si el agente de compilación se muestra como Sin conexión, espere unos momentos y luego actualice la página.
Seleccione el agente, MyLinuxAgent.
Seleccione la pestaña Funcionalidades.
Durante la configuración, el proceso de configuración ha examinado el agente de compilación en busca de capacidades de herramientas. Se ve que
npm
aparece como una de ellas. Recuerde que en la configuración de compilación original se ha especificado quenpm
debe estar instalado en el agente.Al especificar qué grupo de agentes se va a usar, puede incluir cualquiera de estas entradas en la sección
demands
. Al incluirlas, se garantiza que Azure Pipelines va a elegir un agente de compilación con el software necesario para compilar la aplicación. También permite crear grupos de agentes con varias configuraciones de software. Azure Pipelines seleccionará la configuración correcta en función de los requisitos existentes.