Compartir a través de


Uso de Azure Pipelines para compilar e insertar imágenes de contenedor en registros

Servicios de Azure DevOps

Este artículo le guía en la creación de una canalización para construir y publicar una imagen de Docker en Azure Container Registry o Docker Hub. Al final de este tutorial, tendrá una canalización de CI/CD en funcionamiento que compila automáticamente la imagen de Docker e la inserta en el registro de contenedor elegido.

Requisitos previos

Producto Requisitos
Azure DevOps - Un proyecto de Azure DevOps.
- Permisos:
    - Para conceder acceso a todas las canalizaciones del proyecto: debe ser miembro del grupo de Administradores de Proyectos .
    - Para crear conexiones de servicio: debe tener el rol de Administrador o Creador para conexiones de servicio.
- Si usa un agente autoalojado, asegúrese de que Docker está instalado y de que el motor de Docker se ejecuta con privilegios elevados. Los agentes hospedados por Microsoft tienen Docker preinstalado.
GitHub - Una cuenta de GitHub .
: un repositorio de GitHub con un Dockerfile. Utilice el repositorio de ejemplo si no tiene su propio proyecto.
- Una conexión de servicio de GitHub para autorizar Azure Pipelines.
Celeste - Una suscripción de Azure.
- Una instancia de Azure Container Registry.
Producto Requisitos
Azure DevOps - Un proyecto de Azure DevOps.
- Permisos:
    - Para conceder acceso a todas las canalizaciones del proyecto: debe ser miembro del grupo de Administradores de Proyectos .
    - Para crear conexiones de servicio: debe tener el rol de Administrador o Creador para conexiones de servicio.
- Si usa un agente autoalojado, asegúrese de que Docker está instalado y de que el motor de Docker se ejecuta con privilegios elevados. Los agentes hospedados por Microsoft tienen Docker preinstalado.
GitHub - Una cuenta de GitHub .
: un repositorio de GitHub con un Dockerfile. Utilice el repositorio de ejemplo si no tiene su propio proyecto.
- Una conexión de servicio de GitHub para autorizar Azure Pipelines.
Docker Hub - Una cuenta de Docker Hub .
- Un repositorio de imágenes Docker Hub.

Creación de una conexión de servicio del registro de Docker

Antes de insertar imágenes de contenedor en un registro, cree una conexión de servicio en Azure DevOps. Esta conexión de servicio almacena las credenciales necesarias para autenticarse de forma segura con Azure Container Registry. Para obtener más información, consulte Conexiones de servicio del Registro de Docker.

  1. En el proyecto de Azure DevOps, seleccione Configuración del proyecto>Conexiones de servicio.

    Captura de pantalla que muestra cómo navegar a la configuración del proyecto y las conexiones de servicio en Azure DevOps.

  2. Seleccione nueva conexión de servicio y Docker Registry.

    Captura de pantalla que muestra el menú Nueva conexión de servicio con la opción Registro de Docker seleccionada.

  3. Seleccione de Docker Hub y escriba la siguiente información:

    Campo Descripción
    ID de Docker Escriba el identificador de Docker.
    Contraseña de Docker Escriba la contraseña de Docker.
    nombre de conexión del servicio Escriba un nombre para la conexión de servicio.
    Conceder permiso de acceso a todas las canalizaciones Seleccione esta opción para conceder acceso a todas las canalizaciones.

    Captura de pantalla del cuadro de diálogo de conexión del servicio Docker Hub que muestra los campos del identificador de Docker, la contraseña y el nombre de conexión del servicio.

  4. Seleccione Verifique y guarde.

Crear una canalización para construir y enviar una imagen de Docker

La tarea Docker@2 se usa para compilar e insertar la imagen en el registro de contenedor. La tarea Docker@2 simplifica el proceso de creación, inserción y administración de imágenes de Docker en Azure Pipelines. Esta tarea admite una amplia gama de comandos de Docker, incluidos build, push, login, logout, start, stop y run.

Siga estos pasos para crear una canalización YAML que use la tarea Docker@2 para compilar e insertar la imagen.

  1. En el proyecto de Azure DevOps, seleccione Canalizaciones y Nueva canalización.

  2. Seleccione gitHub como ubicación del código fuente y seleccione el repositorio.

    • Si se le redirige a GitHub para iniciar sesión, escriba las credenciales de GitHub.
    • Si se le redirige a GitHub para instalar la aplicación de Azure Pipelines, seleccione Aprobar e instalar.
  3. Seleccione el repositorio.

  4. Seleccione la plantilla Canalización inicial para crear una configuración básica de canalización.

  5. Reemplace el contenido de azure-pipelines.yml por el código siguiente:

    
    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 el archivo YAML de canalización de la siguiente manera:

    • Reemplace <target repository name> por el nombre del repositorio en el registro de contenedor donde desea insertar la imagen.
    • Sustituya <docker registry service connection> por el nombre de la conexión del servicio de registro de Docker que creó antes.
  7. Cuando haya terminado, seleccione Guardar y ejecutar>Guardar y ejecutar.

  8. Seleccione Trabajo para ver los registros y comprobar que el pipeline se ejecutó correctamente.

  1. Vaya al proyecto de Azure DevOps y seleccione Pipelines en el menú de la izquierda.

  2. Seleccione Nueva canalización.

  3. Seleccione gitHub como ubicación del código fuente y seleccione el repositorio.

    • Si se le redirige a GitHub para iniciar sesión, escriba las credenciales de GitHub.
    • Si se le redirige a GitHub para instalar la aplicación de Azure Pipelines, seleccione Aprobar e instalar.
  4. Seleccione la plantilla de Docker - Compilación e inserción de una imagen en Azure Container Registry .

  5. Seleccione la suscripción de Azure y Continuar.

  6. Seleccione el registro de contenedor y, a continuación, seleccione Validar y configurar.

    Canalización DE YAML de ejemplo:

    # 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. Seleccione Guardar y ejecutar y Guardar y volver a ejecutar.

  8. Seleccione Trabajo para ver los registros y comprobar que el pipeline se ejecutó correctamente.

La plantilla de Docker crea la conexión de servicio a Azure Container Registry y usa la tarea Docker@2 para compilar e insertar la imagen de Docker en el registro.

La tarea Docker@2 está diseñada para simplificar el proceso de creación, inserción y administración de imágenes de Docker en Azure Pipelines. Esta tarea admite una amplia gama de comandos de Docker, como compilación, inserción, inicio de sesión, cierre de sesión, inicio, detención y ejecución.

Al usar agentes autohospedados, asegúrese de que Docker está instalado en el host del agente y el motor o demonio de Docker se está ejecutando con permisos administrativos.