Partilhar via


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

Serviços de DevOps do Azure | Azure DevOps Server 2022 | Azure DevOps Server 2020

Este artigo orienta você pela instalação e configuração para usar o Azure Pipelines para criar e enviar por push uma imagem do Docker para um Registro de Contêiner do Azure, Hub do Docker e Registro de Artefato do Google. Além disso, detalha o System.AccessToken uso do para autenticação segura dentro do seu pipeline.

Este artigo orienta você pela instalação e configuração para usar o Azure Pipelines para criar e enviar por push uma imagem do Docker para um Docker Hub e o Google Artifact Registry. Além disso, detalha o System.AccessToken uso do para autenticação segura dentro do seu pipeline.

Você aprende a criar um pipeline YAML para criar e enviar por push uma imagem do Docker para um registro de contêiner. A tarefa Docker@2 é usada para criar e enviar a imagem para o registro do contêiner.

Pré-requisitos

  • Um projeto de DevOps do Azure.
  • Um registro de contêiner (Docker Hub, Google Artifact Registry ou Azure Container Registry).
  • Um repositório GitHub com um Dockerfile. Se você não tiver um, você pode usar o repositório de exemplo Em seu navegador, vá para o repositório de exemplo e, em seguida, bifurque-o para sua conta do GitHub.
  • Docker. Se 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.
  • Um projeto de DevOps do Azure.
  • Um registro de contêiner (Docker Hub ou Google Artifact Registry).
  • Um repositório GitHub com um Dockerfile. Se você não tiver um, você pode usar o repositório de exemplo Em seu navegador, vá para o repositório de exemplo e, em seguida, bifurque-o para sua conta do GitHub.
  • Docker. Se 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.

Criar uma conexão de serviço do Docker

Antes de enviar imagens de contêiner 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 com o registro de contêiner. Vá para a página Conexões de serviço em seu projeto de DevOps do Azure para criar uma nova conexão de serviço e selecione o tipo de conexão do Registro do Docker.

Há diferentes processos para criar uma conexão de serviço para um Docker Hub e um Google Artifact Registry.

Escolha a opção Docker Hub em Conexão do serviço de registro do Docker e forneça seu nome de usuário e senha para criar uma conexão de serviço do Docker.

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

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.

As etapas a seguir descrevem como criar um pipeline YAML que usa a tarefa Docker@2 para criar e enviar por push a imagem.

  1. Navegue até seu projeto do Azure DevOps e selecione Pipelines no menu à esquerda.

  2. Selecione Novo pipeline para criar um novo pipeline.

  3. Selecione GitHub ou GitHub Enterprise Server como o local do seu código-fonte.

  4. Se ainda não o fez, autorize o Azure Pipelines a se conectar à sua conta do GitHub Enterprise Server.

    1. Selecione Conectar ao GitHub Enterprise Server.
    2. Introduza os detalhes da sua conta e, em seguida, selecione Verificar e guardar.
  5. Selecione o seu repositório. Se você for redirecionado para o GitHub

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

  7. Substitua o conteúdo do azure-pipelines.yml pelo código a seguir.

  8. Com base no fato de você estar implantando um aplicativo Linux ou Windows, certifique-se de definir vmImage respectivamente como um ubuntu-latest ou windows-latest. Se você estiver usando um agente auto-hospedado, defina vmImage como o nome do pool que contém o agente auto-hospedado com capacidade do Docker. Você pode adicionar a propriedade para garantir que um agente com o demands: docker Docker instalado seja selecionado.

  9. Substitua <docker connection> pelo nome da conexão de serviço do Docker criada anteriormente.

  10. Substitua <target repository name> pelo nome do repositório no registro do contêiner onde você deseja enviar a imagem por push. Por exemplo, <your-docker-hub-username>/<repository-name>.

    
     trigger:
     - main
    
     pool:
     vmImage: 'ubuntu-latest' 
    
     variables:
     repositoryName: '<target repository name>'
    
     steps:
     - task: Docker@2
     inputs:
     containerRegistry: '<docker connection>'
     repository: $(repositoryName)
     command: 'buildAndPush'
     Dockerfile: '**/Dockerfile'
    
    
  11. Quando terminar, selecione Salvar e executar.

  12. Ao salvar o arquivo azure-pipelines.yml no repositório, você será solicitado a adicionar uma mensagem de confirmação. Introduza uma mensagem e, em seguida, selecione Guardar e executar.

Ao usar agentes auto-hospedados, certifique-se de que o Docker esteja instalado no host do agente e que o mecanismo/daemon do Docker esteja sendo executado com privilégios elevados.

Para criar a imagem, o Docker deve ser instalado no host do agente e o mecanismo/daemon do Docker deve ser executado com privilégios elevados. Use as etapas a seguir para criar seu pipeline usando o editor de pipeline YAML.

  1. Vá para a sua coleção e crie um projeto.

  2. No seu projeto, selecione Pipelines.

  3. Selecione Criar Pipeline.

  4. Selecione GitHub Enterprise Server como o local para seu código-fonte.

  5. Se ainda não o fez, autorize o Azure Pipelines a se conectar à sua conta do GitHub Enterprise Server.

    1. Selecione Conectar ao GitHub Enterprise Server.
    2. Introduza os detalhes da sua conta e, em seguida, selecione Verificar e guardar.
  6. Selecione o seu repositório. Se você for redirecionado para o GitHub para instalar o aplicativo Azure Pipelines, selecione Aprovar e instalar.

  7. Para configurar seu pipeline, selecione o modelo de imagem Criar um Docker.

  8. No editor de pipeline YAML, substitua o conteúdo do arquivo YAML pelo código a seguir. Substitua o nome do pool pelo nome do pool que contém seu agente auto-hospedado pelo recurso Docker.

  9. Com base no fato de você estar implantando um aplicativo Linux ou Windows, certifique-se de definir vmImage respectivamente como um ubuntu-latest ou windows-latest.

  10. Substitua <target repository name> pelo nome do repositório no registro do contêiner onde você deseja enviar a imagem por push. Por exemplo, <your-docker-hub-username>/<repository-name>.

  11. Substitua <docker connection> pelo nome da conexão de serviço do Docker criada anteriormente.

    
    trigger:
    - main
    
    pool:
    name: default
    demands: docker
    
    variables:
    repositoryName: '<target repository name>'
    
    steps:
    - task: Docker@2
    inputs:
    containerRegistry: '<docker connection>'
    repository: $(repositoryName)
    command: 'buildAndPush'
    Dockerfile: '**/Dockerfile'
    
    
  12. Selecione Guardar e executar.

  13. Na página Salvar e executar, selecione Salvar e executar novamente.

Você pode observar a execução do pipeline e exibir os logs para ver a imagem do Docker sendo criada e enviada por push para o registro do contêiner.

Usando System.AccessToken para autenticação em Docker@2 tarefa

Você pode autenticar com um registro de contêiner usando o System.AccessToken fornecido pelo Azure DevOps. Esse token permite acesso seguro a recursos dentro do seu pipeline sem expor credenciais confidenciais.

O exemplo de pipeline YAML a seguir, a tarefa Docker@2 é usada para entrar no registro do contêiner e enviar por push a imagem do Docker. O System.AccessToken é definido como uma variável de ambiente para autenticar os comandos do Docker.

Substitua <docker connection> pelo nome de conexão do serviço de registro do Docker. Substitua <your repository> pelo nome do repositório do Docker.

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  SYSTEM_ACCESSTOKEN: $(System.AccessToken)

steps:
- task: Docker@2
  inputs:
    command: login
    containerRegistry: '<docker connection>'
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

- task: Docker@2
  inputs:
    command: buildAndPush
    repository: '<your repository>'
    dockerfile: '**/Dockerfile'
    tags: |
      $(Build.BuildId)
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)