Exercício – Criar um agente de build em execução no Azure
Nesta unidade, para configurar um agente de build que pode ser usado no Microsoft Azure Pipelines, você usará uma máquina virtual executada no Microsoft Azure. Nós fornecemos uma máquina virtual que você pode usar ao longo deste módulo.
Nesta unidade, você:
- Criar uma máquina virtual do Ubuntu no Azure para servir como o agente de build.
- Criar um pool de agentes no Microsoft Azure DevOps.
- Criar um token de acesso para autenticar seu agente com o Azure DevOps.
- Configurar o agente com o software necessário para criar o site do Space Game.
- Configurar o agente para se conectar ao Azure DevOps para que ele possa receber trabalhos de build.
- Verificar se o agente está conectado ao Azure DevOps e pronto para receber trabalhos de build.
Há muitas maneiras de criar uma máquina virtual no Azure. Nesta unidade, você criará uma máquina virtual do Ubuntu usando um terminal interativo chamado Cloud Shell.
Para configurar sua VM, há várias opções:
- Para uma VM do Linux, você pode se conectar diretamente por SSH e configurar o sistema interativamente.
- Você pode automatizar a implantação usando um modelo do ARM, o Bicep ou outra ferramenta de provisionamento automatizado.
- Se você precisar implantar vários agentes de build, poderá criar uma imagem de VM que tem todo o software pré-instalado.
Configurar um sistema de forma interativa é uma boa maneira de começar porque ajuda a compreender o processo e o que é necessário. Para simplificar o processo, conecte-se à VM do Ubuntu por SSH e execute scripts do shell para configurar o agente de build.
Observação
Se você não está familiarizado com a conexão ou a configuração de sistemas Linux, basta acompanhar. Você pode aplicar os mesmos conceitos a agentes de build do Windows.
Criar uma máquina virtual do Linux
Nesta seção, você criará uma VM que executa o Ubuntu 20.04 e que servirá como o agente de build. A VM ainda não está configurada para ser um agente de build nem para ter as ferramentas necessárias para compilar o aplicativo Web Space Game. Você configurará isso em breve.
Ativar o Cloud Shell por meio do portal do Azure
Importante
Para concluir os exercícios neste módulo, você precisará de sua assinatura do Azure.
Acesse o portal do Azure e entre.
No menu, selecione Cloud Shell. Quando solicitado, escolha a experiência do Bash.
Observação
O Cloud Shell exige um recurso de Armazenamento do Azure para manter todos os arquivos que você criar no Cloud Shell. Ao abrir o Cloud Shell pela primeira vez, você precisará criar um grupo de recursos, uma conta de armazenamento e um compartilhamento de arquivo do Azure. Essa configuração é usada automaticamente para todas as sessões futuras do Cloud Shell.
Selecionar uma região do Azure
Uma região é um ou mais datacenters do Azure em uma localização geográfica. Leste dos EUA, Oeste dos EUA e Norte da Europa são exemplos de regiões. Todos os recursos do Azure, incluindo uma VM do Azure, são atribuídos a uma região.
Para facilitar a execução dos comandos, comece selecionando uma região padrão. Depois que você especificar a região padrão, os comandos posteriores usarão essa região, a menos que você especifique outra.
No Cloud Shell, para listar as regiões disponíveis em sua assinatura do Azure, execute o seguinte comando
az account list-locations
:az account list-locations \ --query "[].{Name: name, DisplayName: displayName}" \ --output table
Na coluna
Name
na saída, selecione uma região perto de você. Por exemplo, escolhaeastasia
ouwestus2
.Execute
az configure
para definir a região padrão. Substitua<REGION>
pelo nome da região selecionada:az configure --defaults location=<REGION>
Este exemplo define
westus2
como a região padrão:az configure --defaults location=westus2
Criar um grupo de recursos
Crie um grupo de recursos para conter os recursos usados neste módulo de treinamento.
Para criar um grupo de recursos chamado tailspin-space-game-rg, execute o seguinte comando
az group create
:az group create --name tailspin-space-game-rg
Criar a VM
Para criar sua VM, execute o seguinte 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
A sua VM levará alguns minutos para ser exibida.
Standard_DS2_v2 especifica o tamanho da VM. O tamanho de uma VM define a velocidade do processador, a quantidade de memória, a quantidade inicial de armazenamento e a largura de banda da rede esperada. Esse é o mesmo tamanho fornecido pelos agentes hospedados pela Microsoft. Na prática, você pode escolher um tamanho que fornece mais capacidade de computação ou funcionalidades adicionais, como o processamento de gráficos.
O argumento --resource-group
especifica o grupo de recursos que contém tudo o que precisamos criar. Um grupo de recursos permite a você administrar todas as VMs, discos, adaptadores de rede e outros elementos que compõem a solução como uma unidade.
Criar o pool de agentes
Lembre-se de que um pool de agentes organiza os agentes de build. Nesta seção, você criará o pool de agentes no Azure DevOps. Posteriormente, você especificará o nome do pool de agentes ao configurar seu agente para que ele possa se registrar para o pool correto.
No Azure DevOps, navegue até o projeto Space Game – Web – Agente.
Selecione Project settings.
Em Pipelines, selecione Pools de agente.
Selecione Add pool.
Na janela Adicionar pool:
- Em Pool to link, selecione New.
- Em Pool type, selecione Self-hosted.
- Em Name, insira MyAgentPool.
Na prática, você escolheria um nome mais descritivo para o pool.
Selecione Criar. Você verá o novo pool de agentes aparecer na lista.
Criar um token de acesso pessoal
Para o agente de build se registrar com o Azure DevOps, você precisa de um modo para que ele se autentique.
Para fazer isso, você pode criar um token de acesso pessoal. Um token de acesso pessoal — ou PAT — é uma alternativa a uma senha. Você pode usar o PAT para autenticar com serviços como o Azure DevOps.
Importante
Como faria ao usar uma senha, mantenha sempre o token de acesso em um local seguro. Nesta seção, você armazenará seu token de acesso como uma variável de ambiente para que ele não apareça no script do shell.
No Azure DevOps, abra as configurações de perfil e selecione tokens de acesso pessoal.
Selecione New Token.
Insira um nome para o token, como Agente de build.
Em Escopos, selecione o link Mostrar todos os escopos na parte inferior.
Procure Pools de agentes e selecione Ler e gerenciar.
Selecione Criar.
Copie o token para um local seguro.
Em breve, você usará seu token para habilitar o agente de build para autenticar o acesso ao Azure Pipelines.
Conectar-se à sua VM
Nesta seção, você se conectará à VM do Linux por SSH para poder configurá-la.
Lembre-se de que você não pode entrar interativamente em um agente hospedado pela Microsoft. Como um agente de build privado é seu, você pode entrar e configurá-lo como desejar.
A capacidade de se conectar ao agente de build permite que você o configure com as ferramentas necessárias para criar o seu software. Ele também permite que você solucione problemas à medida que cria sua configuração de pipeline.
Para obter o endereço IP da VM, execute
az vm show
no Cloud Shell:IPADDRESS=$(az vm show \ --name MyLinuxAgent \ --resource-group tailspin-space-game-rg \ --show-details \ --query [publicIps] \ --output tsv)
Este comando armazena o endereço IP em uma variável de Bash chamada
IPADDRESS
.Imprima o endereço IP da VM no console:
echo $IPADDRESS
Crie uma conexão SSH para a VM. No lugar de $IPADDRESS, insira o endereço IP recebido na etapa anterior. No prompt, insira sim para prosseguir com a conexão.
ssh azureuser@$IPADDRESS
Agora você está conectado à sua VM por SSH.
Esse comando funciona porque você forneceu a opção
--generate-ssh-keys
quando executouaz vm create
anteriormente. Essa opção cria um par de chaves SSH para que você possa entrar na VM.
Instalar ferramentas de build na sua VM
Nesta seção, você configurará sua VM com as ferramentas necessárias para criar o site do Space Game.
Lembre-se de que o processo de build existente usa essas ferramentas:
- SDK do .NET, que é usado para criar o aplicativo
- Node.js, que é usado para executar tarefas de build
- npm, o gerenciador de pacotes do Node.js
- gulp, um pacote de Node.js que é usado para minificar arquivos JavaScript e CSS
Essas são as principais ferramentas que o processo de build requer. Para instalá-los, você deverá baixar e executar um script de shell do GitHub.
Observação
O processo de build usa outras ferramentas, como node-sass para converter arquivos do Sass (.scss) em arquivos CSS (.css). No entanto, o Node.js instala essas ferramentas quando o build é executado.
Vamos começar atualizando o gerenciador de pacotes do Ubuntu, chamado apt. Essa ação busca as informações mais recentes dos repositórios de pacote e é geralmente a primeira coisa que você faz ao configurar um novo sistema Ubuntu.
Em sua conexão SSH, atualize o cache do gerenciador de pacotes apt:
sudo apt-get update
sudo
executa o comando com privilégios de administrador ou raiz.Execute o seguinte comando
curl
para baixar um script de shell chamado build-tools.sh do GitHub:curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-tools.sh > build-tools.sh
Imprima o script no terminal para que você possa examinar o seu conteúdo:
cat build-tools.sh
O seguinte resultado é exibido:
#!/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
O script instala o Node.js, o npm, o gulp e o .NET Core.
Ao configurar a variável de ambiente
DOTNET_VERSION
, você pode especificar a versão do .NET a ser instalada. Se você não definir essa variável, o script instalará a versão que sua configuração de build existente usa. Para fins de aprendizado, você não define essa variável. Você permite que o script use a versão padrão.Torne o script executável e execute o script:
chmod u+x build-tools.sh sudo ./build-tools.sh
O script demora alguns minutos para ser executado.
Na prática, agora você pode executar comandos para verificar se cada componente de software foi instalado com êxito.
Instalar o software do agente na sua VM
Agora é hora de instalar o software do agente em sua VM. Esse software permite que a VM atue como um agente de build e receba trabalhos de build do Azure Pipelines.
O processo de registro verifica a existência de software instalado antes de registrar o agente com o Azure Pipelines. Portanto, é importante que você configure o agente depois de instalar todos os outros programas de software. Na prática, você poderá registrar o agente uma segunda vez se precisar instalar software adicional.
A documentação explica como configurar os agentes do Linux auto-hospedados, bem como os agentes do macOS e do Windows, manualmente. Você executa um script de shell para configurar seu agente da mesma forma que configurou ferramentas de build na seção anterior.
Importante
O script que você executará aqui é para fins de aprendizado. Na prática, você deve primeiro entender como cada comando nos scripts que você compila afeta o sistema em geral. Ao final do módulo, direcionaremos você para a documentação que descreve de maneira mais completa as suas opções.
Para baixar um script de shell chamado build-agent.sh do GitHub, execute o seguinte comando
curl
:curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-agent.sh > build-agent.sh
Imprima o script no terminal para que você possa examinar o seu conteúdo:
cat build-agent.sh
O seguinte resultado é exibido:
#!/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
Você não precisa entender o funcionamento de cada linha, mas aqui está um breve resumo do que esse script faz:
- Baixa o pacote do agente como um arquivo .tar.gz e extrai o conteúdo dele.
- Nos arquivos extraídos, o script:
- Executa um script de shell chamado installdependencies.sh para instalar o software do agente.
- Executa um script de shell chamado config.sh para configurar o agente e registrá-lo como Azure Pipelines.
- Executa um script de shell chamado svc.sh para instalar e iniciar o serviço do agente.
O script usa variáveis de ambiente para que você possa fornecer detalhes sobre a sua organização do Azure DevOps. Segue um resumo:
Variável de bash Descrição Padrão AZP_AGENT_VERSION
A versão do software o agente a ser instalada A versão que usamos por último nesse módulo AZP_URL
A URL da sua organização do Azure DevOps (Nenhuma) AZP_TOKEN
Seu token de acesso pessoal (Nenhuma) AZP_AGENT_NAME
Nome do seu agente conforme ele aparece no Azure DevOps Nome de host do sistema AZP_POOL
Nome do seu pool de agentes Padrão AZP_WORK
O diretório de trabalho para o agente realizar tarefas de build _work Se o script não fornecer um valor padrão para uma variável que não está definida, o script imprimirá uma mensagem de erro e fechará imediatamente.
Nas seguintes etapas, você definirá essas variáveis de ambiente:
AZP_AGENT_VERSION
AZP_URL
AZP_TOKEN
AZP_AGENT_NAME
AZP_POOL
Por enquanto, é recomendável que você deixe as outras variáveis indefinidas.
Defina a variável de ambiente
AZP_AGENT_NAME
para especificar o nome do seu agente. Recomendamos MyLinuxAgent.export AZP_AGENT_NAME=MyLinuxAgent
Defina a variável de ambiente
AZP_URL
para especificar a URL para sua organização do Azure DevOps.Substitua <organization> pela sua organização. Você pode obter o nome da guia do navegador que está mostrando o Azure DevOps.
export AZP_URL=https://dev.azure.com/organization
Defina a variável de ambiente
AZP_TOKEN
para especificar seu token de acesso pessoal (o valor de token longo copiado anteriormente nesta unidade).Substitua <token> pelo seu token.
export AZP_TOKEN=token
Defina a variável de ambiente
AZP_POOL
para especificar o nome do seu pool de agentes. Anteriormente, você criou um pool chamado MyAgentPool.export AZP_POOL=MyAgentPool
Defina a variável de ambiente
AZP_AGENT_VERSION
para especificar a versão mais recente do 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)
Um pipeline YAML em um computador Linux precisa estar usando a versão mais recente do agente, mesmo que seja de pré-lançamento. O software do agente é atualizado constantemente, de modo que você
curl
as informações de versão do repositório GitHub. O comando usajq
para ler a versão mais recente da cadeia de caracteres JSON retornada.Imprima a versão do agente no console. Opcionalmente, verifique se essa é a versão mais recente.
echo $AZP_AGENT_VERSION
Torne o script executável e execute-o:
chmod u+x build-agent.sh sudo -E ./build-agent.sh
sudo
permite que o script seja executado como o usuário raiz. O argumento-E
preserva as variáveis de ambiente atuais, incluindo as que você definir, para que fiquem disponíveis para o script.Conforme o script é executado, você vê o agente se conectar ao Azure DevOps, vê o agente adicionado ao pool de agentes e vê a conexão do agente ser testada.
Verificar se o agente está em execução
Você instalou com êxito as ferramentas de build e o software do agente em sua VM. Como uma etapa de verificação, acesse o Azure DevOps e veja o agente no pool de agentes.
No Azure DevOps, navegue até o projeto Space Game – Web – Agente.
Selecione Project settings.
Em Pipelines, selecione Pools de agente.
Selecione MyAgentPool.
Selecione a guia Agentes.
Você vê que o agente está online e pronto para aceitar trabalhos de build.
Dica
Se o agente de build aparecer como Offline, experimente aguardar um pouco e, depois, atualize a página.
Selecione seu agente, MyLinuxAgent.
Selecione a guia Funcionalidades.
Durante a instalação, o processo de configuração examinou seu agente de build quanto às funcionalidades da ferramenta. Você verá que
npm
está listado como uma delas. Lembre-se de que sua configuração de build original especificava quenpm
deve ser instalado no agente.Ao especificar qual pool de agentes usar, você pode incluir qualquer uma dessas entradas na seção
demands
. A inclusão delas garante que o Azure Pipelines escolha um agente de build que tem o software necessário para compilar o aplicativo. Ele também permite que você crie pools de agentes com várias configurações de software. O Azure Pipelines selecionará a configuração correta com base em seus requisitos.