Tutorial: Executar uma tarefa ACR em um cronograma definido

Este tutorial mostra como executar uma tarefa ACR em uma agenda. Agende uma tarefa configurando um ou mais gatilhos de temporizador. Os gatilhos de temporizador podem ser usados sozinhos ou em combinação com outros gatilhos de tarefa.

Neste tutorial, saiba mais sobre como agendar tarefas e:

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

Agendar uma tarefa é útil para cenários como os seguintes:

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

Pré-requisitos

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

Sobre o agendamento de uma tarefa

  • Gatilho com expressão cron - O gatilho de temporizador para uma tarefa usa uma expressão cron. A expressão é uma cadeia de caracteres com cinco campos que especificam o minuto, a hora, o dia, o mês e o dia da semana para acionar a tarefa. São suportadas frequências até uma vez por minuto.

    Por exemplo, a expressão "0 12 * * Mon-Fri" dispara uma tarefa ao meio-dia UTC em cada dia da semana. Veja detalhes mais adiante neste artigo.

  • Vários gatilhos de temporizador - É permitido adicionar vários temporizadores a uma tarefa, 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 ACR fornecerão nomes de gatilho padrão.
    • Se as agendas do temporizador se sobrepõem de cada vez, as Tarefas ACR acionam a tarefa na hora agendada para cada temporizador.
  • Outros gatilhos de tarefa - Em uma tarefa acionada por temporizador, você também pode habilitar gatilhos com base em confirmação de código-fonte ou atualizações de imagem base. Como outras tarefas ACR, você também pode executar manualmente uma tarefa agendada.

Criar uma tarefa com um gatilho de temporizador

Comando Tarefa

Primeiro, preencha a seguinte variável de ambiente de shell com um valor apropriado para seu ambiente. Este passo não é estritamente necessário, mas facilita um pouco a execução dos comandos da CLI do Azure com várias linhas neste tutorial. Se você não preencher a variável de ambiente, deverá substituir manualmente cada valor onde quer que ele apareça 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 --schedule parâmetro e passe uma expressão cron para o temporizador.

Como um exemplo simples, a tarefa a seguir aciona a hello-world execução da imagem do 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 de 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 contexto de código-fonte. A tarefa a seguir aciona a hello-world execução da imagem do Microsoft Container Registry todos os dias às 21:00 UTC.

Siga os Pré-requisitos para criar o contexto do código-fonte e, em seguida, crie 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 de 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 acionar a tarefa manualmente.

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

Acionar a tarefa

Acione a tarefa manualmente com az acr task run para garantir que ela esteja 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 é 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 acionou a tarefa conforme o esperado:

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

Quando o temporizador é bem-sucedido, 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 az acr task timer para gerenciar os gatilhos de timer para uma tarefa ACR.

Adicionar ou atualizar um gatilho de temporizador

Depois que uma tarefa for criada, opcionalmente, adicione um gatilho de temporizador usando o comando az acr task timer add . O exemplo a seguir adiciona um nome de gatilho de temporizador timer2 à timertask criada anteriormente. Este 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 * * *"

Atualize o agendamento de um gatilho existente ou altere seu status usando o comando az acr task timer update . Por exemplo, atualize 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 timer de uma tarefa. O exemplo a seguir remove o gatilho timer2 de timertask:

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

Expressões Cron

ACR Tasks usa a biblioteca NCronTab para interpretar expressões cron. As expressões suportadas nas Tarefas ACR têm cinco campos obrigatórios separados por espaço em branco:

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

O fuso horário usado com as expressões cron é Tempo Universal Coordenado (UTC). As horas são em formato de 24 horas.

Nota

ACR Tasks não suporta o {second} campo ou {year} em expressões cron. Se você copiar uma expressão cron usada em outro sistema, certifique-se de remover esses campos, se eles forem usados.

Cada campo pode ter um dos seguintes tipos de valores:

Tipo Exemplo Quando acionado
Um valor específico "5 * * * *" a cada hora a 5 minutos depois da hora
Todos os valores (*) "* 5 * * *" a cada minuto da hora a partir das 5:00 UTC (60 vezes por dia)
Um intervalo (- operador) "0 1-3 * * *" 3 vezes por dia, às 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, em 10 minutos, 20 minutos, e assim por diante, após a hora

Para especificar meses ou dias, você pode usar valores numéricos, nomes ou abreviaturas de nomes:

  • Para os dias, os valores numéricos são de 0 a 6, onde 0 começa com domingo.
  • Os 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 abreviatura recomendado. Por exemplo: Mon, Jan.

Exemplos de Cron

Exemplo Quando acionado
"*/5 * * * *" uma vez a cada cinco minutos
"0 * * * *" uma vez no topo de cada hora
"0 */2 * * *" uma vez a cada duas horas
"0 9-17 * * *" uma vez a cada hora das 9:00 às 17:00 UTC
"30 9 * * *" às 9:30 UTC todos os dias
"30 9 * * 1-5" às 9:30 UTC todos os dias da semana
"30 9 * Jan Mon" às 9:30 UTC todas as segundas-feiras de janeiro

Clean up resources (Limpar recursos)

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

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

Próximos passos

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

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

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