Compartir a través de


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

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

Este artículo le guía por la configuración y la configuración para usar Azure Pipelines para compilar e insertar una imagen de Docker en una instancia de Azure Container Registry, Docker Hub y Google Artifact Registry. Además, detalla el uso de para System.AccessToken la autenticación segura dentro de la canalización.

Este artículo le guía a través de la configuración y configuración para usar Azure Pipelines para compilar e insertar una imagen de Docker en un Docker Hub y en el Registro de artefactos de Google. Además, detalla el uso de para System.AccessToken la autenticación segura dentro de la canalización.

Aprenderá a crear una canalización YAML para compilar e insertar una imagen de Docker en un registro de contenedor. La tarea Docker@2 se usa para compilar e insertar la imagen en el registro de contenedor.

Requisitos previos

  • Un proyecto de Azure DevOps.
  • Un registro de contenedor (Docker Hub, Google Artifact Registry o Azure Container Registry).
  • Un repositorio de GitHub con un Dockerfile. Si no tiene una, puede usar el repositorio de ejemplo En el explorador, vaya al repositorio de ejemplo y, a continuación, bifurquelo a la cuenta de GitHub.
  • Docker. Si usa un agente autohospedado, asegúrese de que Docker está instalado y del motor de Docker que se ejecuta con privilegios elevados. Los agentes hospedados por Microsoft tienen Docker preinstalado.
  • Un proyecto de Azure DevOps.
  • Un registro de contenedor (Docker Hub o Google Artifact Registry).
  • Un repositorio de GitHub con un Dockerfile. Si no tiene una, puede usar el repositorio de ejemplo En el explorador, vaya al repositorio de ejemplo y, a continuación, bifurquelo a la cuenta de GitHub.
  • Docker. Si usa un agente autohospedado, asegúrese de que Docker está instalado y del motor de Docker que se ejecuta con privilegios elevados. Los agentes hospedados por Microsoft tienen Docker preinstalado.

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

Antes de insertar imágenes de contenedor en un registro, debe crear una conexión de servicio en Azure DevOps. Esta conexión de servicio almacena las credenciales necesarias para autenticarse de forma segura con el registro de contenedor. Vaya a la página Conexiones de servicio del proyecto de Azure DevOps para crear una nueva conexión de servicio y seleccione el tipo de conexión del Registro de Docker.

Hay diferentes procesos para crear una conexión de servicio para un Docker Hub y un Registro de artefactos de Google.

Elija la opción Docker Hub en Conexión de servicio del registro de Docker y proporcione el nombre de usuario y la contraseña para crear una conexión de servicio de Docker.

Creación de una canalización de Azure para compilar e insertar una imagen de Docker

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.

En los pasos siguientes se describe cómo crear una canalización YAML que use la tarea Docker@2 para compilar e insertar la imagen.

  1. Vaya al proyecto de Azure DevOps y seleccione Canalizaciones en el menú izquierdo.

  2. Seleccione Nueva canalización para crear una nueva canalización.

  3. Seleccione GitHub o GitHub Enterprise Server como ubicación para el código fuente.

  4. Si aún no lo ha hecho, autorice a Azure Pipelines a conectarse a su cuenta de Servidor de GitHub Enterprise.

    1. Seleccione Conexión al servidor de GitHub Enterprise.
    2. Escriba los detalles de la cuenta y, a continuación, seleccione Comprobar y guardar.
  5. Seleccione el repositorio. Si se le redirige a GitHub

  6. Seleccione la plantilla De canalización de inicio para crear una configuración básica de canalización.

  7. Reemplace el contenido de la clase azure-pipelines.yml por el código siguiente.

  8. En función de si va a implementar una aplicación de Linux o Windows, asegúrese de establecer vmImage en ubuntu-latest o windows-latest. Si usa un agente autohospedado, establezca vmImage en el nombre del grupo que contiene el agente autohospedado con la funcionalidad de Docker. Puede agregar la demands: docker propiedad para asegurarse de que está seleccionado un agente con Docker instalado.

  9. Reemplace <docker connection> por el nombre de la conexión del servicio Docker que creó anteriormente.

  10. Reemplace <target repository name> por el nombre del repositorio en el registro de contenedor donde desea insertar la imagen. Por ejemplo, <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. Cuando haya terminado, seleccione Guardar y ejecutar.

  12. Al guardar el archivo azure-pipelines.yml en el repositorio, se le pedirá que agregue un mensaje de confirmación. Escriba un mensaje y, a continuación, seleccione Guardar y ejecutar.

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

Para crear la imagen, Docker debe estar instalado en el host del agente y el motor o demonio de Docker debe ejecutarse con privilegios elevados. Siga estos pasos para crear la canalización mediante el editor de canalizaciones de YAML.

  1. Vaya a la colección y cree un proyecto.

  2. En el proyecto, seleccione Canalizaciones.

  3. Seleccione Crear canalización.

  4. Seleccione Servidor de GitHub Enterprise como ubicación del código fuente.

  5. Si aún no lo ha hecho, autorice a Azure Pipelines a conectarse a su cuenta de Servidor de GitHub Enterprise.

    1. Seleccione Conexión al servidor de GitHub Enterprise.
    2. Escriba los detalles de la cuenta y, a continuación, seleccione Comprobar y guardar.
  6. Seleccione el repositorio. Si se le redirige a GitHub para instalar la aplicación de Azure Pipelines, seleccione Aprobar e instalar.

  7. Para configurar la canalización, seleccione la plantilla Crear una imagen de Docker.

  8. En el editor de canalizaciones de YAML, reemplace el contenido del archivo YAML por el código siguiente. Reemplace el nombre del grupo por el nombre del grupo que contiene el agente autohospedado por la funcionalidad de Docker.

  9. En función de si va a implementar una aplicación de Linux o Windows, asegúrese de establecer vmImage en ubuntu-latest o windows-latest.

  10. Reemplace <target repository name> por el nombre del repositorio en el registro de contenedor donde desea insertar la imagen. Por ejemplo, <your-docker-hub-username>/<repository-name>.

  11. Reemplace <docker connection> por el nombre de la conexión del servicio Docker que creó 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. Seleccione Guardar y ejecutar.

  13. En la página Guardar y ejecutar, seleccione Guardar y ejecutar de nuevo.

Puede ver la ejecución de la canalización y ver los registros para ver la imagen de Docker que se compila e inserta en el registro de contenedor.

Uso de System.AccessToken para la autenticación en Docker@2 tarea

Puede autenticarse con un registro de contenedor mediante el System.AccessToken proporcionado por Azure DevOps. Este token permite el acceso seguro a los recursos de la canalización sin exponer credenciales confidenciales.

En el siguiente ejemplo de canalización YAML, la tarea Docker@2 se usa para iniciar sesión en el registro de contenedor e insertar la imagen de Docker. System.AccessToken se establece como una variable de entorno para autenticar los comandos de Docker.

Reemplace por <docker connection> el nombre de conexión del servicio del registro de Docker. Reemplace <your repository> por el nombre del repositorio de 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)