Tutorial: executar uma tarefa do ACR segundo um agendamento definido

Este tutorial mostra como executar uma tarefa do ACR segundo uma agenda. Para agendar uma tarefa, configure um ou mais gatilhos de temporizador. Os gatilhos de temporizador podem ser usados sozinhos ou com outros gatilhos de tarefa.

Neste tutorial, saiba mais sobre o agendamento de tarefas e:

  • Criar uma tarefa com um gatilho de temporizador
  • Gerenciar gatilhos de temporizador

O agendamento de tarefas é útil para cenários estes:

  • Executar uma carga de trabalho de contêiner para operações de manutenção agendada. Por exemplo, execute um aplicativo em contêiner para remover imagens desnecessárias do registro.
  • Execute um conjunto de testes em uma imagem de produção durante o dia como parte do monitoramento de site ativo.

Pré-requisitos

Sobre o agendamento de tarefas

  • Gatilho com expressão cron – o gatilho de temporizador da tarefa usa uma expressão cron. A expressão é uma cadeia de caracteres com cinco campos especificando o minuto, a hora, o dia, o mês e o dia da semana para disparar a tarefa. Há suporte para frequências de até uma vez por minuto.

    Por exemplo, a expressão "0 12 * * Mon-Fri" dispara uma tarefa às 12h UTC em cada dia da semana. Consulte os detalhes mais adiante neste artigo.

  • Vários gatilhos de temporizador – a adição de vários temporizadores a uma tarefa é permitida, desde que as agendas sejam diferentes.

    • Especifique vários gatilhos de temporizador ao criar a tarefa ou adicione-os mais tarde.
    • Opcionalmente, nomeie os gatilhos para facilitar o gerenciamento, ou as Tarefas do ACR usarão nomes de gatilho padrão.
    • Se os agendamentos de temporizador se sobrepuserem em algum momento, as Tarefas do ACR dispararão a tarefa no horário agendado para cada temporizador.
  • Outros gatilhos de tarefa – Em uma tarefa acionada por temporizador, também é possível habilitar gatilhos com base em confirmações do código-fonte ou atualizações da imagem base. Como outras tarefas do ACR, você também pode executar manualmente uma tarefa agendada.

Criar uma tarefa com um gatilho de temporizador

Comando de tarefa

Primeiro, preencha a variável de ambiente a seguir do shell com um valor apropriado para seu ambiente. Esta etapa não é estritamente necessária, mas torna a execução dos comandos da CLI do Azure com várias linhas neste tutorial um pouco mais fácil. Se não preencher a variável de ambiente, você precisará substituir manualmente cada valor sempre que aparecerem nos comandos de exemplo.

ACR_NAME=<registry-name>        # The name of your Azure container registry

Ao criar uma tarefa com o comando az acr task create, você pode opcionalmente adicionar um gatilho de temporizador. Adicione o parâmetro --schedule e passe uma expressão cron ao temporizador.

Como um exemplo simples, a tarefa a seguir dispara a execução da imagem hello-world Microsoft Container Registry todos os dias às 21:00 UTC. A tarefa é executada sem um contexto de código-fonte.

az acr task create \
  --name timertask \
  --registry $ACR_NAME \
  --cmd mcr.microsoft.com/hello-world \
  --schedule "0 21 * * *" \
  --context /dev/null

Execute o comando az acr task show para ver se o gatilho do temporizador está configurado. Por padrão, o gatilho de atualização da imagem base também está habilitado.

az acr task show --name timertask --registry $ACR_NAME --output table
NAME      PLATFORM    STATUS    SOURCE REPOSITORY       TRIGGERS
--------  ----------  --------  -------------------     -----------------
timertask linux       Enabled                           BASE_IMAGE, TIMER

Além disso, um exemplo simples da tarefa em execução com o contexto do código-fonte. A tarefa a seguir dispara a execução da imagem hello-world do Registro de Contêiner da Microsoft todos os dias às 21:00h UTC.

Siga os Pré-requisitos para criar o contexto do código-fonte e, em seguida, criar uma tarefa agendada com contexto.

az acr task create \
  --name timertask \
  --registry $ACR_NAME \
  --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
  --file Dockerfile \
  --image timertask:{{.Run.ID}} \
  --git-access-token $GIT_PAT \
  --schedule "0 21 * * *"

Execute o comando az acr task show para ver se o gatilho do temporizador está configurado. Por padrão, o gatilho de atualização da imagem base também está habilitado.

az acr task show --name timertask --registry $ACR_NAME --output table

Execute o comando az acr task run para disparar a tarefa manualmente.

az acr task run --name timertask --registry $ACR_NAME

Disparar a tarefa

Dispare a tarefa manualmente com az acr task run para garantir que ela seja configurada corretamente:

az acr task run --name timertask --registry $ACR_NAME

Se o contêiner for executado com êxito, a saída será semelhante à seguinte: A saída foi condensada para mostrar as principais etapas

Queued a run with ID: cf2a
Waiting for an agent...
2020/11/20 21:03:36 Using acb_vol_2ca23c46-a9ac-4224-b0c6-9fde44eb42d2 as the home volume
2020/11/20 21:03:36 Creating Docker network: acb_default_network, driver: 'bridge'
[...]
2020/11/20 21:03:38 Launching container with name: acb_step_0

Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Após a hora agendada, execute o comando az acr task list-runs para verificar se o temporizador disparou a tarefa como esperado:

az acr task list-runs --name timertask --registry $ACR_NAME --output table

Para uma implantação bem-sucedida, a saída é semelhante à seguinte:

RUN ID    TASK       PLATFORM    STATUS     TRIGGER    STARTED               DURATION
--------  ---------  ----------  ---------  ---------  --------------------  ----------
ca15      timertask  linux       Succeeded  Timer      2020-11-20T21:00:23Z  00:00:06
ca14      timertask  linux       Succeeded  Manual     2020-11-20T20:53:35Z  00:00:06

Gerenciar gatilhos de temporizador

Use os comandos do az acr task timer para gerenciar os gatilhos de temporizador de uma tarefa do ACR.

Adicionar ou atualizar um gatilho de temporizador

Depois que uma tarefa é criada, adicione opcionalmente um gatilho de temporizador usando o comando az acr task timer add. O exemplo abaixo adiciona um gatilho de temporizador chamado timer2 à timertask criada anteriormente. Esse temporizador dispara a tarefa todos os dias às 10:30 UTC.

az acr task timer add \
  --name timertask \
  --registry $ACR_NAME \
  --timer-name timer2 \
  --schedule "30 10 * * *"

Para alterar o agendamento de um gatilho ou mudar o status dele, use o comando az acr task timer update. Por exemplo, altere o gatilho chamado timer2 para disparar a tarefa às 11:30 UTC:

az acr task timer update \
  --name timertask \
  --registry $ACR_NAME \
  --timer-name timer2 \
  --schedule "30 11 * * *"

Listar gatilhos de temporizador

O comando az acr task timer list mostra os gatilhos de temporizador configurados para uma tarefa:

az acr task timer list --name timertask --registry $ACR_NAME

Saída de exemplo:

[
  {
    "name": "timer2",
    "schedule": "30 11 * * *",
    "status": "Enabled"
  },
  {
    "name": "t1",
    "schedule": "0 21 * * *",
    "status": "Enabled"
  }
]

Remover um gatilho de temporizador

Use o comando az acr task timer remove para remover um gatilho de temporizador de uma tarefa. O exemplo abaixo remove o gatilho timer2 de timertask:

az acr task timer remove \
  --name timertask \
  --registry $ACR_NAME \
  --timer-name timer2

Expressões Cron

As Tarefas do ACR usam a biblioteca NCronTab para interpretar expressões Cron. As expressões com suporte nas Tarefas do ACR têm cinco campos obrigatórios separados por espaços em branco:

{minute} {hour} {day} {month} {day-of-week}

O fuso horário usado com as expressões cron é a Hora Universal Coordenada (UTC). As horas estão no formato de 24 horas.

Observação

As Tarefas do ACR não dão suporte para o campo {second} ou {year} em expressões cron. Se você copiar uma expressão cron usada em outro sistema, remova esses campos caso sejam usados.

Cada campo pode ter um dos seguintes tipos de valores:

Type Exemplo Quando disparado
Um valor específico "5 * * * *" a cada hora 5 minutos após a hora exata
Todos os valores (*) "* 5 * * *" a cada minuto da hora começando às 5:00 UTC (60 vezes por dia)
Um intervalo (- operador) "0 1-3 * * *" 3 vezes por dia, à 1:00, 2:00 e 3:00 UTC
Um conjunto de valores (, operador) "20,30,40 * * * *" 3 vezes por hora, a 20 minutos, 30 minutos e 40 minutos após a hora
Um valor de intervalo (/ operador) "*/10 * * * *" 6 vezes por hora, a 10 minutos, 20 minutos após a hora e assim por diante

Para especificar meses ou dias, você pode usar valores numéricos, nomes ou abreviações de nomes:

  • Por dias, os valores numéricos são 0 a 6, onde 0 começa com o domingo.
  • Nomes estão em inglês. Por exemplo, Monday, January.
  • Os nomes não diferenciam maiúsculas de minúsculas.
  • Os nomes podem ser abreviados. Três letras é o comprimento de abreviação recomendada. Por exemplo, Mon, Jan.

Exemplos de cron

Exemplo Quando disparado
"*/5 * * * *" uma vez a cada cinco minutos
"0 * * * *" uma vez a cada hora
"0 */2 * * *" uma vez a cada duas horas
"0 9-17 * * *" uma vez a cada hora entre 9:00 e 17:00 UTC
"30 9 * * *" às 9:30 UTC todos os dias
"30 9 * * 1-5" às 9:30 UTC de segunda a sexta
"30 9 * Jan Mon" às 9:30 UTC toda segunda-feira em janeiro

Limpar recursos

Para remover todos os recursos que você criou nesta série de tutoriais, incluindo o registro ou registros de contêiner, a instância de contêiner, o cofre de chaves e a entidade de serviço, execute os seguintes comandos:

az group delete --resource-group $RES_GROUP
az ad sp delete --id http://$ACR_NAME-pull

Próximas etapas

Neste tutorial, você aprendeu a criar tarefas do Registro de Contêiner do Azure que são disparadas automaticamente por um temporizador.

Para ver um exemplo de como usar uma tarefa agendada para limpar repositórios em um registro, confira Limpar automaticamente as imagens de um registro de contêiner do Azure.

Para ver exemplos de tarefas disparadas por confirmações de código-fonte ou atualizações de imagem de base, confira outros artigos na série de tutoriais de Tarefas do ACR.