Agentes do Conjunto de Dimensionamento de Máquina Virtual do Azure

Serviços de DevOps do Azure

Os agentes do Conjunto de Escala de Máquina Virtual do Azure, doravante referidos como agentes de conjunto de escala, são uma forma de agentes auto-hospedados que podem ser dimensionados automaticamente para atender às suas demandas. Esta elasticidade reduz a sua necessidade de executar agentes dedicados constantemente. Ao contrário dos agentes alojados pela Microsoft, tem flexibilidade quanto ao tamanho e a imagem das máquinas em que os agentes funcionam.

Se você gosta de agentes hospedados pela Microsoft, mas está limitado pelo que eles oferecem, considere agentes de conjunto de escala. Seguem-se alguns exemplos:

  • Você precisa de mais memória, mais processador, mais armazenamento ou mais E/S do que o que oferecemos em agentes nativos hospedados pela Microsoft.
  • Precisa de uma VM NCv2 com conjuntos de instruções específicos para machine learning.
  • Precisa de fazer a implementação num Serviço de Aplicações do Azure privado numa VNET privada sem conectividade de entrada.
  • Você precisa abrir o firewall corporativo para endereços IP específicos para que os agentes hospedados pela Microsoft possam se comunicar com seus servidores.
  • Você precisa restringir a conectividade de rede das máquinas do agente e permitir que elas alcancem apenas sites aprovados.
  • Não pode obter agentes suficientes da Microsoft para dar resposta às suas necessidades.
  • Os trabalhos excedem o tempo limite dos agentes alojados pela Microsoft.
  • Não é possível particionar trabalhos paralelos hospedados pela Microsoft para projetos individuais ou equipes em sua organização.
  • Quer executar vários trabalhos consecutivos num agente para tirar partido das caches incrementais de pacotes de origem e ao nível do computador.
  • Você deseja executar a configuração ou o aquecimento do cache antes que um agente comece a aceitar trabalhos.

Se você gosta de agentes auto-hospedados, mas deseja simplificar o gerenciamento deles, você deve considerar agentes de conjunto de escala. Seguem-se alguns exemplos:

  • Não quer executar agentes dedicados 24 horas por dia. Quer desaprovisionar computadores de agentes que não estão a ser utilizados para executar trabalhos.
  • Executa código não fidedigno no pipeline e quer recriar a imagem dos computadores de agentes após cada trabalho.
  • Você deseja simplificar a atualização periódica da imagem base para seus agentes.

Nota

  • Não é possível executar agentes Mac usando conjuntos de escala. Você só pode executar agentes Windows ou Linux dessa maneira.

  • O uso de pools de agentes VMSS para Serviços de DevOps do Azure só tem suporte para a nuvem Pública do Azure (serviço global). Atualmente, os pools de agentes VMSS não suportam outras ofertas de nuvem nacionais.

  • Você não deve associar um VMSS a vários pools.

Crie o conjunto de dimensionamento

Em preparação para criar agentes de conjunto de escala, você deve primeiro criar um Conjunto de Escala de Máquina Virtual no portal do Azure. Você deve criar o Conjunto de Escala de Máquina Virtual de uma determinada maneira para que o Azure Pipelines possa gerenciá-lo. Em particular, você deve desabilitaro dimensionamento automático para que os Pipelines do Azure possam determinar como executar o dimensionamento com base no número de trabalhos de pipeline de entrada. Recomendamos que você use as etapas a seguir para criar o conjunto de escalas.

No exemplo a seguir, um novo grupo de recursos e um Conjunto de Escala de Máquina Virtual são criados com o Azure Cloud Shell usando a imagem de VM do UbuntuLTS.

Nota

Neste exemplo, a imagem da VM do UbuntuLTS é usada para o conjunto de escala. Se você precisar de uma imagem de VM personalizada como base para seu agente, crie a imagem personalizada antes de criar o conjunto de escalas, seguindo as etapas em Criar um conjunto de escala com imagem, software ou tamanho de disco personalizados.

  1. Navegue até Azure Cloud Shell em https://shell.azure.com/.

  2. Execute o seguinte comando para verificar sua assinatura padrão do Azure.

    az account list -o table
    

    Se a assinatura desejada não estiver listada como padrão, selecione a assinatura desejada.

    az account set -s <your subscription ID>
    
  3. Crie um grupo de recursos para seu Conjunto de Dimensionamento de Máquina Virtual.

    az group create \
    --location westus \
    --name vmssagents
    
  4. Crie um Conjunto de Escala de Máquina Virtual no seu grupo de recursos. Neste exemplo, a imagem da VM do Ubuntu2204 é especificada.

    az vmss create \
    --name vmssagentspool \
    --resource-group vmssagents \
    --image Ubuntu2204 \
    --vm-sku Standard_D2_v4 \
    --storage-sku StandardSSD_LRS \
    --authentication-type SSH \
    --generate-ssh-keys \
    --instance-count 2 \
    --disable-overprovision \
    --upgrade-policy-mode manual \
    --single-placement-group false \
    --platform-fault-domain-count 1 \
    --load-balancer "" \
    --orchestration-mode Uniform
    

    Nota

    O Azure Pipelines não oferece suporte ao superprovisionamento de conjuntos de escala e ao dimensionamento automático. Certifique-se de que ambas as funcionalidades estão desativadas para o seu conjunto de escalas.

    Como o Azure Pipelines gerencia o conjunto de escala, as seguintes configurações são necessárias ou recomendadas:

    • --disable-overprovision -Necessário
    • --upgrade-policy-mode manual -Necessário
    • --load-balancer "" - O Azure Pipelines não requer um balanceador de carga para rotear trabalhos para os agentes no pool de agentes do conjunto de escalas, mas configurar um balanceador de carga é uma maneira de obter um endereço IP para seus agentes de conjunto de escala que você pode usar para regras de firewall. Outra opção para obter um endereço IP para seus agentes de conjunto de escala é criar seu conjunto de escala usando as --public-ip-address opções. Para obter mais informações sobre como configurar seu conjunto de escala com um balanceador de carga ou endereço IP público, consulte a documentação Conjuntos de escala de máquina virtual e az vmss create.
    • --instance-count 2 - Essa configuração não é necessária, mas oferece a oportunidade de verificar se o conjunto de dimensionamento está totalmente funcional antes de criar um pool de agentes. A criação das duas VMs pode levar vários minutos. Mais tarde, quando você cria o pool de agentes, o Azure Pipelines exclui essas duas VMs e cria novas.

    Importante

    Se você executar esse script usando a CLI do Azure no Windows, deverá colocar a "" entrada --load-balancer "" entre aspas simples como esta: --load-balancer '""'

    Se o tamanho da sua VM suportar discos de SO efémero, os seguintes parâmetros para ativar discos de SO efémero, são opcionais, mas recomendados para melhorar os tempos de reimagem da máquina virtual.

    • --ephemeral-os-disk true
    • --os-disk-caching readonly

    Importante

    Os discos de SO efêmeros não são suportados em todos os tamanhos de VM. Para obter uma lista de tamanhos de VM suportados, consulte Discos de SO efêmeros para VMs do Azure.

    Selecione qualquer imagem do Linux ou do Windows - do Azure Marketplace ou da sua própria imagem personalizada - para criar o conjunto de escalas. Não pré-instale o agente do Azure Pipelines na imagem. O Azure Pipelines instala automaticamente o agente à medida que provisiona novas máquinas virtuais. No exemplo acima, usamos uma imagem simples UbuntuLTS . Para obter instruções sobre como criar e usar uma imagem personalizada, consulte Perguntas frequentes.

    Selecione qualquer SKU de VM e SKU de armazenamento.

    Nota

    Considerações de licenciamento nos limitam a distribuir imagens hospedadas pela Microsoft. Não podemos fornecer essas imagens para você usar em seus agentes de conjunto de escala. Mas, os scripts que usamos para gerar essas imagens são de código aberto. Você é livre para usar esses scripts e criar suas próprias imagens personalizadas.

  5. Depois de criar seu conjunto de escalas, navegue até seu conjunto de escalas no portal do Azure e verifique as seguintes configurações:

    • Política de atualização - Manual

      Verify upgrade policy.

      Você também pode verificar essa configuração executando o seguinte comando da CLI do Azure.

      az vmss show --resource-group vmssagents --name vmssagentspool --output table
      
      Name            ResourceGroup    Location    Zones    Capacity    Overprovision    UpgradePolicy
      --------------  ---------------  ----------  -------  ----------  ---------------  ---------------
      vmssagentspool  vmssagents       westus               0           False            Manual
      
    • Dimensionamento - Balança manual

      Verify manual scale policy.

Importante

O Azure Pipelines não oferece suporte à proteção de instância. Certifique-se de que as proteções de instância de ações de dimensionamento e conjunto de escala estão desativadas.

Modos de orquestração

Os conjuntos de dimensionamento de máquina virtual do Azure podem ser configurados com dois modos de orquestração: Uniforme e Flexível. O suporte do Azure Pipelines para o modo de orquestração uniforme está disponível em geral para todos os clientes.

O modo de orquestração flexível permite que o Azure Pipelines enfileire várias operações de conjunto de escala em paralelo. O suporte do Azure Pipelines para orquestração flexível está disponível mediante solicitação e está sujeito a avaliação. Os padrões de uso dos clientes precisam indicar um benefício significativo disso. Esses clientes têm conjuntos de grande escala, não reutilizam agentes para vários trabalhos, executam vários trabalhos de curta duração em paralelo e usam exclusivamente discos efêmeros em suas VMs. Se você quiser usar esse recurso, entre em contato com nossa equipe de suporte.

Criar o pool de agentes do conjunto de dimensionamento

  1. Navegue até as configurações do Projeto de DevOps do Azure, selecione Pools de agentes em Pipelines e selecione Adicionar pool para criar um novo pool de agentes.

    Create agent pool.

    Importante

    Você pode criar seu pool de conjuntos de escala em Configurações do Project ou Configurações da organização, mas ao excluir um pool de conjuntos de escalas, deverá excluí-lo das configurações da organização, e não das configurações do Project.

  2. Selecione Conjunto de Escala de Máquina Virtual do Azure para o tipo de pool. Selecione a assinatura do Azure que contém o conjunto de escala, escolha Autorizar e escolha o Conjunto de Escala de Máquina Virtual desejado dessa assinatura. Se você tiver uma conexão de serviço existente, poderá escolhê-la na lista em vez da assinatura.

    Importante

    • Para configurar um pool de agentes de conjunto de escalas, você deve ter permissões de Proprietário ou Administrador de Acesso de Usuário na assinatura selecionada. Se você tiver uma dessas permissões, mas receber um erro ao escolher Autorizar, consulte Solução de problemas.

    • A única conexão de serviço atualmente suportada é uma conexão de serviço do Azure Resource Manager (ARM) baseada em uma chave principal de serviço. As conexões de serviço ARM baseadas em uma credencial de certificado ou em uma Identidade Gerenciada falharão. Ao tentar listar os conjuntos de dimensionamento existentes em sua assinatura, você verá um erro como este:

      Invalid Service Endpoint with Id <guid> and Scope <guid>

  3. Escolha o Conjunto de Escala de Máquina Virtual desejado a partir dessa assinatura.

  4. Especifique um nome para o pool de agentes.

  5. Configure as opções que se seguem:

    • Desmontar máquinas virtuais automaticamente após cada uso - Uma nova instância de VM é usada para cada trabalho. A VM fica offline depois de executar um trabalho e é recriada antes de pegar outro trabalho.
    • Salvar um agente não íntegro para investigação - Se deseja salvar VMs de agente não íntegras para solução de problemas em vez de excluí-las.
    • Número máximo de máquinas virtuais no conjunto de escala - o Azure Pipelines dimensionará automaticamente o número de agentes, mas não excederá esse limite.
    • Número de agentes a serem mantidos em espera - o Azure Pipelines será dimensionado automaticamente no número de agentes, mas garantirá que sempre haja muitos agentes disponíveis para executar novos trabalhos. Se você definir Número de agentes para manter em espera como 0, por exemplo, para conservar o custo de um baixo volume de trabalhos, o Azure Pipelines iniciará uma VM somente quando ela tiver um trabalho.
    • Atraso em minutos antes de excluir agentes ociosos em excesso - Para levar em conta a variabilidade na carga de compilação ao longo do dia, o Azure Pipelines aguardará a duração especificada antes de excluir um agente ocioso em excesso.
    • Configurar VMs para executar testes interativos (somente sistema operacional Windows Server) - Os agentes do Windows podem ser configurados para serem executados sem elevação com logon automático e com interface do usuário interativa ou podem ser configurados para serem executados com permissões elevadas. Marque esta caixa para executar sem elevação com a interface do usuário interativa. Em ambos os casos, o usuário do agente é membro do grupo Administradores.
  6. Quando as configurações estiverem definidas, escolha Criar para criar o pool de agentes.

Usar o pool de agentes do conjunto de dimensionamento

O uso de um pool de agentes de conjunto de escala é semelhante a qualquer outro pool de agentes. Você pode usá-lo em pipelines clássicos de compilação, liberação ou YAML. As permissões de usuário, permissões de pipeline, aprovações e outras verificações funcionam da mesma forma que em qualquer outro pool de agentes. Para obter mais informações, consulte Pools de agentes.

Importante

É preciso ter cuidado ao fazer alterações diretamente na escala definida no portal do Azure.

  • Você não pode alterar muitas das definições de configuração do conjunto de escala no portal do Azure. O Azure Pipelines atualiza a configuração do conjunto de escalas. Quaisquer alterações manuais feitas no conjunto de dimensionamento podem interferir na operação do Azure Pipelines.
  • Não pode mudar o nome nem eliminar um conjunto de dimensionamento sem eliminar primeiro o conjunto de conjuntos de dimensionamento no Azure Pipelines.

Como o Azure Pipelines gere o conjunto de dimensionamento

Depois que o pool de agentes do conjunto de escala é criado, o Azure Pipelines dimensiona automaticamente as máquinas do agente.

O Azure Pipelines mostra o estado dos agentes no pool e nas máquinas virtuais na escala definida a cada 5 minutos. A decisão de aumentar ou diminuir a escala é baseada no número de agentes ociosos naquele momento. Um agente é considerado ocioso se estiver online e não estiver executando um trabalho de pipeline. O Azure Pipelines executa uma operação de expansão se uma das seguintes condições for satisfeita:

  • O número de agentes ociosos fica abaixo do número de agentes em espera especificados
  • Não há agentes ociosos para atender trabalhos de pipeline aguardando na fila

Se uma dessas condições for atendida, o Azure Pipelines aumentará o número de VMs. A expansão é feita em incrementos de uma determinada porcentagem do tamanho máximo do pool. Aguarde 20 minutos para que as máquinas sejam criadas para cada etapa.

O Azure Pipelines é dimensionado nos agentes quando o número de agentes ociosos excede a contagem de espera por mais de 30 minutos (configurável usando Atraso em minutos antes de excluir o excesso de agentes ociosos).

Para colocar tudo isso em um exemplo, considere um pool de agentes de conjunto de escala configurado com dois agentes em espera e quatro agentes máximos. Digamos que você queira derrubar a VM após cada uso. Além disso, vamos supor que não há VMs para começar no conjunto de escalas.

  • Como o número de agentes ociosos é 0 e o número de agentes ociosos está abaixo da contagem de espera de 2, o Azure Pipelines se expande e adiciona duas VMs ao conjunto de escala. Assim que esses agentes entrarem em funcionamento, haverá dois agentes ociosos.

  • Digamos que um trabalho de pipeline chega e é alocado a um dos agentes.

  • Neste momento, o número de agentes ociosos é 1, e isso é menor do que a contagem de espera de 2. Assim, o Azure Pipelines expande e adiciona mais 2 VMs (o tamanho de incremento usado neste exemplo). Neste momento, a piscina tem três agentes ociosos e um agente ocupado.

  • Digamos que o trabalho no primeiro agente está concluído. O Azure Pipelines coloca esse agente offline para criar uma nova imagem dessa máquina. Depois de alguns minutos, ele volta com uma nova imagem. Neste momento, teremos quatro agentes ociosos.

  • Se nenhum outro trabalho chegar por 30 minutos (configurável usando Atraso em minutos antes de excluir agentes ociosos em excesso), o Azure Pipelines determinará que há mais agentes ociosos do que o necessário. Então, ele escala no pool para dois agentes.

Durante essa operação, o objetivo do Azure Pipelines é alcançar o número desejado de agentes ociosos em espera. Os conjuntos são aumentados e reduzidos horizontalmente de forma lenta. Ao longo de um dia, o pool será dimensionado à medida que os pedidos são enfileirados pela manhã e dimensionado à medida que a carga diminui à noite. Você pode observar mais agentes ociosos do que deseja em vários momentos, o que é esperado à medida que o Azure Pipelines converge gradualmente para as restrições especificadas.

Nota

Pode levar uma hora ou mais para que o Azure Pipelines seja dimensionado ou dimensionado nas máquinas virtuais. Os Pipelines do Azure serão dimensionados em etapas, monitorarão as operações em busca de erros e reagirão excluindo máquinas inutilizáveis e criando novas máquinas ao longo do tempo. Esta operação corretiva pode levar mais de uma hora.

Para alcançar a máxima estabilidade, as operações de conjunto de escala são feitas sequencialmente. Por exemplo, se o pool precisar ser dimensionado e também houver máquinas não íntegras para excluir, o Azure Pipelines primeiro dimensionará o pool. Depois que o pool tiver sido dimensionado para atingir o número desejado de agentes ociosos em espera, as máquinas não íntegras serão excluídas, dependendo da configuração Salvar um agente não íntegro para investigação . Para obter mais informações, consulte Agentes não íntegros.

Devido ao tamanho da amostragem de 5 minutos, é possível que todos os agentes possam estar executando pipelines por um curto período de tempo e não ocorra dimensionamento.

Personalizar a Configuração do Agente de Pipeline

Você pode personalizar a configuração do Agente de Pipelines do Azure definindo variáveis de ambiente na imagem personalizada do sistema operacional para seu conjunto de escala. Por exemplo, o diretório de trabalho do agente do conjunto de escala assume como padrão C:\a para Windows e /agent/_work para Linux. Se você quiser alterar o diretório de trabalho, defina uma variável de ambiente chamada VSTS_AGENT_INPUT_WORK com o diretório de trabalho desejado. Mais informações podem ser encontradas na documentação de Configuração autônoma do Pipelines Agent. Alguns exemplos incluem:

  • VSTS_AGENT_INPUT_WORK
  • VSTS_AGENT_INPUT_PROXYURL
  • VSTS_AGENT_INPUT_PROXYUSERNAME
  • VSTS_AGENT_INPUT_PROXYPASSWORD

Importante

Deve-se ter cuidado ao personalizar o agente de Pipelines. Algumas configurações entrarão em conflito com outras configurações necessárias, fazendo com que o agente não consiga se registrar e a VM seja excluída. Essas configurações não devem ser definidas ou alteradas:

  • VSTS_AGENT_INPUT_URL
  • VSTS_AGENT_INPUT_AUTH
  • VSTS_AGENT_INPUT_TOKEN
  • VSTS_AGENT_INPUT_USERNAME
  • VSTS_AGENT_INPUT_PASSWORD
  • VSTS_AGENT_INPUT_POOL
  • VSTS_AGENT_INPUT_AGENT
  • VSTS_AGENT_INPUT_RUNASSERVICE
  • ... e qualquer coisa relacionada a Grupos de Implantação.

Personalizando a inicialização da máquina virtual por meio da extensão de script personalizado

Os usuários podem querer executar scripts de inicialização em suas máquinas de agente de conjunto de escala antes que essas máquinas comecem a executar trabalhos de pipeline. Alguns casos de uso comuns para scripts de inicialização incluem a instalação de software, o aquecimento de caches ou a busca de repositórios. Você pode executar scripts de inicialização instalando a Extensão de Script Personalizada para Windows ou a Extensão de Script Personalizada para Linux.

Essa extensão será executada em cada máquina virtual no conjunto de escalas imediatamente após sua criação ou reimagem. A extensão de script personalizada será executada antes que a extensão do agente do Azure Pipelines seja executada.

Aqui está um exemplo para criar uma extensão de script personalizada para Linux.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScript \
--version 2.0 \
--publisher Microsoft.Azure.Extensions \
--settings '{ \"fileUris\":[\"https://<myGitHubRepoUrl>/myScript.sh\"], \"commandToExecute\": \"bash ./myScript.sh /myArgs \" }'

Aqui está um exemplo para criar uma extensão de script personalizada para Windows.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScriptExtension \
--version 1.9 \
--publisher Microsoft.Compute \
--settings '{ \"FileUris\":[\"https://<myGitHubRepoUrl>/myscript.ps1\"], \"commandToExecute\": \"Powershell.exe -ExecutionPolicy Unrestricted -File myscript.ps1 -myargs 0 \" }'

Importante

Os scripts executados na Extensão de Script Personalizada devem retornar com o código de saída 0 para que a VM conclua o processo de criação da VM. Se a extensão de script personalizada lançar uma exceção ou retornar um código de saída diferente de zero, a extensão de Pipeline do Azure não será executada e a VM não se registrará no pool de agentes do Azure DevOps.

Pode acontecer que sua extensão seja executada antes que todos os recursos da VM sejam provisionados, caso em que você verá um erro semelhante a "falha na instalação de pré-requisitos básicos". Você pode corrigir isso adicionando um sleep comando no início do script, por exemplo, sleep 30.

Ciclo de vida de um agente de conjunto de escala

Aqui está o fluxo de operações para um Agente de Conjunto de Escala de Máquina Virtual do Azure Pipelines

  1. O trabalho de dimensionamento do Pool de Agentes do Conjunto de Escala do Azure DevOps determina que o pool tem poucos agentes ociosos e precisa ser dimensionado. O Azure Pipelines faz uma chamada para os Conjuntos de Escala do Azure para aumentar a capacidade do conjunto de escalas.

  2. O Conjunto de Escala do Azure começa a criar as novas máquinas virtuais. Depois que as máquinas virtuais estiverem em execução, os Conjuntos de Escala do Azure executarão sequencialmente todas as extensões de VM instaladas.

  3. Se a Extensão de Script Personalizado estiver instalada, ela será executada antes da extensão do Agente de Pipelines do Azure. Se a Extensão de Script Personalizada retornar um código de saída diferente de zero, o processo de criação da VM será anulado e será excluído.

  4. A extensão do Agente de Pipelines do Azure é executada. Esta extensão transfere a versão mais recente do Agente de Pipelines do Azure juntamente com a versão mais recente do script de configuração. Os scripts de configuração podem ser encontrados em URLs com os seguintes formatos:

    • Linux: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Linux/<script_version>/enableagent.sh, por exemplo, versão 15
    • Windows: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Windows/<script_version>/enableagent.ps1, por exemplo, versão 17
  5. O script de configuração cria um usuário local chamado AzDevOps se o sistema operacional for Windows Server ou Linux. Para o sistema operacional cliente Windows 10, o agente é executado como LocalSystem. Em seguida, o script descompacta, instala e configura o Agente de Pipelines do Azure. Como parte da configuração, o agente se registra no pool de agentes do Azure DevOps e aparece na lista do pool de agentes no estado Offline.

  6. Para a maioria dos cenários, o script de configuração inicia imediatamente o agente para ser executado como o usuário AzDevOpslocal. O agente fica online e está pronto para executar trabalhos de pipeline.

    Se o pool estiver configurado para interface do usuário interativa, a máquina virtual será reinicializada depois que o agente for configurado. Após a reinicialização, o usuário local efetua login automaticamente e o agente de pipelines é iniciado. Em seguida, o agente fica online e pronto para executar trabalhos de pipeline.

Criar um conjunto de dimensionamento com imagem, software ou tamanho de disco personalizados

Se você quiser apenas criar um conjunto de escala com o disco padrão do sistema operacional de 128 GB usando uma imagem do Azure disponível publicamente, pule diretamente para a etapa 10 e use o nome da imagem pública (UbuntuLTS, Win2019DataCenter, etc.) para criar o conjunto de escala. Caso contrário, siga estas etapas para personalizar sua imagem de VM.

  1. Crie uma VM com a imagem desejada do sistema operacional e, opcionalmente, expanda o tamanho do disco do sistema operacional de 128 GB para <myDiskSizeGb>.

    • Se começar com uma Imagem do Azure disponível, por exemplo <myBaseImage> = (Win2019DataCenter, UbuntuLTS):

      az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myBaseImage> --os-disk-size-gb <myDiskSize>  --admin-username myUserName --admin-password myPassword
      
    • Se começar com um VHD generalizado:

      1. Primeiro, crie a VM com um disco não gerenciado do tamanho desejado e, em seguida, converta em um disco gerenciado:

        az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myVhdUrl> --os-type windows --os-disk-size-gb <myDiskSizeGb> --use-unmanaged-disk --admin-username <myUserName> --admin-password <myPassword> --storage-account <myVhdStorageAccount>
        
      2. Desligue a VM

        az vm stop --resource-group <myResourceGroup> --name <MyVM>
        
      3. Desalocar a VM

        az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
        
      4. Converter em um disco gerenciado

        az vm convert --resource-group <myResourceGroup> --name <MyVM>
        
      5. Reinicie a VM

        az vm start --resource-group <myResourceGroup> --name <MyVM>
        
  2. Área de Trabalho Remota (ou SSH) para o endereço IP público da VM para personalizar a imagem. Talvez seja necessário abrir portas no firewall para desbloquear as portas RDP (3389) ou SSH (22).

    1. Windows - Se <MyDiskSizeGb> for maior que 128 GB, estenda o tamanho do disco do sistema operacional para preencher o tamanho do disco especificado pelo <MyDiskSizeGb>.

      Abra a ferramenta DiskPart como administrador e execute estes comandos DiskPart:

      1. list volume (para ver os volumes)
      2. select volume 2 (depende de qual volume é a unidade do sistema operacional)
      3. extend size 72000 (para estender a unidade em 72 GB, de 128 GB para 200 GB)
  3. Instale qualquer software adicional desejado na VM.

  4. Para personalizar as permissões do usuário do agente de pipeline, você pode criar um usuário chamado AzDevOps, e conceder a esse usuário as permissões necessárias. Esse usuário será criado pelo script de inicialização do agente scaleset, caso ainda não exista.

  5. Reinicialize a VM quando terminar as personalizações

  6. Generalize a VM.

    • Windows - A partir de uma janela da consola de administração:
      C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown
      
    • Linux:
      sudo waagent -deprovision+user -force
      

    Importante

    Aguarde até que a VM termine a generalização e o desligamento. Não prossiga até que a VM tenha parado. Aguarde 60 minutos.

  7. Desalocar a VM

    az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
    
  8. Marcar a VM como Generalizada

    az vm generalize --resource-group <myResourceGroup> --name <MyVM>
    
  9. Crie uma imagem de VM com base na imagem generalizada. Ao executar essas etapas para atualizar uma imagem de conjunto de escala existente, anote a URL do ID da imagem na saída.

    az image create  --resource-group <myResourceGroup> --name <MyImage> --source <MyVM>
    
  10. Criar o conjunto de escala com base na imagem personalizada da VM

    az vmss create --resource-group <myResourceGroup> --name <myScaleSet> --image <MyImage> --admin-username <myUsername> --admin-password <myPassword> --instance-count 2 --disable-overprovision --upgrade-policy-mode manual --load-balancer '""'
    
  11. Verifique se ambas as VMs criadas no conjunto de escala ficam online, têm nomes diferentes e atingem o estado Bem-sucedido

Agora você está pronto para criar um pool de agentes usando esse conjunto de escalas.

Atualizar um conjunto de escala existente com uma nova imagem personalizada

Para atualizar a imagem em um conjunto de escalas existente, siga as etapas na seção anterior Criar um conjunto de escalas com imagem, software ou tamanho de disco personalizado até a etapa para gerar a az image create imagem personalizada do sistema operacional. Anote a URL da propriedade ID que é saída do az image create comando. Em seguida, atualize o conjunto de escalas com a nova imagem, conforme mostrado no exemplo a seguir. Depois que a imagem do conjunto de escala for atualizada, todas as VMs futuras no conjunto de escalas serão criadas com a nova imagem.

az vmss update --resource-group <myResourceGroup> --name <myScaleSet> --set virtualMachineProfile.storageProfile.imageReference.id=<id url>

Sistemas Operativos Suportados

Os agentes do conjunto de escala atualmente suportam Ubuntu Linux, Windows Server/DataCenter 2016/2019 e cliente Windows 10.

Problemas conhecidos

  • As distribuições Debian ou RedHat Linux não são suportadas. Apenas o Ubuntu é.
  • O cliente Windows 10 não suporta a execução do agente de pipeline como um usuário local e, portanto, o agente não pode interagir com a interface do usuário. Em vez disso, o agente será executado como Serviço Local.

Solução de problemas

Navegue até as configurações do Projeto de DevOps do Azure, selecione Pools de agentes em Pipelines e selecione seu pool de agentes. Selecione a guia Diagnóstico.

A guia Diagnóstico mostra todas as ações executadas pelo Azure DevOps para Criar, Excluir ou Recriar imagens de VMs em seu Conjunto de Escala do Azure. O diagnóstico também registra quaisquer erros encontrados ao tentar executar essas ações. Revise os erros para garantir que seu conjunto de dimensionamento tenha recursos suficientes para dimensionar. Se sua assinatura do Azure tiver atingido o limite de recursos em VMs, núcleos de CPU, discos ou endereços IP, esses erros aparecerão aqui.

Agentes insalubres

Quando os agentes ou máquinas virtuais falham ao iniciar, não se conectam ao Azure DevOps ou ficam offline inesperadamente, o Azure DevOps registra as falhas na guia Diagnóstico do Pool de Agentes e tenta excluir a máquina virtual associada. Configuração de rede, personalização de imagem e reinicializações pendentes podem causar esses problemas. Conectar-se à VM para depurar e coletar logs pode ajudar na investigação.

Se você quiser que o Azure DevOps salve uma VM de agente não íntegra para investigação e não a exclua automaticamente quando detetar o estado não íntegro, navegue até as configurações do Projeto de DevOps do Azure, selecione Pools de agentes em Pipelines e selecione seu pool de agentes. Escolha Configurações, selecione a opção Salvar um agente não íntegro para investigação e escolha Salvar.

Save unhealthy agent setting.

Agora, quando um agente não íntegro é detetado no conjunto de escala, o Azure DevOps salva esse agente e a máquina virtual associada. O agente salvo ficará visível na guia Diagnóstico da interface do usuário do pool de agentes. Navegue até as configurações do Projeto de DevOps do Azure, selecione Pools de agentes em Pipelines, selecione seu pool de agentes, escolha Diagnóstico e anote o nome do agente.

Saved agents card.

Encontre a máquina virtual associada no seu Conjunto de Escala de Máquina Virtual do Azure através do portal do Azure, na lista Instâncias .

Azure portal Virtual Machine Scale Set instances.

Selecione a instância, escolha Connect e execute sua investigação.

Connect to virtual machine instance.

Para excluir o agente salvo quando terminar a investigação, navegue até as configurações do Projeto de DevOps do Azure, selecione Pools de agentes em Pipelines e selecione seu pool de agentes. Escolha a guia Diagnóstico. Encontre o agente no cartão Agentes salvos para investigação e escolha Excluir. Isso remove o agente do pool e exclui a máquina virtual associada.

Saved agents card delete button.

FAQ

Onde posso encontrar as imagens usadas para agentes hospedados pela Microsoft?

Considerações de licenciamento nos limitam a distribuir imagens hospedadas pela Microsoft. Não podemos fornecer essas imagens para você usar em seus agentes de conjunto de escala. Mas, os scripts que usamos para gerar essas imagens são de código aberto. Você é livre para usar esses scripts e criar suas próprias imagens personalizadas.

Como configuro agentes de conjunto de escala para executar testes de interface do usuário?

Crie um conjunto de escala com um sistema operacional Windows Server e, ao criar o pool de agentes, selecione a opção "Configurar VMs para executar testes interativos".

Como posso excluir agentes?

' Navegue até as configurações do Projeto de DevOps do Azure, selecione Pools de agentes em Pipelines e selecione seu pool de agentes. Selecione a guia Agentes. Clique no botão de alternância 'Ativado' para desativar o agente. O agente desativado concluirá o pipeline que está sendo executado no momento e não receberá trabalho adicional. Dentro de alguns minutos após concluir seu trabalho de pipeline atual, o agente será excluído.

Posso configurar o pool de agentes do conjunto de escala para ter zero agentes em espera?

Sim, se você definir Número de agentes para manter em espera como zero, por exemplo, para conservar o custo de um baixo volume de trabalhos, o Azure Pipelines iniciará uma VM somente quando ela tiver um trabalho.

Quanto custam os agentes dos conjuntos de dimensionamento?

O preço dos agentes de conjunto de escala é semelhante ao de outros agentes auto-hospedados. Você fornece a infraestrutura na qual executar o software do agente e os trabalhos e paga pelo número desejado de trabalhos que podem ser executados simultaneamente comprando trabalhos paralelos.

Para agentes de conjunto de escala, a infraestrutura para executar o software e os trabalhos do agente é Conjuntos de Escala de Máquina Virtual do Azure e o preço é descrito em Preços de Conjuntos de Escala de Máquina Virtual.

Para obter informações sobre a compra de trabalhos paralelos, veja Configurar e pagar trabalhos paralelos.

Quais são alguns problemas comuns e suas soluções?

Você observa mais agentes ociosos do que o desejado em vários momentos

Para compreender melhor por que motivo isto acontece, veja Como o Azure Pipelines gere o conjunto de dimensionamento. Ao longo da operação de dimensionamento, o objetivo do Azure Pipeline é atingir o número desejado de agentes inativos no modo de espera. Os conjuntos são aumentados e reduzidos horizontalmente de forma lenta. Ao longo de um dia, o conjunto é aumentado horizontalmente à medida que os pedidos são colocados em fila de espera de manhã e reduzido horizontalmente à medida que a carga diminui à noite. Este é um comportamento esperado, uma vez que o Azure Pipelines converge gradualmente para as restrições que especificar.

O aumento de escala do VMSS não está acontecendo no intervalo esperado de cinco minutos

O trabalho de dimensionamento é executado a cada cinco minutos, mas se apenas uma operação for processada, poderá observar que o aumento vertical não está a ocorrer dentro de cinco minutos. Atualmente, isto acontece por predefinição.

O Conjunto de Escala de VM Linux do Azure DevOps frequentemente falha ao iniciar o pipeline

O primeiro local a consultar quando ocorrem problemas com agentes dos conjuntos de dimensionamento é o separador Diagnósticos no conjunto de agentes.

Além disso, considere guardar a VM em mau estado de funcionamento para fins de depuração. Para obter mais informações, veja Agentes em Mau Estado de Funcionamento.

Os agentes salvos estão lá, a menos que você os exclua. Se o agente não ficar online em 10 minutos, ele será marcado como não íntegro e, se possível, salvo. Apenas uma VM é mantida em um estado salvo. Se o agente ficar offline inesperadamente (devido a uma reinicialização da VM ou algo acontecendo com a imagem), ele não será salvo para investigação.

Somente as VMs para as quais os agentes falham ao iniciar são salvas. Se uma VM tiver um estado de falha durante a criação, ela não será salva. Nesse caso, a mensagem na guia Diagnóstico é "excluindo máquina não íntegra" em vez de "falha ao iniciar".

Você marca a opção para derrubar automaticamente as máquinas virtuais após cada uso para o pool de agentes, mas vê que as VMs não estão recriando imagens como deveriam e apenas pegam novos trabalhos à medida que são enfileiradas

A opção para remover a VM após cada compilação só funcionará para imagens do Windows Server e do Linux suportadas. Não é suportada para imagens do cliente do Windows.

O VMSS mostra o agente como offline se a VM for reiniciada

Mostrar os agentes como offline se a VM for reiniciada é o comportamento esperado. O serviço do agente é executado apenas no contexto systemd. No entanto, se o computador reiniciar por algum motivo, é considerado uma VM em mau estado de funcionamento e eliminado. Para obter mais informações, veja Agentes em Mau Estado de Funcionamento.

Quando os agentes ou máquinas virtuais falham ao iniciar, não conseguem se conectar ao Azure DevOps ou ficam offline inesperadamente, o Azure DevOps registra as falhas na guia Diagnóstico do Pool de Agentes e tenta excluir a máquina virtual associada. Configuração de rede, personalização de imagem e reinicializações pendentes podem causar esses problemas. Para evitar o problema, desative a atualização de software na imagem. Também se pode ligar à VM para depurar e recolher registos para ajudar a investigar o problema.

Você pode ver várias tags como _AzureDevOpsElasticPoolTimeStamp para VMSS no gerenciamento de custos

Quando o conjunto é criado, é adicionada uma etiqueta ao conjunto de dimensionamento para o marcar como em utilização (para evitar que dois conjuntos utilizem o mesmo conjunto de dimensionamento) e é adicionada outra etiqueta para o carimbo de data/hora que é atualizada sempre que o trabalho de configuração é executado (a cada duas horas).

Não é possível criar um novo pool de agentes de conjunto de escala e receber uma mensagem de erro informando que já existe um pool com o mesmo nome

Você pode receber uma mensagem de erro como This virtual machine scale set is already in use by pool <pool name> porque a tag ainda existe na escala definida mesmo depois de ser excluída. Quando um pool de agentes é excluído, você tenta excluir a tag do conjunto de escalas, mas essa é uma tentativa de melhor esforço e desiste após três tentativas. Além disso, pode haver um intervalo máximo de duas horas, no qual um Conjunto de Escala de Máquina Virtual que não é usado por nenhum pool de agentes não pode ser atribuído a um novo. A correção consiste em aguardar a passagem desse intervalo de tempo ou eliminar manualmente a etiqueta do conjunto de dimensionamento no portal do Azure. Ao ver o conjunto de dimensionamento no portal do Azure, selecione a ligação Etiquetas à esquerda e elimine a etiqueta com o nome _AzureDevOpsElasticPool.

O trabalho de manutenção do VMSS não está sendo executado em agentes ou obtendo logs

O trabalho de manutenção é executado uma vez a cada 24 horas. É possível que as VMs estejam a ser preenchidas antes deste período. Considere aumentar o tamanho do disco na VM e adicionar um script no pipeline para eliminar os conteúdos.

Se você especificar AzDevOps como administrador principal em seu script para VMSS, poderá observar problemas com as configurações do agente em instâncias de conjunto de escala

Se você especificar AzDevOps como administrador principal em seu script para o Conjunto de Dimensionamento de Máquina Virtual, poderá observar problemas com as configurações do agente em instâncias de conjunto de escala (a senha do usuário será alterada se já existir).

Esse problema ocorre porque scripts de extensão de agente tentam criar o usuário AzDevOps e alterar sua senha.

Nota

Não há problema em criar o usuário e conceder-lhe permissões extras, mas ele não deve ser o administrador principal, e nada deve depender da senha, pois a senha será alterada. Para evitar o problema, escolha um usuário diferente como administrador principal ao criar o conjunto de escalas, em vez de AzDevOps.

A instalação da extensão do agente falha nas instâncias do conjunto de escala devido à segurança da rede e às configurações de firewall

A extensão tem de conseguir transferir os ficheiros do agente de compilação a partir de https://vstsagentpackage.azureedge.net/agent e o agente de compilação tem de conseguir registar-se nos Serviços de DevOps do Azure. Confirme que este URL e os IPs e URLs relacionados com os Serviços de DevOps do Azure estão abertos na instância. Para saber que IPs e URLs precisam de ser desbloqueados na firewall, veja Endereços IP e URLs de domínio permitidos.

Por que meu script de configuração do agente de conjunto de escala chama Add-MpPreference e configura o Windows Defender no agente?

Para melhorar o desempenho e a confiabilidade, os scripts de configuração chamam Add-MpPreference com um ExclusionPath contendo C:\ e , que desabilita a verificação agendada e D:\em tempo real do Windows Defender em busca de arquivos nessas pastas no agente. Para alterar o comportamento padrão, defina uma variável de ambiente chamada ELASTIC_POOLS_SKIP_DEFENDER_EXCLUSIONtrue.

Quero aumentar o tamanho da minha piscina. O que devo levar em consideração?

Antes de aumentar o tamanho do pool, verifique se a Rede Virtual do Azure configurada para o pool de Conjuntos de Dimensionamento de Máquina Virtual tem um intervalo de espaço de endereçamento grande o suficiente para acomodar todos os seus novos agentes. Se não, você pode receber um erro semelhante a Falha ao aumentar a capacidade. A sub-rede azure-devops-agent-pool-fabrikam-fiber com prefixo de endereço 12.123.45.224/28 não tem capacidade suficiente para 5 endereços IP.