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
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Início Rápido para Bash no Azure Cloud Shell.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
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:
- Para dias, os valores numéricos são de 0 a 6, onde 0 começa com 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. Recomendamos usar três letras para abreviações. 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.