Compartilhar via


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

Azure DevOps Services

Este artigo orienta você pela criação de um pipeline para criar e enviar uma imagem do Docker para um Registro de Contêiner do Azure ou um Hub do Docker.

Pré-requisitos

Produto Requisitos
Azure DevOps - Um projeto do Azure DevOps.
- Permissões:
    - Para conceder acesso a todos os pipelines do projeto: você deve ser membro do grupo Administradores do Projeto.
    – Para criar conexões de serviço: você deve ter a função 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á em execução com privilégios elevados. Os agentes hospedados pela Microsoft têm o Docker pré-instalado.
GitHub - Uma conta do GitHub.
- Um repositório GitHub com um Dockerfile. Utilize o repositório de exemplo se você não tiver seu próprio projeto.
- Uma conexão do serviço GitHub para autorizar o Azure Pipelines.
Azure - Uma assinatura do Azure.
- Um Registro de Contêiner do Azure.
Produto Requisitos
Azure DevOps - Um projeto do Azure DevOps.
- Permissões:
    - Para conceder acesso a todos os pipelines do projeto: você deve ser membro do grupo Administradores do Projeto.
    – Para criar conexões de serviço: você deve ter a função 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á em execução com privilégios elevados. Os agentes hospedados pela Microsoft têm o Docker pré-instalado.
GitHub - Uma conta do GitHub.
- Um repositório GitHub com um Dockerfile. Use o repositório de exemplo se você não tiver seu próprio projeto.
- Uma conexão do serviço GitHub para autorizar o Azure Pipelines.
Docker Hub - Uma conta do Docker Hub.
- Um repositório de imagens Docker Hub.

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

Antes de enviar imagens de contêiner por push para um registro, você precisa criar uma conexão de serviço no Azure DevOps. Essa conexão de serviço armazena as credenciais necessárias para autenticar com segurança no registro de contêiner. 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 tela da seleção de configurações do Projeto.

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

    Captura de tela da seleção do Registro do Docker.

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

    Campo Descrição
    ID de Docker Insira sua ID do Docker.
    Senha do Docker Insira 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 permitir acesso a todos os pipelines.

    captura de tela do diálogo de conexão de serviço do Docker Hub.

  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 de contêiner. A tarefa Docker@2 foi projetada para simplificar o processo de criação, envio por push e gerenciamento de imagens do Docker em seu Azure Pipelines. Essa tarefa dá suporte a uma ampla variedade de comandos do Docker, incluindo compilar, enviar, fazer logon, fazer logout, iniciar, parar e executar.

Use as etapas a seguir para criar um pipeline YAML que usa a tarefa Docker@2 para compilar e efetuar push da imagem.

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

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

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

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

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

    
    trigger:
    - main
    
    pool:
      vmImage: 'ubuntu-latest' 
    
    variables:
      repositoryName: '<target repository name>' 
    
    steps:
    - task: Docker@2
      inputs:
        containerRegistry: '<docker registry service connection>'
        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 de contêiner para o qual você deseja enviar a imagem.
    • Substitua <docker registry service connection> pelo nome da conexão de serviço do Registro do Docker criada anteriormente.
  7. Quando terminar, selecione Salvar e executar>Salvar e executar.

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

  1. Acesse seu projeto do Azure DevOps e selecione Pipelines no menu à esquerda.

  2. Selecione Novo pipeline.

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

    • Se você for redirecionado para o GitHub para entrar, insira suas credenciais do GitHub.
    • Se você for redirecionado ao GitHub para instalar o aplicativo Azure Pipelines, selecione Aprovar e instalar.
  4. Selecione o modelo Docker - Criar e enviar uma imagem para o Registro de Contêiner do Azure.

  5. Escolha sua assinatura do Azure e selecione Continuar.

  6. Selecione o Registro de Contêiner e selecione 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: '7f9dc28e-5551-43ee-891f-33bf61a995de'
      imageRepository: 'usernamepipelinesjavascriptdocker'
      containerRegistry: 'repoistoryname.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 exibir os logs e verificar se o pipeline foi executado com êxito.

O modelo do Docker cria a conexão de serviço com o Registro de Contêiner do Azure e usa a tarefa Docker@2 para compilar e enviar por push a imagem do Docker para o registro.

A tarefa Docker@2 foi projetada para simplificar o processo de criação, envio por push e gerenciamento de imagens do Docker em seu Azure Pipelines. Essa tarefa dá suporte a uma ampla variedade de comandos do Docker, incluindo compilar, enviar, fazer logon, fazer logout, iniciar, parar e executar.

Ao usar agentes auto-hospedados, verifique se o Docker está instalado no host do agente e se o mecanismo/daemon do Docker está sendo executado com privilégios elevados.