Automatizar compilações e manutenção de imagem de contêiner com Tarefas do ACR

Os contêineres fornecem novos níveis de virtualização, isolando as dependências de aplicativo e desenvolvedor dos requisitos de infraestrutura e operacionais. No entanto, o que resta é a necessidade de abordar como essa virtualização de aplicativos é gerenciada e corrigida no ciclo de vida do contêiner.

O que são as Tarefas do ACR?

As Tarefas do ACR são um pacote de recursos do Registro de Contêiner do Azure. Elas fornecem compilação de imagens de contêiner baseada em nuvem para plataformas, incluindo Linux, Windows e ARM, e podem automatizar o patch de sistema operacional e de estrutura para seus contêineres do Docker. Além das Tarefas do ACR ampliarem seu ciclo de desenvolvimento de "loop interno" para a nuvem com compilações de imagem de contêiner sob demanda, elas também permitem compilações automatizadas acionadas pelas atualização do código-fonte, atualizações na imagem base do contêiner ou temporizadores. Por exemplo, com gatilhos de atualização de imagem de base, você pode automatizar seu sistema operacional e o fluxo de trabalho de aplicação de patch da estrutura de aplicativos, mantendo os ambientes protegidos enquanto se adere aos princípios de contêineres imutáveis.

[! IMPORTANTE] O ACR está pausando temporariamente as execuções da Tarefas do ACR dos créditos gratuitos do Azure. Isso pode afetar as execuções de Tarefas existentes. Se você tiver problemas, abra um caso de suporte para que a nossa equipe forneça mais orientações. Observe que os clientes existentes não serão afetados por essa pausa. Atualizaremos nosso aviso de documentação aqui sempre que a pausa for suspensa.

[! AVISO] Lembre-se de que todas as informações fornecidas na linha de comando ou como parte de um URI podem ser registradas como parte do rastreamento de diagnóstico do Registro de Contêiner do Azure (ACR). Isso inclui dados confidenciais, como credenciais, tokens de acesso pessoal do GitHub e outras informações seguras. Tenha cuidado para evitar possíveis riscos de segurança, é crucial evitar a inclusão de detalhes confidenciais em linhas de comando ou URIs que estejam sujeitos ao registro em log de diagnóstico.

Cenários de tarefas

As Tarefas do ACR são compatíveis com vários cenários para criar e manter imagens de contêiner e outros artefatos. Confira as seções a seguir neste artigo para obter detalhes.

Cada Tarefa do ACR tem um contexto de código-fonte associado – o local de um conjunto de arquivos de origem usados para compilar uma imagem de contêiner ou outro artefato. Os contextos de exemplo incluem um repositório Git ou um sistema de arquivos local.

As tarefas também podem aproveitar as variáveis de execução, para que você possa reutilizar as definições de tarefas e padronizar marcas para imagens e artefatos.

Tarefa rápida

O ciclo de desenvolvimento de loop interno, o processo iterativo de escrever código, compilar e testar o aplicativo antes de confirmar no controle do código-fonte, é realmente o início do gerenciamento de ciclo de vida do contêiner.

Antes que você confirme sua primeira linha de código, o recurso tarefas rápidas das Tarefas do ACR pode fornecer uma experiência de desenvolvimento integrada ao descarregar os builds de imagem de contêiner no Azure. Com as tarefas rápidas, você pode verificar suas definições de build automatizadas e detectar possíveis problemas antes de confirmar o código.

Usando o formato familiar docker build, o comando az acr build na CLI do Azure usa um contexto (o conjunto de arquivos a ser compilado), envia-o às Tarefas do ACR e, por padrão, envia a imagem de compilação por push ao seu registro após a conclusão.

Para introdução, confira o início rápido para compilar e executar uma imagem de contêiner no Registro de Contêiner do Azure.

O recurso Tarefas de ACR foi projetado como uma primitiva do ciclo de vida do contêiner. Por exemplo, é possível integrar as Tarefas do ACR à sua solução de CI/CD. Executando az login com uma entidade de serviço, sua solução CI/CD pode enviar os comandos az acr build para iniciar compilações da imagem.

Saiba como usar as tarefas rápidas no primeiro tutorial das Tarefas do ACR, Compilar imagens de contêiner na nuvem com as Tarefas do Registro de Contêiner do Azure.

Dica

Se você quiser compilar e enviar por push uma imagem diretamente do código-fonte, sem um Dockerfile, o Registro de Contêiner do Azure fornecerá o comando az acr pack build (versão preliminar). Essa ferramenta compila e envia por push uma imagem do código-fonte do aplicativo usando o Cloud Native Buildpacks.

Tarefa de gatilho na atualização do código-fonte

Aciona uma compilação de imagem de contêiner ou uma tarefa de várias etapas quando o código for confirmado ou uma solicitação de pull será realizada ou atualizada em um repositório Git público ou privado no GitHub ou no Azure DevOps. Por exemplo, configure uma tarefa de compilação com o comando da CLI do Azure az acr task create especificando um repositório Git e, opcionalmente, um branch e Dockerfile. Quando sua equipe atualiza o código no repositório, um webhook criado nas Tarefas do ACR dispara um build de imagem de contêiner definido no repositório.

As Tarefas do ACR dão suporte aos seguintes gatilhos quando você define um repositório Git como o contexto da tarefa:

Gatilho Habilitado por padrão
Commit Sim
Solicitação de pull Não

Observação

Atualmente, as Tarefas do ACR não dão suporte a gatilhos de solicitação de pull ou commit em Repos do GitHub Enterprise.

Saiba como disparar builds na confirmação do código-fonte no segundo tutorial das Tarefas do ACR, Automatizar builds de imagem de contêiner com as Tarefas do Registro de Contêiner do Azure.

Token de acesso pessoal

Para configurar um gatilho de atualização de código-fonte, você precisa fornecer à tarefa um PAT (token de acesso pessoal) para definir o webhook no GitHub público ou privado, ou no repositório do Azure DevOps. Os escopos necessários para o PAT são os seguintes:

Tipo de repositório GitHub DevOps
Repositório público repo:status
public_repo
Código (leitura)
Repositório privado repositório (controle completo) Código (leitura)

Para criar um PAT, confira a documentação do GitHub ou do Azure DevOps.

Automatizar sistema operacional e aplicação de patch de estrutura

O poder das Tarefas do ACR para realmente aprimorar seu fluxo de trabalho de build de contêiner vem da capacidade de detectar uma atualização para uma imagem de base. Um recurso da maioria das imagens de contêiner, uma imagem de base é uma imagem pai na qual uma ou mais imagens de aplicativo se baseiam. As imagens básicas normalmente contêm o sistema operacional e, às vezes, estruturas do aplicativo.

Você pode configurar uma Tarefa do ACR para rastrear uma dependência em uma imagem base ao criar uma imagem de aplicativo. Quando a imagem base atualizada é enviada por push para o registro ou uma imagem base é atualizada em um repositório público, como no Docker Hub, as Tarefas do ACR podem compilar automaticamente qualquer imagem de aplicativo baseada nela. Com essa detecção e recriação automáticas, as Tarefas do ACR poupam o tempo e o esforço normalmente necessários para acompanhar e atualizar manualmente cada imagem de aplicativo que faz referência à imagem base atualizada.

Saiba mais sobre gatilhos de atualização de imagem base para Tarefas do ACR. E saiba como disparar uma compilação de imagem quando uma imagem base é enviada por push para um registro de contêiner no tutorial Automatizar a compilação de imagem de contêiner quando uma imagem base é atualizada em um registro de contêiner do Azure

Agendar uma tarefa

Opcionalmente, agende uma tarefa configurando um ou mais gatilhos de temporizador ao criar ou atualizar a tarefa. Agendar uma tarefa é útil para executar cargas de trabalho de contêiner em um agendamento definido ou executar operações de manutenção ou testes em imagens enviadas por push regularmente para o registro. Para obter detalhes, confira Executar uma Tarefa do ACR em um agendamento definido.

Tarefas de várias etapas

As tarefas de várias etapas fornecem uma definição de tarefas com base em etapa e execução para criar, testar e aplicar patches em imagens de contêiner na nuvem. As etapas de tarefa definidas em um arquivo YAML especificam operações individuais de criação e envio por push para imagens de contêiner ou outros artefatos. Elas também podem definir a execução de um ou mais contêineres, com cada etapa usando o contêiner como seu ambiente de execução.

Por exemplo, você pode criar uma tarefa de várias etapa que automatiza o seguinte:

  1. Compilar uma imagem do aplicativo Web
  2. Executar o contêiner de aplicativo Web
  3. Compilar uma imagem de teste do aplicativo Web
  4. Executar o contêiner de teste de aplicativo Web que executa testes em relação à execução do contêiner de aplicativo
  5. Quando os testes são aprovados, compilar um pacote de arquivo morto de gráfico do Helm
  6. Executar um helm upgrade usando o novo pacote de arquivo morto do gráfico do Helm

As tarefas de várias etapas permitem que você divida o build, a execução e o teste de uma imagem em etapas mais combináveis, com suporte para dependência entre etapas. Com as tarefas de várias etapas nas Tarefas do ACR, há um controle mais granular sobre os fluxos de trabalho de build de imagem, de teste e de aplicação de patch no sistema operacional e na estrutura.

Saiba mais sobre as tarefas de várias etapas em Run multi-step build, test, and patch tasks in ACR Tasks (Executar tarefas de várias etapas de build, teste e patch nas Tarefas do ACR).

Locais de contexto

A tabela a seguir mostra exemplos de locais de contexto com suporte para as Tarefas do ACR:

Local do contexto Descrição Exemplo
Sistema de arquivos local Arquivos dentro de um diretório no sistema de arquivos local. /home/user/projects/myapp
Branch principal do GitHub Arquivos dentro da ramificação principal (ou outro padrão) de um repositório do GitHub público ou privado. https://github.com/gituser/myapp-repo.git
Ramificação GitHub Branch específico de um repositório do GitHub público ou privado. https://github.com/gituser/myapp-repo.git#mybranch
Subpasta do GitHub Arquivos dentro de uma subpasta em um repositório do GitHub público ou privado. O exemplo mostra a combinação de uma especificação de subpasta e branch. https://github.com/gituser/myapp-repo.git#mybranch:myfolder
Confirmação do GitHub Confirmação específica em um repositório GitHub público ou privado. O exemplo mostra a combinação de especificação de subpasta e hash de confirmação (SHA). https://github.com/gituser/myapp-repo.git#git-commit-hash:myfolder
Subpasta do Azure DevOps Arquivos em uma subpasta em um repositório do Azure público ou privado. O exemplo mostra a combinação de especificação de subpasta e branch. https://dev.azure.com/user/myproject/_git/myapp-repo#mybranch:myfolder
Tarball remoto Arquivos em um arquivo compactado em um servidor remoto. http://remoteserver/myapp.tar.gz
Artefato no registro de contêiner Arquivos de artefato de OCI em um repositório de registro de contêiner. oci://myregistry.azurecr.io/myartifact:mytag

Observação

Ao usar um repositório Git como um contexto para uma tarefa disparada por uma atualização do código-fonte, você precisará fornecer um PAT (token de acesso pessoal).

Plataformas de imagem

Por padrão, as Tarefas do ACR criam imagens para o SO Linux e a arquitetura amd64. Especifique a marca --platform para criar imagens do Windows ou do Linux para outras arquiteturas. Especifique o sistema operacional e, opcionalmente, uma arquitetura com suporte no formato de sistema operacional/arquitetura (por exemplo, --platform Linux/arm). Para arquiteturas ARM, especifique opcionalmente uma variante no formato do sistema operacional/arquitetura/variante (por exemplo, --platform Linux/arm64/v8):

Sistema operacional Arquitetura
Linux amd64
arm
arm64
386
Windows amd64

Exibir saída da tarefa

Cada execução de tarefa gera a saída de log que você pode inspecionar para determinar se as etapas da tarefa foram executadas com êxito. Quando você dispara uma tarefa manualmente, a saída de log para a execução da tarefa é transmitida para o console e também armazenada para recuperação posterior. Quando uma tarefa é disparada automaticamente, por exemplo, por uma confirmação de código-fonte ou uma atualização de imagem base, os logs das tarefas são apenas armazenados. Exiba os logs de execução no portal do Azure ou use o comando az acr task logs.

Veja mais sobre como Exibir e gerenciar logs de tarefas.

Próximas etapas

Quando estiver pronto para automatizar as compilações e a manutenção da imagem de contêiner na nuvem, confira a série de tutoriais de Tarefas do ACR.

Opcionalmente, instale a Extensão do Docker para Visual Studio Code e a extensão Conta do Azure para trabalhar com seus registros de contêiner do Azure. Efetue pull e push de imagens para um registro de contêiner do Azure ou execute Tarefas do ACR, tudo isso no Visual Studio Code.