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. Recomendamos o uso de três letras para abreviaturas. 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.