Compartilhar via


Configurar agendamentos para pipelines

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

O Azure Pipelines fornece vários tipos de gatilhos para configurar como o pipeline é iniciado.

  • Os gatilhos agendados iniciam seu pipeline com base em um agendamento, como um build noturno. Este artigo fornece diretrizes sobre como usar gatilhos agendados para executar seus pipelines com base em um agendamento.
  • Os gatilhos baseados em eventos iniciam o pipeline em resposta a eventos, como criar uma solicitação de pull ou enviar por push para um branch. Para obter informações sobre como usar gatilhos baseados em eventos, consulte Gatilhos no Azure Pipelines.

Você pode combinar gatilhos agendados e baseados em eventos em seus pipelines, por exemplo, para validar o build sempre que um push é feito (gatilho CI), quando uma solicitação de pull é feita (gatilho de PR) e um build noturno (gatilho agendado). Se você quiser criar seu pipeline apenas em um agendamento e não em resposta a gatilhos baseados em eventos, verifique se o pipeline não tem nenhum outro gatilho habilitado. Por exemplo, os pipelines YAML em um repositório GitHub têm gatilhos de CI e gatilhos de PR habilitados por padrão. Para obter informações sobre como desabilitar gatilhos padrão, consulte Gatilhos no Azure Pipelines e navegue até a seção que abrange o tipo de repositório.

Gatilhos agendados

Importante

Gatilhos agendados definidos usando as configurações de pipeline yaml da interface do usuário têm precedência sobre gatilhos agendados yaml.

Se o pipeline yaml tiver gatilhos agendados yaml e gatilhos agendados definidos pela interface do usuário, somente os gatilhos agendados definidos pela interface do usuário serão executados. Para executar os gatilhos agendados definidos pelo YAML em seu pipeline YAML, você deve remover os gatilhos agendados definidos na interface do usuário das configurações do pipeline YAML. Depois que todos os gatilhos agendados da interface do usuário forem removidos, um push deverá ser feito para que os gatilhos agendados do YAML comecem a ser avaliados.

Para excluir gatilhos agendados da interface do usuário de um pipeline YAML, confira as configurações da interface do usuário que substituem os gatilhos agendados do YAML.

Gatilhos agendados configuram um pipeline para ser executado em um agendamento definido usando a sintaxe cron.

schedules:
- cron: string # cron syntax defining a schedule
  displayName: string # friendly name given to a specific schedule
  branches:
    include: [ string ] # which branches the schedule applies to
    exclude: [ string ] # which branches to exclude from the schedule
  always: boolean # whether to always run the pipeline or only if there have been source code or pipeline settings changes since the last successful scheduled run. The default is false.
  batch: boolean # Whether to run the pipeline if the previously scheduled run is in-progress; the default is false.
  # batch is available in Azure DevOps Server 2022.1 and higher

Os pipelines agendados no YAML têm as seguintes restrições.

  • O fuso horário para agendamentos cron é UTC. Você pode obter assistência de IA do GitHub Copilot para criar suas expressões cron.
  • Se você especificar uma exclude cláusula sem uma include cláusula para branches, ela será equivalente a especificar * na include cláusula.
  • Você não pode usar variáveis de pipeline ao especificar agendas.
  • Se você usar modelos em seu arquivo YAML, os agendamentos deverão ser especificados no arquivo YAML principal e não nos arquivos de modelo.
  • Se um pipeline estiver desabilitado, as atualizações feitas em seu arquivo YAML não atualizarão automaticamente os gatilhos de agendamento.

Considerações de ramificação para gatilhos agendados

Os gatilhos agendados são avaliados para um branch quando ocorrem os eventos a seguir.

  • Um pipeline é criado.
  • O arquivo YAML de um pipeline é atualizado, de um push ou editando-o no editor de pipeline.
  • O caminho do arquivo YAML de um pipeline é atualizado para fazer referência a um arquivo YAML diferente. Essa alteração atualiza apenas o branch padrão e, portanto, só pega agendas no arquivo YAML atualizado para o branch padrão. Se outros branches mesclarem posteriormente o branch padrão, por exemplo git pull origin main, os gatilhos agendados do arquivo YAML recém-referenciado serão avaliados para esse branch.
  • Um novo branch é criado.

Depois que um desses eventos ocorrer em um branch, todas as execuções agendadas para esse branch serão adicionadas, se esse branch corresponder aos filtros de branch para os gatilhos agendados contidos no arquivo YAML nesse branch.

Importante

As execuções agendadas para um branch serão adicionadas somente se o branch corresponder aos filtros de branch para os gatilhos agendados no arquivo YAML nesse branch específico.

Por exemplo, um pipeline é criado com o agendamento a seguir e essa versão do arquivo YAML é verificada no main branch. Esse agendamento cria o main branch diariamente.

# YAML file in the main branch
schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main

Em seguida, um novo branch é criado com base em main, chamado new-feature. Os gatilhos agendados do arquivo YAML no novo branch são lidos e, como não há correspondência para o new-feature branch, nenhuma alteração é feita nos builds agendados e o new-feature branch não é criado usando um gatilho agendado.

Se new-feature for adicionado à branches lista e essa alteração for enviada por push para o new-feature branch, o arquivo YAML será lido e, como new-feature agora está na lista de branches, um build agendado será adicionado para o new-feature branch.

# YAML file in the new-feature-branch
schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main
    - new-feature

Agora considere que um branch nomeado release é criado com base maine, em seguida release , é adicionado aos filtros de branch no arquivo YAML no main branch, mas não no branch recém-criado release .

# YAML file in the release branch
schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main

# YAML file in the main branch with release added to the branches list
schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main
    - release

Como release foi adicionado aos filtros de branch no main branch, mas não aos filtros de ramificação no release branch, o release branch não será criado nessa agenda. Somente quando o release branch for adicionado aos filtros de ramificação no arquivo YAML no branch de versão o build agendado será adicionado ao agendador.

Considerações em lote para gatilhos agendados

Observação

A batch propriedade está disponível no Azure DevOps Server 2022.1 e superior.

A batch propriedade configura se o pipeline deve ser executado se a execução agendada anteriormente estiver em andamento. Quando batch for true, uma nova execução de pipeline não será iniciada devido ao agendamento se uma execução de pipeline anterior ainda estiver em andamento. O padrão é false.

A batch propriedade é afetada pela configuração da always propriedade. Quando always é true, o pipeline é executado de acordo com o agendamento cron, mesmo quando batch é true e há uma execução em andamento.

Sempre Lote Comportamento
false false O pipeline será executado somente se houver uma alteração em relação à última execução de pipeline agendada bem-sucedida, mesmo que haja uma execução em andamento do último gatilho agendado.
false true O pipeline será executado somente se houver uma alteração em relação à última execução de pipeline agendada bem-sucedida e não houver nenhuma execução de pipeline agendada em andamento.
true false O pipeline é executado de acordo com o agendamento cron.
true true O pipeline é executado de acordo com o agendamento cron mesmo se houver uma execução em andamento.

Variável Build.CronSchedule.DisplayName

Observação

A Build.CronSchedule.DisplayName variável está disponível no Azure DevOps Server 2022.1 e superior.

Quando um pipeline está em execução devido a um gatilho agendado cron, a variável predefinida Build.CronSchedule.DisplayName contém o displayName agendamento cron que disparou a execução do pipeline.

Seu pipeline yaml pode conter vários agendamentos cron e talvez você queira que seu pipeline execute diferentes estágios ou trabalhos com base no qual o agendamento cron é executado. Por exemplo, você tem um build noturno e um build semanal e deseja executar um determinado estágio somente durante a compilação noturna. Você pode usar a Build.CronSchedule.DisplayName variável em uma condição de trabalho ou estágio para determinar se esse trabalho ou estágio deve ser executado.

- stage: stage1
  # Run this stage only when the pipeline is triggered by the 
  # "Daily midnight build" cron schedule
  condition: eq(variables['Build.CronSchedule.DisplayName'], 'Daily midnight build')

Para obter mais exemplos, consulte exemplos schedules.cron.

Selecione os dias e horários em que deseja executar o build usando o editor clássico.

Se o repositório for Git do Azure Repos, GitHub ou Outro Git, você também poderá especificar branches para incluir e excluir. Se você quiser usar caracteres curinga, digite a especificação do branch (por exemplo features/modules/*) e pressione Enter.

Gatilho agendado UTC + 5:30 fuso horário

Exemplos

O exemplo a seguir define dois agendamentos:

schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main
    - releases/*
    exclude:
    - releases/ancient/*
- cron: '0 12 * * 0'
  displayName: Weekly Sunday build
  branches:
    include:
    - releases/*
  always: true

A primeira agenda, compilação diária da meia-noite, executa um pipeline à meia-noite todos os dias, mas somente se o código tiver sido alterado desde a última execução agendada bem-sucedida, para main e todas as releases/* ramificações, exceto as ramificações abaixo releases/ancient/*.

A segunda agenda, compilação semanal de domingo, executa um pipeline ao meio-dia aos domingos, se o código foi alterado ou não desde a última execução, para todas as releases/* ramificações.

Observação

O fuso horário para agendamentos cron é UTC, portanto, nestes exemplos, o build da meia-noite e o build do meio-dia são à meia-noite e ao meio-dia em UTC.

Para obter mais exemplos, consulte Migrando do editor clássico.

Exemplo: build noturno do repositório Git em vários fusos horários

Neste exemplo, o gatilho agendado do editor clássico tem duas entradas, que produzem os builds a seguir.

  • Todas as segundas-feiras - sextas-feiras às 3:00 da manhã (UTC + 5:30 fuso horário), crie branches que atendam aos critérios de filtro de features/india/* ramificação

    Gatilho agendado UTC + 5:30 fuso horário

  • Todas as segundas-feiras - sextas-feiras às 3:00 da manhã (UTC - 5:00 fuso horário), crie branches que atendam aos critérios de filtro de features/nc/* filial

    Gatilho agendado UTC -5:00 fuso horário

Exemplo: compilação noturna com frequências diferentes

Neste exemplo, o gatilho agendado do editor clássico tem duas entradas, produzindo os builds a seguir.

  • Todas as segundas-feiras - sextas-feiras às 3:00 UTC, crie branches que atendam aos critérios de main filtro de ramificação e releases/*

    Frequência de gatilho agendada 1, Azure Pipelines e Servidor do Azure DevOps 2019.

  • Todos os domingos às 3:00 UTC, compile a releases/lastversion ramificação, mesmo que a origem ou o pipeline não tenha sido alterado

    Frequência de gatilho agendada 2, Azure Pipelines e Servidor do Azure DevOps 2019.

Sintaxe cron

Cada expressão cron de gatilho agendada do Azure Pipelines é uma expressão delimitada por espaço com cinco entradas na ordem a seguir. A expressão está entre aspas 'simples.

mm HH DD MM DW
 \  \  \  \  \__ Days of week
  \  \  \  \____ Months
   \  \  \______ Days
    \  \________ Hours
     \__________ Minutes
Campo Valores aceitos
Minutos 0 a 59
Horas 0 a 23
Dias 1 a 31
Meses 1 a 12, nomes em inglês completos, três primeiras letras de nomes em inglês
Dias da semana 0 a 6 (começando com domingo), nomes em inglês completos, as três primeiras letras de nomes em inglês

Os valores podem estar nos seguintes formatos.

Formato Example Description
Wildcard * Corresponde a todos os valores deste campo
Valor único 5 Especifica um único valor para este campo
Vírgula delimitada 3,5,6 Especifica vários valores para esse campo. Vários formatos podem ser combinados, como 1,3-6
Intervalos 1-3 O intervalo inclusivo de valores para este campo
Intervalos */4 ou 1-5/2 Intervalos para corresponder a esse campo, como cada quarto valor ou o intervalo de 1 a 5 com um intervalo de etapas de 2
Example Expressão cron
Compile todas as segundas, quartas e sextas-feiras às 18h 0 18 * * Mon,Wed,Fri, 0 18 * * 1,3,5 ou 0 18 * * 1-5/2
Compilar a cada 6 horas 0 0,6,12,18 * * *, 0 */6 * * * ou 0 0-18/6 * * *
Compilar a cada 6 horas a partir das 9h 0 9,15,21 * * * ou 0 9-21/6 * * *

Para obter mais informações sobre formatos com suporte, consulte Crontab Expression.

Usar o GitHub Copilot para criar uma expressão cron

Você pode obter assistência de IA do GitHub Copilot para criar expressões cron ou converter expressões cron existentes do fuso horário local em UTC.

Os agendamentos cron do Azure Pipelines são definidos em UTC, portanto, agendas como Build todas as segundas, quartas e sextas-feiras às 18h devem ser criadas usando a sintaxe cron e convertidas do fuso horário local para UTC.

Personalize os prompts a seguir para criar expressões cron ou converter expressões cron em UTC do fuso horário usado para criar as expressões.

No exemplo a seguir, Copilot é solicitado a criar uma agenda de cron utc para compilar todas as segundas, quartas e sextas-feiras às 18:00 hora padrão leste.

Build a UTC cron expression for Monday, Wednesday, and Friday at 6:00 PM Eastern Standard Time

Se você já tiver uma expressão cron em seu fuso horário local, poderá pedir ao Copilot para convertê-la em UTC. Neste exemplo, uma agenda cron para compilar todas as segundas, quartas e sextas-feiras às 18h (0 18 * * Mon,Wed,Fri) horário padrão do leste é convertida em UTC.

Convert the following cron expression from Eastern Standard Time to UTC: 0 18 * * Mon,Wed,Fri

Converter uma expressão cron em UTC pode exigir a alteração dos dias da semana em sua expressão. No exemplo a seguir, Copilot é solicitado a criar uma agenda de cron UTC para compilar de segunda a sexta-feira às 00h30, horário padrão da Europa Central. O Horário Padrão da Europa Central está à frente de UTC, então a expressão resultante começa no final da noite de domingo em vez do início da manhã de segunda-feira, e termina na quinta-feira.

Build a UTC cron expression for Monday through Friday at 12:30 AM Central European Standard Time

Para obter detalhes adicionais sobre a expressão cron gerada pelo Copilot, você pode pedir ao Copilot para fornecer uma explicação da expressão cron gerada em seu prompt.

Build a UTC cron expression for Monday through Friday at 12:30 AM Central European Standard Time and explain the different parts of the cron expression

Copilot é alimentado pela IA, portanto, surpresas e erros são possíveis. Para obter mais informações, consulte perguntas frequentes sobre uso geral do Copilot.

Exibição de execuções agendadas

Você pode exibir uma visualização dos próximos builds agendados escolhendo execuções agendadas no menu de contexto na página de detalhes do pipeline para o pipeline.

Importante

A exibição de execuções agendadas mostra apenas pipelines agendados para serem executados dentro de sete dias a partir da data atual. Se o seu agendamento cron tiver um intervalo maior que 7 dias e a próxima execução estiver agendada para iniciar após sete dias a partir da data atual, ela não será exibida no modo de exibição De execuções agendadas .

Menu de execuções agendadas

Depois de criar ou atualizar os gatilhos agendados, você pode verificá-los usando o modo de exibição execuções agendadas .

Execuções agendadas

Este exemplo exibe as execuções agendadas para o agendamento a seguir.

schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main

As janelas de execução agendadas exibem os horários convertidos no conjunto de fusos horários local no computador usado para navegar até o portal do Azure DevOps. Este exemplo exibe uma captura de tela tirada no fuso horário EST.

Observação

Se você atualizar o agendamento de um pipeline em execução, o modo de exibição de execuções agendadas não será atualizado com o novo agendamento até que o pipeline em execução seja concluído no momento.

Você pode exibir uma visualização dos próximos builds agendados escolhendo execuções agendadas no menu de contexto na página de detalhes do pipeline para o pipeline.

Menu de execuções agendadas

Depois de criar ou atualizar seus gatilhos agendados, você pode verificá-los usando essa exibição.

Execuções agendadas

Executando mesmo quando não há alterações de código

Por padrão, o pipeline não será executado como agendado se não houver nenhuma alteração de código desde a última execução agendada bem-sucedida. Por exemplo, considere que você agendou um pipeline para ser executado todas as noites às 21h. Durante os dias da semana, você envia várias alterações por push ao seu código. O pipeline é executado de acordo com o agendamento. Durante os fins de semana, você não faz nenhuma alteração no código. Se não houver alterações de código desde a execução agendada na sexta-feira, o pipeline não será executado como agendado durante o fim de semana.

Para forçar um pipeline a ser executado mesmo quando não houver alterações de código, você pode usar a always palavra-chave.

schedules:
- cron: ...
  ...
  always: true

Para configurar o pipeline agendado para compilar somente se houver uma alteração desde a última compilação, verifique somente os builds de agendamento se a origem ou o pipeline tiver sido alterado.

Gatilho agendado UTC + 5:30 fuso horário

Limites no número de execuções agendadas em pipelines YAML

Há certos limites de frequência com que você pode agendar uma execução de um pipeline. Esses limites foram implementados para evitar o uso indevido de recursos do Azure Pipelines, especialmente os agentes hospedados pela Microsoft. Os limites são:

  • cerca de 1000 execuções por pipeline por semana
  • 10 execuções por pipeline por 15 minutos

Migrando do editor clássico

Os exemplos a seguir mostram como migrar seus agendamentos do editor clássico para o YAML.

Exemplo: build noturno do repositório Git em vários fusos horários

Neste exemplo, o gatilho agendado do editor clássico tem duas entradas, produzindo os builds a seguir.

  • Todas as segundas-feiras - sextas-feiras às 3:00 da manhã (UTC + 5:30 fuso horário), crie branches que atendam aos critérios de filtro de features/india/* ramificação

    Gatilho agendado UTC + 5:30 fuso horário

  • Todas as segundas-feiras - sextas-feiras às 3:00 da manhã (UTC - 5:00 fuso horário), crie branches que atendam aos critérios de filtro de features/nc/* filial

    Gatilho agendado UTC -5:00 fuso horário

O gatilho agendado yaml equivalente é:

schedules:
- cron: '30 21 * * Sun-Thu'
  displayName: M-F 3:00 AM (UTC + 5:30) India daily build
  branches:
    include:
    - /features/india/*
- cron: '0 8 * * Mon-Fri'
  displayName: M-F 3:00 AM (UTC - 5) NC daily build
  branches:
    include:
    - /features/nc/*

Na primeira agenda, M-F 3:00 AM (UTC + 5:30) Compilação diária da Índia, a sintaxe cron (mm HH DD MM DW) é 30 21 * * Sun-Thu.

  • Minutos e Horas - 30 21 - Isso mapeia para 21:30 UTC (9:30 PM UTC). Como o fuso horário especificado no editor clássico é UTC + 5:30, precisamos subtrair 5 horas e 30 minutos do tempo de build desejado de 3:00 para chegar no horário UTC desejado para especificar o gatilho YAML. Você pode obter assistência de IA do GitHub Copilot para criar sua expressão cron.
  • Dias e meses são especificados como curingas, pois esse agendamento não especifica a execução somente em determinados dias do mês ou em um mês específico.
  • Dias da semana - Sun-Thu por causa da conversão de fuso horário, para que nossos builds sejam executados às 3:00 da manhã no fuso horário UTC + 5:30 índia, precisamos especificar a inicialização deles no dia anterior no horário UTC. Também podemos especificar os dias da semana como 0-4 ou 0,1,2,3,4.

No segundo agendamento, M-F 3:00 AM (UTC – 5) NC build diário, a sintaxe cron é 0 8 * * Mon-Fri.

  • Minutos e Horas - 0 8 - Isso mapeia para 8:00 AM UTC. Como o fuso horário especificado no editor clássico é UTC – 5:00, precisamos adicionar 5 horas a partir do tempo de build desejado de 3:00 da manhã para chegar ao horário UTC desejado para especificar para o gatilho YAML. Você pode obter assistência de IA do GitHub Copilot para criar sua expressão cron.
  • Dias e meses são especificados como curingas, pois esse agendamento não especifica a execução somente em determinados dias do mês ou em um mês específico.
  • Dias da semana - Mon-Fri - Como nossas conversões de fuso horário não abrangem vários dias da semana para nossa agenda desejada, não precisamos fazer nenhuma conversão aqui. Também podemos especificar os dias da semana como 1-5 ou 1,2,3,4,5.

Importante

Os fusos horários UTC nos gatilhos agendados do YAML não são responsáveis pelo horário de verão.

Dica

Ao usar 3 letras dias da semana e querer um período de vários dias até o Sol, o Sol deve ser considerado o primeiro dia da semana, por exemplo, para uma agenda de meia-noite EST, de quinta a domingo, a sintaxe cron é 0 5 * * Sun,Thu-Sat.

Exemplo: compilação noturna com frequências diferentes

Neste exemplo, o gatilho agendado do editor clássico tem duas entradas, produzindo os builds a seguir.

  • Todas as segundas-feiras - sextas-feiras às 3:00 UTC, crie branches que atendam aos critérios de main filtro de ramificação e releases/*

    Frequência de gatilho agendada 1.

  • Todos os domingos às 3:00 UTC, compile a releases/lastversion ramificação, mesmo que a origem ou o pipeline não tenha sido alterado

    Frequência de gatilho agendada 2.

O gatilho agendado yaml equivalente é:

schedules:
- cron: '0 3 * * Mon-Fri'
  displayName: M-F 3:00 AM (UTC) daily build
  branches:
    include:
    - main
    - /releases/*
- cron: '0 3 * * Sun'
  displayName: Sunday 3:00 AM (UTC) weekly latest version build
  branches:
    include:
    - /releases/lastversion
  always: true

No primeiro agendamento, m-f 3:00 am (UTC) compilação diária, a sintaxe cron é 0 3 * * Mon-Fri.

  • Minutos e Horas - 0 3 - Isso mapeia para 3:00 AM UTC. Como o fuso horário especificado no editor clássico é UTC, não precisamos fazer conversões de fuso horário.
  • Dias e meses são especificados como curingas, pois esse agendamento não especifica a execução somente em determinados dias do mês ou em um mês específico.
  • Dias da semana - Mon-Fri porque não há conversão de fuso horário, os dias da semana mapeiam diretamente da agenda do editor clássico. Também poderíamos especificar os dias da semana como 1,2,3,4,5.

Na segunda agenda, domingo, às 3:00 da manhã (UTC) versão mais recente, a sintaxe cron é 0 3 * * Sun.

  • Minutos e Horas - 0 3 - Isso mapeia para 3:00 AM UTC. Como o fuso horário especificado no editor clássico é UTC, não precisamos fazer conversões de fuso horário.
  • Dias e meses são especificados como curingas, pois esse agendamento não especifica a execução somente em determinados dias do mês ou em um mês específico.
  • Dias da semana - Sun - Como nossas conversões de fuso horário não abrangem vários dias da semana para nossa agenda desejada, não precisamos fazer nenhuma conversão aqui. Também poderíamos especificar os dias da semana como 0.
  • Também especificamos always: true , uma vez que esse build está agendado para ser executado se o código-fonte foi ou não atualizado.

perguntas frequentes

Quero que meu pipeline seja executado apenas no agendamento e não quando alguém enviar uma alteração por push para um branch

Se você quiser que seu pipeline seja executado apenas no agendamento e não quando alguém enviar uma alteração por push para um branch ou mesclar uma alteração no branch principal, você deverá desabilitar explicitamente os gatilhos padrão de CI e PR no pipeline.

Para desabilitar os gatilhos padrão de CI e PR, adicione as instruções a seguir ao pipeline yaml e verifique se você não substituiu os gatilhos de pipeline YAML com gatilhos de interface do usuário.

trigger: none
pr: none

Para obter mais informações, consulte a definição de pr e a definição do gatilho.

Defini um agendamento no arquivo YAML. Mas não correu. O que aconteceu?

  • Verifique as próximas execuções que o Azure Pipelines agendou para o pipeline. Você pode encontrar essas execuções selecionando a ação Execuções agendadas em seu pipeline. A lista é filtrada para mostrar apenas as próximas execuções nos próximos dias. Se isso não atender às suas expectativas, provavelmente é o caso de você ter digitado incorretamente sua agenda de cron ou não ter a agenda definida no branch correto. Leia o tópico acima para entender como configurar agendas. Reavaliar sua sintaxe cron. Todas as horas para agendamentos cron estão em UTC.

  • Faça uma pequena alteração trivial no arquivo YAML e envie essa atualização por push para o repositório. Se houver algum problema ao ler os agendamentos do arquivo YAML anteriormente, ele deverá ser corrigido agora.

  • Se você tiver agendas definidas na interface do usuário, os agendamentos do YAML não serão respeitados. Verifique se você não tem agendas de interface do usuário navegando até o editor do pipeline e selecionando Gatilhos.

  • Há um limite no número de execuções que você pode agendar para um pipeline. Leia mais sobre limites.

  • Se não houver nenhuma alteração no código, o Azure Pipelines poderá não iniciar novas execuções. Saiba como substituir esse comportamento.

Meus horários yaml estavam funcionando bem. Mas eles pararam de trabalhar agora. Como fazer para depurar isso?

  • Se você não especificou always:true, o pipeline não será agendado, a menos que haja atualizações feitas em seu código. Verifique se houve alterações de código e como você configurou os agendamentos.

  • Há um limite de quantas vezes você pode agendar seu pipeline. Verifique se você excedeu esses limites.

  • Verifique se alguém habilitou mais agendas na interface do usuário. Abra o editor do pipeline e selecione Gatilhos. Se eles definirem agendas na interface do usuário, os agendamentos do YAML não serão respeitados.

  • Verifique se o pipeline está pausado ou desabilitado. Selecione Configurações para o pipeline.

  • Verifique as próximas execuções que o Azure Pipelines agendou para o pipeline. Você pode encontrar essas execuções selecionando a ação Execuções agendadas em seu pipeline. Se você não vir os agendamentos esperados, faça uma pequena alteração trivial no arquivo YAML e envie a atualização por push para o repositório. Isso deve ressincronizar os agendamentos.

  • Se você usar o GitHub para armazenar seu código, é possível que o Azure Pipelines tenha sido limitado pelo GitHub quando ele tentou iniciar uma nova execução. Verifique se você pode iniciar uma nova execução manualmente.

Meu código não foi alterado, mas um build agendado é disparado. Por que?

  • Você pode ter habilitado uma opção para sempre executar um build agendado, mesmo que não haja alterações de código. Se você usar um arquivo YAML, verifique a sintaxe da agenda no arquivo YAML. Se você usar pipelines clássicos, verifique se verificou essa opção nos gatilhos agendados.

  • Você pode ter atualizado o pipeline de build ou alguma propriedade do pipeline. Isso fará com que uma nova execução seja agendada mesmo se você não tiver atualizado o código-fonte. Verifique o histórico de alterações no pipeline usando o editor clássico.

  • Você pode ter atualizado a conexão de serviço usada para se conectar ao repositório. Isso fará com que uma nova execução seja agendada mesmo se você não tiver atualizado o código-fonte.

  • O Azure Pipelines verifica primeiro se há atualizações no código. Se o Azure Pipelines não conseguir acessar seu repositório ou obter essas informações, ele criará uma execução informativa. É uma compilação fictícia para informar que o Azure Pipelines não consegue acessar seu repositório.

  • O pipeline pode não ter uma compilação completamente bem-sucedida. Para determinar se um novo build ou não deve ser agendado, o Azure DevOps pesquisa o último build agendado completamente bem-sucedido. Se ele não encontrar um, ele disparará um novo build agendado. Builds agendados parcialmente bem-sucedidos não são considerados bem-sucedidos, portanto, se o pipeline tiver apenas builds parcialmente bem-sucedidos, o Azure DevOps disparará builds agendados, mesmo que seu código não tenha sido alterado.

Vejo a execução planejada no painel de execuções agendadas. No entanto, ele não é executado nesse momento. Por que?

  • O painel De execuções agendadas mostra todos os agendamentos potenciais. No entanto, ele pode não ser executado, a menos que você tenha feito atualizações reais no código. Para forçar uma agenda a ser sempre executada, verifique se você definiu a propriedade always no pipeline YAML ou verificou a opção para sempre ser executada em um pipeline clássico.

Os agendamentos definidos no pipeline do YAML funcionam para um branch, mas não para o outro. Como posso corrigir isso?

Os agendamentos são definidos em arquivos YAML e esses arquivos são associados a branches. Se você quiser que um pipeline seja agendado para um branch específico, digamos features/X, verifique se o arquivo YAML nesse branch tem o agendamento cron definido e se ele tem as inclusões de branch corretas para o agendamento. O arquivo YAML no features/X branch deve ter o seguinte schedule neste exemplo:

schedules: 
- cron: '0 12 * * 0'   # replace with your schedule
  branches: 
    include: 
    - features/X  

Para obter mais informações, consulte as considerações do Branch para gatilhos agendados.