Partilhar via


Usar o Azure Pipelines para criar e enviar imagens de contêiner para registros

Serviços de DevOps do Azure

Este artigo orienta-o na criação de um pipeline para construir e enviar uma imagem Docker para um Azure Container Registry ou Docker Hub. No final deste tutorial, terás um pipeline CI/CD funcional que constrói automaticamente a tua imagem Docker e a envia para o registo de contentores escolhido.

Pré-requisitos

Produto Requisitos
Azure DevOps - Um projeto Azure DevOps .
- Permissões:
    - Para conceder acesso a todos os pipelines no projeto: Você deve ser membro do grupo Administradores de Projeto.
    - Para criar conexões de serviço: Deve ter a função de Administrador ou Criador para conexões de serviço.
- Se você estiver usando um agente auto-hospedado, verifique se o Docker está instalado e se o mecanismo do Docker está sendo executado com privilégios elevados. Os agentes hospedados pela Microsoft têm o Docker pré-instalado.
GitHub - Uma conta GitHub.
- Um repositório GitHub com um Dockerfile. Use o repositório de exemplo se você não tiver seu próprio projeto.
- Uma ligação de serviço do GitHub para autorizar o Azure Pipelines.
Azul - Uma assinatura do Azure.
- Um Azure Container Registry.
Produto Requisitos
Azure DevOps - Um projeto Azure DevOps .
- Permissões:
    - Para conceder acesso a todos os pipelines no projeto: Você deve ser membro do grupo Administradores de Projeto.
    - Para criar conexões de serviço: Deve ter a função de Administrador ou Criador para conexões de serviço.
- Se você estiver usando um agente auto-hospedado, verifique se o Docker está instalado e se o mecanismo do Docker está sendo executado com privilégios elevados. Os agentes hospedados pela Microsoft têm o Docker pré-instalado.
GitHub - Uma conta GitHub.
- Um repositório GitHub com um Dockerfile. Use o repositório de exemplo se você não tiver seu próprio projeto.
- Uma ligação de serviço do GitHub para autorizar o Azure Pipelines.
Hub do Docker - Uma conta Docker Hub.
- Um Docker Hub repositório de imagens.

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

Antes de enviar imagens de contentores para um registo, crie uma ligação de serviço no Azure DevOps. Esta ligação de serviço armazena as credenciais necessárias para autenticar de forma segura junto do Azure Container Registry. Para obter mais informações, consulte conexões de serviço do Registro do Docker.

  1. Em seu projeto do Azure DevOps, selecione Configurações do projeto>Conexões de serviço.

    Captura de ecrã a mostrar como navegar até às definições do projeto e às ligações de serviço no Azure DevOps.

  2. Selecione Nova conexão de serviço e Registro do Docker.

    Captura de ecrã a mostrar o menu de ligação ao novo serviço com a opção Docker Registry selecionada.

  3. Selecione do Docker Hub e insira as seguintes informações:

    Campo Descrição
    ID do Docker Insira seu ID do Docker.
    Senha do Docker Digite sua senha do Docker.
    Nome da conexão de serviço Insira um nome para a conexão de serviço.
    Conceder permissão de acesso a todos os pipelines Selecione esta opção para conceder acesso a todas as linhas de produção.

    Captura de ecrã do diálogo de ligação ao serviço Docker Hub mostrando campos para ID Docker, palavra-passe e nome da ligação ao serviço.

  4. Selecione Verificar e salvar.

Criar um pipeline para criar e enviar por push uma imagem do Docker

A tarefa Docker@2 é usada para criar e enviar a imagem para o registro do contêiner. A tarefa Docker@2 simplifica o processo de construção, push e gestão de imagens Docker dentro dos seus Azure Pipelines. Esta tarefa suporta uma vasta gama de comandos Docker, incluindo build, push, login, logout, start, stop, , e run.

Use os passos seguintes para criar um pipeline YAML que utiliza a tarefa Docker@2 para construir e fazer push da imagem.

  1. No seu projeto Azure DevOps, selecione Pipelines e New pipeline.

  2. Selecione do GitHub como o local do código-fonte e selecione o repositório.

    • Se você for redirecionado para o GitHub para entrar, insira suas credenciais do GitHub.
    • Se você for redirecionado para o GitHub para instalar o aplicativo Azure Pipelines, selecione Aprovar e instalar.
  3. Selecione o seu repositório.

  4. Selecione o modelo de pipeline inicial para criar uma configuração básica de pipeline.

  5. Substitua o conteúdo do azure-pipelines.yml pelo seguinte código:

    
    trigger:
    - main
    
    pool:
      vmImage: 'ubuntu-latest' 
    
    variables:
      # Replace with the name of your target Docker Hub or Azure Container Registry repository
      repositoryName: '<image-repository-name>' 
    
    steps:
    - task: Docker@2
      inputs:
        # Replace with the service connection name created in previous steps
        containerRegistry: '<docker-registry-service-connection-name>'
        repository: $(repositoryName)
        command: 'buildAndPush'
        Dockerfile: '**/Dockerfile'
    
    
  6. Edite o arquivo YAML do pipeline da seguinte maneira:

    • Substitua <target repository name> pelo nome do repositório no registro do contêiner onde você deseja enviar a imagem por push.
    • Substitua <docker registry service connection> pelo nome da conexão do serviço de registro do Docker criada anteriormente.
  7. Quando terminar, selecione Guardar e executar>Guardar e executar.

  8. Selecione trabalho para ver os logs e verificar se o pipeline foi executado com êxito.

  1. Vá para seu projeto de DevOps do Azure e selecione Pipelines no menu à esquerda.

  2. Selecione Novo fluxo de trabalho.

  3. Selecione do GitHub como o local do código-fonte e selecione o repositório.

    • Se você for redirecionado para o GitHub para entrar, insira suas credenciais do GitHub.
    • Se você for redirecionado para o GitHub para instalar o aplicativo Azure Pipelines, selecione Aprovar e instalar.
  4. Selecione o modelo Docker - Criar e fazer o push de uma imagem para o Registo de Contentores Azure.

  5. Selecione sua assinatura do Azure e Continue.

  6. Seleciona o registo do teu contentor e depois seleciona Validar e configurar.

    Exemplo de pipeline YAML:

    # Docker
    # Build and push an image to Azure Container Registry
    # https://docs.microsoft.com/azure/devops/pipelines/languages/docker
    
    trigger:
    - main
    
    resources:
    - repo: self
    
    variables:
      # Container registry service connection established during pipeline creation
      dockerRegistryServiceConnection: '<docker-registry-service-connection-id>'
      imageRepository: '<image-repository-name>'
      containerRegistry: '<container-registry-name>.azurecr.io'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
      # Agent VM image name
      vmImageName: 'ubuntu-latest'
    
    stages:
    - stage: Build
      displayName: Build and push stage
      jobs:
      - job: Build
        displayName: Build
        pool:
          vmImage: $(vmImageName)
        steps:
        - task: Docker@2
          displayName: Build and push an image to container registry
          inputs:
            command: buildAndPush
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            containerRegistry: $(dockerRegistryServiceConnection)
            tags: |
              $(tag)
    
    
  7. Selecione Salvar e executar e Salvar e executar novamente.

  8. Selecione trabalho para ver os logs e verificar se o pipeline foi executado com êxito.

O template Docker cria a ligação de serviço ao teu Azure Container Registry e usa a tarefa Docker@2 para construir e enviar a imagem Docker para o registo.

A tarefa Docker@2 foi projetada para simplificar o processo de criação, envio por push e gerenciamento de imagens do Docker em seus Pipelines do Azure. Esta tarefa suporta uma ampla gama de comandos do Docker, incluindo build, push, login, logout, start, stop e run.

Ao usar agentes auto-hospedados, certifique-se de que o Docker está instalado no host do agente e que o motor/daemon Docker está a correr com permissões administrativas.