Criar e publicar imagens do Docker no Registro de Contêiner do Azure
Serviços de DevOps do Azure | Azure DevOps Server 2022
Usando o Azure Pipelines, você pode configurar um fluxo de trabalho de pipeline para criar e publicar suas imagens do Docker no Registro de Contêiner do Azure. Neste artigo, você aprenderá a:
- Criar um Azure Container Registry
- Configurar um agente auto-hospedado em uma VM do Azure
- Configurar a identidade do serviço gerenciado
- Criar uma conexão de serviço do Registro do Docker
- Criar e publicar sua imagem no Registro de Contêiner do Azure
Pré-requisitos
Uma conta GitHub. Registe-se gratuitamente, se ainda não tiver um.
Uma organização do Azure DevOps.
Um projeto de DevOps do Azure.
A função de Administrador para conexões de serviço em seu projeto de DevOps do Azure.
Uma conta do Azure com uma subscrição ativa. Registe-se gratuitamente se ainda não tiver um.
Obter o código
Fork ou clone o aplicativo de exemplo para acompanhar este tutorial.
https://github.com/MicrosoftDocs/pipelines-javascript-docker
Criar um Azure Container Registry
Navegue para o portal do Azure.
Selecione Criar um recurso no painel de navegação esquerdo e, em seguida, selecione Contêineres e, em seguida , Registro de contêiner.
Selecione a sua Subscrição e, em seguida, selecione o seu Grupo de recursos ou crie um novo.
Insira um nome de Registro para seu registro de contêiner. O nome do Registro deve ser exclusivo no Azure e deve conter pelo menos 5 caracteres.
Selecione a sua localização e SKU preferidas e, em seguida, selecione Rever + criar.
Reveja as suas definições e, em seguida, selecione Criar quando terminar.
Configurar uma VM de agente auto-hospedada
Para usar a Identidade de Serviço Gerenciado com o Azure Pipelines para publicar imagens do Docker no Registro de Contêiner do Azure, devemos configurar nosso próprio agente autohospedado em uma VM do Azure.
Criar uma VM
Navegue para o portal do Azure.
Selecione Criar um recurso no painel de navegação esquerdo e, em seguida, selecione Máquina virtual ->Criar.
Selecione sua Assinatura e, em seguida, selecione o grupo de recursos que você usou para criar seu registro de contêiner.
Dê um nome à sua máquina virtual e escolha uma Imagem.
Introduza o seu Nome de Utilizador e Palavra-passe e, em seguida, selecione Rever + criar.
Reveja as suas definições e, em seguida, selecione Criar quando terminar.
Selecione Ir para recurso quando concluir a implementação.
Criar um pool de agentes
No seu projeto do Azure DevOps, selecione o ícone de engrenagem para navegar até as configurações do projeto.
Selecione Pools de agentes e, em seguida, selecione Adicionar pool.
Selecione Novo e, em seguida, selecione Auto-hospedado no menu suspenso Tipo de pool.
Dê um nome ao seu pool e marque a caixa de seleção Conceder permissão de acesso a todos os pipelines .
Selecione Criar quando terminar.
Agora selecione o pool que você acabou de criar e, em seguida, selecione Novo agente.
Usaremos as instruções nesta janela para configurar seu agente na VM criada anteriormente. Selecione o botão Copiar para copiar o link de download para a área de transferência.
Criar um token de acesso pessoal
No seu projeto do Azure DevOps, selecione Configurações do Usuário e, em seguida, selecione Tokens de Acesso Pessoal.
Selecione Novo Token para criar um novo Token de Acesso Pessoal.
Introduza um nome para o PAT e, em seguida, escolha uma data de validade.
Selecione Personalizado definido em Escopos e, em seguida, selecione Mostrar todos os escopos.
Selecione Pools de agentes ->Read & manage e Deployment Groups ->Read & manage.
Selecione Criar quando terminar e guarde o PAT num local seguro.
Configurar um agente auto-hospedado
No portal do Azure, conecte-se à sua VM.
Em um prompt de comando do PowerShell elevado, execute o seguinte comando 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
Execute o seguinte comando 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")
Execute o seguinte comando para começar a configurar seu agente.
.\config.cmd
Introduza o URL do servidor quando lhe for solicitada a entrada. Exemplo: https://dev.azure.com/fabrikamFiber
Prima Enter quando lhe for pedido o tipo de autenticação para escolher a autenticação PAT .
Cole o token de acesso pessoal que criou anteriormente e, em seguida, prima enter.
Introduza o nome do conjunto de agentes e, em seguida, introduza o nome do agente.
Deixe o valor padrão para a pasta de trabalho e digite Y se quiser executar o agente como um serviço.
Agora que o agente está pronto para começar a escutar trabalhos, vamos instalar o Docker em nossa VM. Execute o seguinte comando para baixar o Docker.
Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
Navegue até o caminho de download e execute o seguinte comando para instalar e iniciar o Docker.
Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
Agora navegue de volta para a pasta do agente e execute o arquivo cmd para executar o agente na VM do Azure.
.\run.cmd
Seu agente deve ser listado agora em seu pool de agentes ->Agents no portal do Azure DevOps.
Configurar a identidade gerenciada
No portal do Azure, navegue até a VM criada anteriormente.
Selecione Identidade no painel de navegação esquerdo e habilite a identidade atribuída ao sistema.
Selecione Guardar quando terminar e, em seguida, confirme a sua escolha.
Selecione Atribuições de função do Azure e, em seguida, selecione Adicionar atribuição de função.
Selecione Grupo de recursos no menu suspenso Escopo .
Selecione a sua Subscrição e o seu grupo de Recursos e, em seguida, selecione a função AcrPush .
Repita as etapas 5 & 6 para adicionar a função AcrPull .
Criar uma conexão de serviço de registro do Docker
No seu projeto do Azure DevOps, selecione o ícone de engrenagem para navegar até as configurações do projeto.
Selecione Conexões de serviço no painel esquerdo.
Selecione Nova conexão de serviço e, em seguida, selecione Registro do Docker e, em seguida, Avançar.
Selecione Registro de Contêiner do Azure e, em seguida, selecione Identidade de Serviço Gerenciado como seu Tipo de Autenticação.
Introduza o nome da Subscrição de ID de Subscrição e o servidor de início de sessão do Registo de contentor do Azure. Cole o ID de Locatário atribuído ao sistema da VM que você criou na etapa anterior no campo de texto ID do Locatário .
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 de conexão de serviço.
Selecione Salvar quando terminar.
Criar e publicar no Registro de Contêiner do Azure
No seu projeto do Azure DevOps, selecione Pipelines e, em seguida, selecione Create Pipeline.
Selecione o serviço que hospeda seu código-fonte (Azure Repos, GitHub, etc.).
Selecione seu repositório e, em seguida, selecione Pipeline inicial.
Exclua o pipeline yaml padrão e use o seguinte trecho:
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)
Quando a execução do pipeline estiver 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.
Clean up resources (Limpar recursos)
Se você não planeja continuar usando este aplicativo, exclua o grupo de recursos para evitar incorrer em cobranças contínuas.
az group delete --name myapp-rg