Compartilhar via


Compilar e publicar a imagem do Docker no Registro de Contêiner do Azure

Azure DevOps Services | Azure DevOps Server 2022

Usando o Azure Pipelines, você pode configurar um fluxo de trabalho de pipeline para compilar e publicar suas imagens do Docker para Registro de Contêiner do Azure. Neste artigo, você aprenderá a:

  • Criar um Registro de Contêiner do Azure
  • Configurar um agente auto-hospedado em uma VM do Azure
  • Configurar a Identidade de Serviço Gerenciada
  • Criar uma conexão de serviço do Registro do Docker
  • Compilar e publicar sua imagem no Registro de Contêiner do Azure

Pré-requisitos

Obter o código

Bifurque ou clone o aplicativo de exemplo para acompanhar esse tutorial.

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Criar um Registro de Contêiner do Azure

  1. Navegue até o portal do Azure.

  2. Selecione Criar um recurso no painel de navegação esquerdo e selecione Contêineres e Registro de Contêiner.

  3. Selecione sua Assinatura e selecione seu Grupo de recursos ou crie um novo.

  4. Insira um Nome de registro para o registro de contêiner. O nome do registro deve ser exclusivo no Azure e deve conter pelo menos 5 caracteres.

  5. Selecione seu Local e SKU preferidos e selecione Examinar + criar.

  6. Examine suas configurações e selecione Criar quando terminar.

Configurar uma VM de agente auto-hospedado

Para usar a Identidade de Serviço Gerenciada com o Azure Pipelines para publicar imagens do Docker no Registro de Contêiner do Azure, devemos configurar nosso agente auto-hospedado em uma VM do Azure.

Criar uma máquina virtual

  1. Navegue até o portal do Azure.

  2. Selecione Criar um recurso no painel de navegação esquerdo e selecione Máquina virtual ->Criar.

  3. Selecione sua Assinatura e selecione o Grupo de recursos que você usou para criar seu registro de contêiner.

  4. Dê um nome à sua máquina virtual e escolha uma Imagem.

  5. Insira seu Nome de usuário e Senha e selecione Examinar + criar.

  6. Examine as configurações e selecione Criar quando terminar.

  7. Selecione Ir para o recurso quando a implantação estiver concluída.

Criar um pool de agentes

  1. No projeto do Azure DevOps, selecione o ícone de engrenagem ícone de engrenagem para navegar até as Configurações do projeto.

  2. Selecione Pools de agentes e selecione Adicionar pool.

  3. Selecione Novo e selecione Auto-hospedado no menu suspenso Tipo de pool.

  4. Dê um nome ao pool e marque a caixa de seleção Conceder permissão de acesso a todos os pipelines.

  5. Selecione Criar quando terminar.

  6. Agora, selecione o pool que você acabou de criar e selecione Novo agente.

  7. Usaremos as instruções nesta janela para configurar seu agente na VM que você criou anteriormente. Selecione o botão Copiar para copiar o link de download para a área de transferência.

    Uma captura de tela mostrando como configurar um agente.

Criar um token de acesso pessoal

  1. Em seu projeto do Azure DevOps, selecione Configurações do Usuário e selecione Tokens de Acesso Pessoal.

  2. Selecione Novo Token para criar um novo Token de Acesso Pessoal.

  3. Insira um nome para o PAT e escolha uma data de validade.

  4. Selecione Personalizado definido em Escopos e selecione Mostrar todos os escopos.

  5. Selecione Pools de Agentes ->Ler e gerenciar e Grupos de Implantação ->Ler e gerenciar.

  6. Selecione Criar quando terminar e salve seu PAT em um local seguro.

Configurar um agente auto-hospedado

  1. No portal do Azure, conecte-se à VM.

  2. Em um prompt de comando do PowerShell com privilégios elevados, execute o comando a seguir para baixar o agente.

    Invoke-WebRequest -URI <YOUR_AGENT_DOWNLOAD_LINK> -UseBasicParsing  -OutFile <FILE_PATH> 
    ##Example: Invoke-WebRequest -URI https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-win-x64-2.213.2.zip -OutFile C:\vsts-agent-win-x64-2.213.2.zip
    
  3. Execute o comando a seguir para extrair e criar seu agente.

    mkdir agent ; cd agent
    Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
    
  4. Execute o comando a seguir para começar a configurar o agente.

    .\config.cmd
    
  5. Insira a URL do servidor quando solicitado a inserir. Exemplo: https://dev.azure.com/fabrikamFiber

  6. Quando for solicitado qual tipo de autenticação escolher, pressione Enter para autenticação PAT.

  7. Cole o token de acesso pessoal que você criou anteriormente e pressione Enter.

  8. Insira o nome do pool de agentes e insira o nome do agente.

  9. Deixe o valor padrão para a pasta de trabalho e insira Y se quiser executar o agente como um serviço.

    Uma captura de tela mostrando como configurar um agente em uma VM do Azure.

  10. Agora que o agente está pronto para começar a escutar trabalhos, vamos instalar o Docker em nossa VM. Execute o comando a seguir para baixar o Docker.

    Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
    
  11. Navegue até o caminho de download e execute o comando a seguir para instalar e iniciar o Docker.

    Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
    
  12. Agora, navegue de volta para a pasta do agente e execute o arquivo cmd para executar o agente em sua VM do Azure.

    .\run.cmd
    
  13. Seu agente deve estar listado agora no pool de agentes ->Agentes no portal do Azure DevOps.

    Uma captura de tela mostrando o agente disponível na guia agentes.

Configurar a identidade gerenciada

  1. No portal do Azure, navegue até a VM que você criou anteriormente.

  2. Selecione Identidade no painel de navegação esquerdo e habilite a identidade Atribuída pelo sistema.

  3. Selecione Salvar quando terminar e confirme sua escolha.

    Uma captura de tela mostrando como habilitar a identidade atribuída pelo sistema.

  4. Selecione Atribuições de função do Azuree, em seguida, selecione Adicionar atribuição de função.

  5. Selecione Grupo de recursos no menu suspenso Escopo.

  6. Selecione sua Assinatura e seu Grupo de recursos e selecione a função AcrPush.

  7. Repita as etapas 5 e 6 para adicionar a função AcrPull.

    Uma captura de tela mostrando como configurar funções acrpull e push.

Criar uma conexão de serviço do registro do Docker

  1. No projeto do Azure DevOps, selecione o ícone de engrenagem ícone de engrenagem para navegar até as Configurações do projeto.

  2. Selecione Conexões de serviço no painel esquerdo.

  3. Selecione Nova conexão de serviço, escolha Registro do Docker e selecione Próximo.

  4. Selecione Registro de Contêiner do Azure e selecione Identidade de Serviço Gerenciada como o Tipo de Autenticação.

  5. Insira a ID da assinatura o Nome da assinatura e o servidor de logon do registro de contêiner do Azure. Cole a ID do locatário atribuída pelo sistema da VM que você criou na etapa anterior no campo de texto ID do locatário.

  6. Insira um nome para sua conexão de serviço e marque a caixa de seleção Conceder permissão de acesso a todos os pipelines. Para selecionar essa opção, você precisará da função de Administrador da conexão de serviço.

  7. Selecione Save quando terminar.

    Uma captura de tela mostrando como configurar uma MSI de conexão de serviço do registro do Docker.

Compilar e publicar no Registro de Contêiner do Azure

  1. No seu projeto do Azure DevOps, selecione Pipelines e Criar Pipeline.

  2. Selecione o serviço que hospeda seu código-fonte (Azure Repos, GitHub etc).

  3. Selecione o repositório e selecione Pipeline inicial.

  4. Exclua o pipeline yaml padrão e use o seguinte snippet:

    trigger:
    - main
    
    variables:
      dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>'
      imageRepository: '<IMAGE_NAME>'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
    stages:
    - stage: Build
      displayName: Build and publish stage
      jobs:
      - job: Build
        displayName: Build job
        pool:
          name: '<YOUR_AGENT_POOL_NAME>'
        steps:
        - task: DockerInstaller@0
          inputs:
            dockerVersion: '17.09.0-ce'
    
        - task: Docker@2
          displayName: Build and publish image to Azure Container Registry
          inputs:
            command: buildAndPush
            containerRegistry: $(dockerRegistryServiceConnection)
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            tags: |
              $(tag)
    
  5. Depois que a execução do pipeline for concluída, você poderá verificar sua imagem no Azure. Navegue até o Registro de Contêiner do Azure no portal do Azure e selecione Repositórios.

    Uma captura de tela mostrando a imagem no portal do Azure.

Limpar os recursos

Se você não planeja continuar usando esse aplicativo, exclua o grupo de recursos para evitar incorrer em encargos contínuos.

az group delete --name myapp-rg