Compartilhar via


Configurar a colocação em escala

Você pode gerenciar o desempenho e o custo da instância do Managed DevOps Pools definindo as configurações de dimensionamento. Para obter informações sobre preços e desempenho, consulte Gerenciar custo e desempenho.

Estado do agente

Você pode configurar pools como:

A configuração padrão de um pool é sem estado, o que pode ser alcançado usando o agente Fresh todas as vezes. Em alguns casos, as equipes podem querer reutilizar agentes para reutilizar os pacotes ou arquivos criados durante a execução anterior do pipeline. A carga de trabalho de build é um cenário comum em que as equipes desejam preservar o estado e reutilizar agentes. Você pode obter pools com estado por meio de pools de DevOps gerenciados enquanto os equilibra com as práticas recomendadas de segurança. Um agente pode ser reutilizado por um máximo de sete dias por padrão, mas você pode configurá-lo para ser reciclado mais cedo.

Observação

Os agentes de segurança recomendam que os usuários utilizem pools sem armazenamento interno como uma defesa contra ataques da cadeia de suprimentos. Use a configuração do estado do agente Fresh agent every time.

Pools sem estado

Quando você configura um agente sem estado, um novo agente é adquirido para cada trabalho. O agente é descartado após a conclusão do trabalho.

Para saber mais sobre o ciclo de vida de agentes sem estado e como eles são usados no Azure Pipelines, consulte a seção Ciclo de vida dos agentes e possíveis atrasos na alocação.

Captura de tela que mostra um agente sem estado.

Quando você define o estado do Agente para 'Agente novo a cada vez', um novo agente é adquirido para cada trabalho. O agente é descartado após a conclusão do trabalho.

Pools com estado

Captura de tela que mostra um agente stateful.

Quando você habilita a opção o mesmo agente pode ser usado por várias compilações (a configuração "kind": "stateful" nos modelos de recursos ou a configuração { "stateful": {...} } na CLI do Azure), os agentes no pool são com estado. Você pode configurar pools com estado usando as configurações a seguir:

  • O tempo máximo de vida útil para agentes em espera (maxAgentLifetime) configura a duração máxima que um agente em um pool stateful pode operar antes de ser desligado e descartado. O formato para O tempo máximo de vida dos agentes em espera é dd.hh:mm:ss. O valor padrão de Tempo máximo de vida útil para agentes em espera é definido como a duração máxima permitida de sete dias (7.00:00:00).

  • Período de Carência (gracePeriodTimeSpan) configura a quantidade de tempo que um agente em um pool com estado espera por novas tarefas antes de desligar após a conclusão de todas as tarefas atuais e enfileiradas. O formato do Período de Carência é dd.hh:mm:ss e o padrão é sem período de carência.

    Importante

    Se um trabalho estiver em execução quando o tempo máximo de vida dos agentes em espera expirar, o agente não será desligado até que o trabalho seja concluído, a menos que o trabalho dure mais de dois dias. Trabalhos individuais em Pools de DevOps Gerenciados podem ser executados por no máximo dois dias, mesmo que estejam em execução em um agente em espera com mais de dois dias configurados para o tempo máximo de vida útil para agentes em espera. Entre em contato com o suporte se o fluxo de trabalho exigir que você execute um único trabalho que leve mais de dois dias para ser concluído.

Os agentes em pools sem estado são desligados e descartados após cada trabalho. Os agentes em pools com estado continuarão em execução se alguma das seguintes condições for atendida:

  • Se outro trabalho for enfileirado quando o primeiro trabalho for concluído, o Managed DevOps Pools enviará o trabalho na fila para o agente que executou o primeiro trabalho em vez de desligá-lo.
  • Se houver um período de carência configurado para o pool, os agentes aguardarão novos trabalhos durante o intervalo especificado antes de se desligarem.
  • Se os agentes em espera estiverem habilitados e a imagem do agente atender aos critérios do período de provisionamento ativo, o agente continuará a ser executado e aguardará trabalhos.

Os agentes que estão em execução em pools com estado serão desligados e descartados se permanecerem em execução continuamente pela duração especificada pelo tempo máximo de vida para agentes de espera, mesmo que as condições anteriores sejam verdadeiras. Por exemplo, se o tempo máximo de vida útil para agentes em espera estiver configurado por três dias e o modo de agente em espera estiver definido como Manual, Esquema de Todas as Semanas (Computadores disponíveis 24 horas por dia, 7 dias por semana), os agentes serão reiniciados após três dias contínuos de tempo de atividade.

Importante

Os agentes em stateful pools ainda poderão ser desligados e descartados após a conclusão de uma tarefa se não houver período de carência, não houver nenhum período de provisionamento ativo para agentes em espera, e não houver nenhum trabalho na fila que corresponda ao agente. Quando um agente é descartado, qualquer estado é perdido.

Os períodos de tolerância permitem a maneira mais econômica de executar pools com estado para pipelines que mantêm uma carga consistente. Os períodos de carência não exigem o uso do modo de agente em espera para manter os agentes online e prontos para aceitar trabalhos.

Modo de agente Em espera

Quando você cria um pool, o modo de agente em espera está desativado por padrão. Quando o modo agente de reserva está desativado, não há agentes em reserva para atribuição imediata aos pipelines. Seus pipelines podem ter que esperar de alguns instantes a 15 minutos para que um agente seja provisionado conforme a demanda. Para obter melhor desempenho, habilite o modo de agente Em espera e configure um agendamento de agente em espera que forneça capacidade para sua carga de trabalho.

Quando você configura um agendamento de agente em espera, os Pools de DevOps Gerenciados comparam periodicamente a contagem de agentes provisionados com a contagem de agentes em espera especificada no esquema de provisionamento atual. Ele inicia novos agentes conforme necessário para manter a contagem de agentes em espera. Você pode exibir o status atual e a contagem dos agentes em seu pool usando o painel Agentes .

Importante

A contagem de provisionamento em um esquema não pode ser maior do que o valor máximo de agentes que você define nas configurações do Pool.

Você pode configurar o modo de agente em espera usando as seguintes configurações:

  • Desativado: o modo de espera do agente está desativado e os agentes são provisionados sob demanda quando os trabalhos são colocados na fila.
  • Manual: Configurar um agendamento manual de espera.
  • Automático: use um agendamento automático em modo de espera com base no histórico de uso do agente. Você pode configurá-lo para custo e desempenho.

Captura de tela que mostra as seleções para o modo de agente em espera.

Manual

O modo manual é melhor para equipes que conhecem seus padrões de uso de pipeline de CI/CD (integração contínua e entrega contínua). Ao usar a opção manual, você precisa definir seu esquema de pré-provisionamento. Você define seu esquema com base em sua compreensão de quais agentes no pool são mais propensos a serem usados e quantos agentes provavelmente serão usados. Você especifica uma quantidade de provisionamento de agentes que atendam à demanda projetada.

Você pode criar sua própria agenda de provisionamento ou escolher entre um dos agendamentos predefinidos. Você pode configurar o fuso horário a ser usado para especificar os agendamentos. O valor padrão para o TimeZone de Pré-provisionamento é (UTC) Tempo Universal Coordenado.

Você pode configurar agentes de espera manual de uma das três maneiras a seguir:

Cada um dos inícios rápidos de pré-provisionamento tem as seguintes configurações comuns (além das configurações específicas para esse início rápido):

  • Fuso horário de pré-provisionamento: permite configurar o fuso horário para os períodos de tempo em seu esquema de pré-provisionamento. O valor padrão para o TimeZone de Pré-provisionamento é (UTC) Tempo Universal Coordenado.
  • Porcentagem de agente em espera: configura a porcentagem de agentes em espera que você deseja para cada imagem. Você pode inserir * para garantir que todas as imagens sejam provisionadas igualmente ou pode especificar um número inteiro de 0 a 100 para representar uma porcentagem. Se você especificar uma porcentagem, o total de todas as imagens deverá ser igual a 100. Se você tiver uma única imagem, especifique * ou 100. Ao usar modelos do ARM (modelos do Azure Resource Manager), você pode definir a configuração de porcentagem do agente em espera na images seção. Para obter mais informações, consulte Configurar imagens.

Captura de tela que mostra o modo de espera manual.

Começar do zero

Se você optar por começar do zero, poderá adicionar uma lista de períodos de provisionamento como seu esquema de provisionamento. Cada período de provisionamento consiste em um dia de início, dia de término, fuso horário, hora de início, hora de término e contagem. Os períodos de provisionamento não podem se sobrepor.

Propriedade Descrição
Vários dias Ao selecionar essa opção, você pode configurar o Dia de Início e o Dia de Término para seu esquema de provisionamento.
Até o próximo período Quando você seleciona esta opção, o período de provisionamento começa no valor de Hora de Início até o início do próximo período de provisionamento.
Dia de Início O dia em que o período de provisionamento começa.
Dia de Término O dia em que o período de provisionamento termina. Obrigatório se Multi-Day estiver selecionado.
Horário de Início A hora em que o período de provisionamento é iniciado.
Hora de Término A hora em que o período de provisionamento termina. Obrigatório, a menos que até o próximo período seja selecionado.
Count O número de agentes em espera a serem provisionados. Esse número deve ser maior que zero e não deve ser maior que o valor máximo dos agentes nas configurações do Pool.

Depois de criar um período de provisionamento, você pode excluir ou editar o período da lista de esquemas de pré-provisionamento .

O exemplo a seguir mostra como configurar um esquema manual com um agente provisionado nas manhãs de segunda-feira das 00:00 às 5:00 AM EST.

Captura de tela que mostra um esquema de dimensionamento manual.

Esquema Dia Útil

Se você selecionar o esquema durante a semana, poderá especificar uma hora de início e hora de término, entre as quais o número especificado de agentes em espera está em espera a cada dia da semana.

Propriedade Descrição
Horário de Início A hora em que o período de provisionamento é iniciado.
Hora de Término A hora em que o período de provisionamento termina.
Contagem de provisionamento O número de agentes em espera a serem provisionados. Esse número deve ser maior que zero e não deve ser maior do que o valor máximo de agentes configurado nas configurações do Pool.

O exemplo a seguir configura quatro agentes a serem usados durante o horário de trabalho e nenhum agente durante horas e fins de semana sem trabalho, usando o Horário do Leste (UTC-5).

Captura de tela que mostra um esquema durante a semana.

Esquema durante toda a semana

Se você escolher o esquema durante toda a semana, poderá especificar o número de agentes que deseja disponibilizar o tempo todo.

Captura de tela que mostra um esquema semanal.

Automático

Se você não souber seus padrões de uso e quiser contar com a previsão automática com base em dados anteriores, selecione Automático. Você pode equilibrar entre o custo e o desempenho do agente usando um controle deslizante com as cinco opções a seguir. Os grupos gerenciados de DevOps executam uma consulta sobre suas últimas três semanas de dados históricos, se disponíveis. Ele organiza sessões em fila do pool em intervalos de cinco minutos e atribui o percentil especificado (para evitar picos) a cada hora.

  • Mais econômico (MostCostEffective): 10º percentil.
  • Mais econômico (MoreCostEffective): 25º percentil.
  • Balanceado (padrão) (Balanced): 50º percentil.
  • Mais desempenho (MorePerformance): 75º percentil.
  • Melhor desempenho (BestPerformance): 90º percentil.

Captura de tela que mostra a configuração de dimensionamento automático.

Ciclo de vida de agentes e possíveis atrasos na alocação

Ao habilitar agentes em espera usando um esquema sem estado , você precisa instalar e configurar o agente do Azure Pipelines antes de fazer a transição do estado pronto para o estado alocado e executar um pipeline.

Quando o Managed DevOps Pools provisiona novos agentes, ele tenta baixar o agente mais recente do Azure Pipelines para que ele já seja baixado em agentes em espera antes que eles façam a transição para o status pronto. A inicialização, a conexão e o início do trabalho podem levar de 10 segundos a um minuto, dependendo da velocidade da SKU do pool, da imagem usada e da carga de rede. Além disso, quando você especifica determinadas configurações em um trabalho de pipeline, isso pode causar um redownload e execução de um agente diferente. Regressões e reversões do agente também podem causar um novo download do agente.

Os agentes prontos sempre têm um possível atraso porque os Pools de DevOps Gerenciados usam esse agente de maneira "efêmera", o que significa que iniciamos e executamos o agente de tarefas uma vez por trabalho. Se você perceber que os agentes prontos estão enfrentando atrasos para executar tarefas do Azure DevOps, considere as seguintes perguntas:

  • Você tem agentes prontos? O problema mais comum é um mal-entendido de quando os agentes devem ser pré-provisionados. Os computadores devem ser inicializados do início quando as seguintes condições forem atendidas:
    • O número de trabalhos enfileirados é maior do que a contagem de agentes em espera em um pool.
    • Os trabalhos são enfileirados fora do agendamento de pré-provisionamento.
    • O número de agentes em espera foi definido como vazio.
  • Você está configurando corretamente agentes de contingência que têm várias imagens? Se você não estiver especificando qual imagem usar no pipeline usando a demanda ImageOverride , os trabalhos serão direcionados à primeira imagem. Dependendo das configurações de dimensionamento, talvez você não tenha tantos agentes disponíveis quanto esperado, pois alguns são alocados para outras imagens.
  • Você está utilizando a demanda ImageVersionOverride em seus fluxos de trabalho? Quando você usa a ImageVersionOverride demanda para especificar uma versão de imagem diferente da que está configurada nas configurações do pool, cada agente começa sob demanda usando a versão da imagem especificada. Os agentes em espera são provisionados usando as versões de imagem especificadas na configuração do pool. Se você usar ImageVersionOverride, os agentes em modo de espera não corresponderão a essa versão e um novo agente será iniciado.
  • As configurações de proxy, rede virtual ou firewall estão diminuindo a velocidade do pool? A lentidão potencial de qualquer configuração de rede resulta em agentes demorando mais para iniciar o agente e conectá-lo ao Azure DevOps.
  • Você está substituindo a versão do agente? Por padrão, os Pools de DevOps Gerenciados são executados na versão mais recente do agente de tarefas do Azure DevOps. As configurações no YAML do pipeline (como a Agent.Version demanda) e nas configurações da organização do Azure DevOps podem forçar os pipelines a usar versões mais antigas do agente de tarefa, o que requer um re-download depois que uma máquina é alocada.