Partilhar via


Configurar o dimensionamento

Você pode gerenciar o desempenho e o custo de sua instância de Pools de DevOps Gerenciados 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:

  • Sem Estado: forneça um novo agente para cada tarefa.
  • Stateful: Permite o compartilhamento de agentes entre vários trabalhos.

A configuração padrão para um pool é 'stateless', o que pode ser alcançado usando a configuração Agente novo a cada vez. Em alguns casos, as equipes podem querer reutilizar agentes para reutilizar os pacotes ou arquivos criados durante a execução de pipeline anterior. A carga de trabalho de compilação é um cenário comum em que as equipes desejam preservar o estado e reutilizar os agentes. Você pode obter pools com monitoração de estado por meio de Pools de DevOps Gerenciados, equilibrando-os 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.

Nota

Os agentes de segurança recomendam que os utilizadores usem pools stateless como defesa contra ataques à cadeia de fornecimento. Utilize a configuração de estado Agente fresco sempre.

Piscinas sem estado

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

Para saber mais sobre o ciclo de vida dos 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 ecrã que mostra um agente sem estado.

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

Piscinas com estado

Captura de ecrã que mostra um agente stateful.

Quando ativar O mesmo agente pode ser utilizado por várias compilações (configuração em modelos de recursos ou configuração na CLI do Azure), os agentes no pool mantêm estado. Você pode configurar pools com monitoração de estado usando as seguintes configurações:

  • Max time to live for standby agents (maxAgentLifetime) configura a duração máxima que um agente em um pool com estado pode executar antes de ser desligado e descartado. O formato do Max time to live para agentes em espera é dd.hh:mm:ss. O valor padrão de Max time to live para agentes em espera é definido como a duração máxima permitida de sete dias (7.00:00:00).

  • O Período de Carência (gracePeriodTimeSpan) configura a quantidade de tempo que um agente em um pool com monitoração de estado aguarda por novos trabalhos antes de encerrar após a conclusão de todos os trabalhos atuais e enfileirados. O formato do Período de Carência é dd.hh:mm:ss e o padrão é nenhum período de carência.

    Importante

    Se um trabalho estiver em execução quando expirar o intervalo de Tempo máximo de vida para agentes em espera, o agente não será desligado até que o trabalho seja concluído, a menos que demore mais de dois dias para ser concluído. Os trabalhos individuais em Pools de DevOps Gerenciados podem ser executados por no máximo dois dias, mesmo se estiverem sendo executados em um agente em espera com mais de dois dias configurado 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 monitoração de estado continuam em execução se qualquer uma das seguintes condições for atendida:

  • Se outro trabalho estiver na fila quando o primeiro trabalho terminar, os Pools de DevOps Gerenciados enviarão o trabalho enfileirado para o agente que executou o primeiro trabalho em vez de encerrá-lo.
  • Se houver um período de carência configurado para o pool, os agentes aguardam novas tarefas pela duração especificada pelo período de carência antes de desligarem-se.
  • 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 executar e aguardar os trabalhos.

Os agentes que estão sendo executados em pools com monitoração de estado são desligados e descartados se forem executados continuamente durante a duração especificada pelo tempo máximo de vida útil para agentes em espera, mesmo que as condições anteriores sejam verdadeiras. Por exemplo, se o tempo máximo de vida para agentes em espera estiver configurado para três dias e o modo de agente em espera estiver definido como Manual, All Week Scheme (Máquinas 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 pools com estado ainda podem ser desligados e descartados após a conclusão de uma tarefa se não houver período de carência, nenhum período ativo de provisionamento para agentes em espera e nenhuma tarefa em fila que corresponda ao agente. Quando um agente é descartado, qualquer estado é perdido.

Os períodos de carência permitem a maneira mais econômica de executar pools stateful para pipelines com uma carga consistente. Os períodos de carência não exigem o uso do modo de agente em espera para manter os agentes on-line 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 de espera do agente está desativado, não há agentes de espera disponíveis para atribuir imediatamente aos seus pipelines. Os seus pipelines podem ter de esperar desde alguns momentos até 15 minutos para que um agente seja provisionado quando solicitado. Para um melhor desempenho, habilite o modo de agente em espera e configure uma agenda de agente em espera que forneça capacidade para sua carga de trabalho.

Quando você configura uma agenda 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 agente em espera está desativado e os agentes são provisionados sob demanda quando os trabalhos são enfileirados.
  • Manual: Configure um agendamento manual de espera.
  • Automático: Use uma programação automática de standby 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 integração contínua e entrega contínua (CI/CD). 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 prováveis de serem usados e quantos agentes provavelmente serão usados. Você especifica uma contagem de provisionamento de agentes que atendem à demanda projetada.

Você pode criar sua própria agenda de provisionamento ou escolher uma das agendas predefinidas. Você pode configurar o fuso horário a ser usado para especificar as agendas. O valor padrão para Pre-provisioning TimeZone é (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 desse 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 Pre-provisioning TimeZone é (UTC) Tempo Universal Coordenado.
  • Porcentagem do 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 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 Azure Resource Manager (modelos ARM), 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 ecrã 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
Multi-Dia 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é ao próximo período Quando você seleciona essa opção, o período de provisionamento é executado a partir do valor 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 Fim O dia em que termina o período de provisionamento. Obrigatório se Multi-Day estiver selecionado.
Hora de Início A hora em que o período de provisionamento começa.
Hora de Fim O momento em que o período de provisionamento termina. Obrigatório, a menos que Até o próximo período seja selecionado.
Contagem O número de agentes em espera a provisionar. Esse número deve ser maior que zero e não deve ser maior do que o valor máximo de agentes nas configurações do pool.

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

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

Captura de tela que mostra um esquema de dimensionamento manual.

Esquema de dias úteis

Se você selecionar o esquema de dias da semana, poderá especificar uma hora de início e uma 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
Hora de Início A hora em que o período de provisionamento começa.
Hora de Fim O momento em que o período de provisionamento termina.
Contagem de provisionamento O número de agentes em espera a provisionar. 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 para serem usados durante o horário de trabalho e nenhum agente durante o horário de folga e fins de semana, usando o horário do leste (UTC-5).

Captura de tela que mostra um esquema de dia da semana.

Regime semanal completo

Se você escolher o esquema de todas as semanas, poderá especificar o número de agentes que deseja disponibilizar o tempo todo.

Captura de ecrã que mostra um esquema de toda a semana.

Automático

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

  • Mais rentável (MostCostEffective): percentil 10.
  • Mais rentável (MoreCostEffective): percentil 25.
  • Equilibrado (padrão) (Balanced): Percentil 50.
  • Mais desempenho (MorePerformance): 75.º percentil.
  • Melhor desempenho (BestPerformance): percentil 90.

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

Ciclo de vida dos agentes e potenciais atrasos na alocação

Quando habilitas agentes de standby usando um esquema sem estado, precisas instalar e configurar o agente do Azure Pipelines antes de transitar do estado pronto para o estado alocado e executar uma pipeline.

Quando os Pools de DevOps Geridos provisionam novos agentes, eles tentam baixar o agente mais recente do Azure Pipelines para que já esteja pré-carregado nos agentes em espera antes que façam a transição para o estado de pronto. A inicialização, a conexão e o início do trabalho podem levar de 10 segundos a um minuto, dependendo da velocidade de SKU do pool, da imagem usada e da carga da rede. Além disso, quando você especifica determinadas configurações em um trabalho de pipeline, isso pode causar um novo download 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 atraso potencial 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 observar atrasos nos agentes prontos a executar tarefas do Azure DevOps, considere as seguintes questões:

  • Você tem agentes prontos? O problema mais comum é um mal-entendido sobre quando os agentes devem ser pré-provisionados. As máquinas devem ser iniciadas do zero quando forem satisfeitas as seguintes condições:
    • O número de trabalhos enfileirados é maior do que o número de agentes em espera num conjunto.
    • Os trabalhos são enfileirados fora do cronograma de pré-provisionamento.
    • A contagem de agentes em espera está definida para estar vazia.
  • Você está configurando corretamente agentes em espera que têm várias imagens? Se você não estiver especificando qual imagem usar em seu pipeline usando a demanda ImageOverride , os trabalhos terão como destino a primeira imagem. Dependendo das configurações de dimensionamento, você pode não ter tantos agentes disponíveis quanto o esperado, porque alguns são alocados para outras imagens.
  • Está a utilizar a demanda ImageVersionOverride nos seus pipelines? Quando você usa a ImageVersionOverride demanda para especificar uma versão de imagem diferente da configurada nas configurações do pool, cada agente inicia sob demanda usando a versão de imagem especificada. Os agentes em espera são provisionados usando as versões de imagem especificadas na configuração do pool. Se usar ImageVersionOverride, qualquer agente de espera não corresponderá a essa versão e um novo agente será iniciado.
  • As configurações de proxy, rede virtual ou firewall estão atrasando seu 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 pipeline YAML (como a Agent.Version demanda) e as 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 novo download depois que uma máquina é alocada.