Compilación y publicación de imágenes de Docker en Azure Container Registry
Azure DevOps Services | Azure DevOps Server 2022
Con Azure Pipelines, puede configurar un flujo de trabajo de canalización para compilar y publicar las imágenes de Docker en Azure Container Registry. En este artículo, aprenderá a:
- Creación de una instancia de Azure Container Registry
- Configurar un agente autohospedado en una máquina virtual de Azure.
- Configuración de la identidad de servicio administrada
- Crear una conexión de servicio de Registro de Docker
- Compilar y publicar la imagen de Docker en Azure Container Registry.
Requisitos previos
Una cuenta de GitHub. Si no tiene ninguna, regístrese para obtener una gratuita.
El rol Administrador para las conexiones de servicio en el proyecto Azure DevOps.
Una cuenta de Azure con una suscripción activa. Si no tiene ninguna, regístrese para obtener una gratuita.
Obtención del código
Bifurque o clone la aplicación de ejemplo para seguir este tutorial.
https://github.com/MicrosoftDocs/pipelines-javascript-docker
Creación de una instancia de Azure Container Registry
Navegue hasta Azure Portal.
Seleccione Crear un recurso en el panel de navegación izquierdo y, luego, elija Contenedores y Container Registry.
En Suscripción, seleccione la suscripción y en Grupo de recursos, seleccione el grupo de recursos o cree uno nuevo.
En Nombre del Registro, escriba un nombre para el registro de contenedor. El nombre del registro debe ser único dentro de Azure y contener al menos 5 caracteres.
En Ubicación y SKU, seleccione las que prefiera y, luego, elija Revisar y crear.
Revise la configuración y, cuando haya terminado, seleccione Crear.
Configuración de una máquina virtual de agente autohospedado
Para usar Managed Service Identity con Azure Pipelines para publicar imágenes de Docker en Azure Container Registry, debemos configurar nuestro propio agente autohospedado en una máquina virtual de Azure.
Crear una VM
Navegue hasta Azure Portal.
Seleccione Crear un recurso en el panel de navegación izquierdo y, luego, elija Máquina virtual ->Crear.
En Suscripción, seleccione la suscripción y, luego, en Grupo de recursos, elija el que usó para crear el registro de contenedor.
Asigne un nombre a la máquina virtual y elija una imagen.
Rellene los campos de Nombre de usuario y Contraseña y, luego, elija Revisar y crear.
Revise la configuración y, cuando haya terminado, seleccione Crear.
Seleccione Ir al recurso cuando se complete la implementación.
Creación de un grupo de agentes
En el proyecto de Azure DevOps, seleccione el icono de engranaje para ir a Configuración del proyecto.
Seleccione Grupos de agentes y, luego, elija Agregar grupo.
Seleccione Nuevo y, en el menú desplegable Tipo de grupo, elija Autohospedado.
Asigne un nombre al grupo y, luego, active la casilla Conceder permiso de acceso a todas las canalizaciones.
Seleccione Crear cuando haya terminado.
Ahora, seleccione el grupo que acaba de crear y, luego, elija Nuevo agente.
Usaremos las instrucciones de esta ventana para configurar el agente en la máquina virtual que creó anteriormente. Seleccione el botón Copiar para copiar el vínculo de descarga en el Portapapeles.
Crear un token de acceso personal
En el proyecto de Azure DevOps, seleccione Configuración de usuario y, luego, elija Tokens de acceso personal.
Seleccione Nuevo token para crear un nuevo token de acceso personal.
Escriba un nombre para este y elija una fecha de expiración.
Seleccione Definido por el usuario en Ámbitos y, luego, elija Mostrar todos los ámbitos.
Seleccione Grupos de agentes ->Leer y administrar y Grupos de implementación ->Leer y administrar.
Cuando haya terminado, seleccione Crear y guarde su token de acceso personal en una ubicación segura.
Configuración de un agente autohospedado
En Azure Portal, conéctese a la máquina virtual.
En un símbolo del sistema de PowerShell con privilegios elevados, ejecute el siguiente comando para descargar el agente.
Invoke-WebRequest -URI <YOUR_AGENT_DOWNLOAD_LINK> -UseBasicParsing -OutFile <FILE_PATH> ##Example: Invoke-WebRequest -URI https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-win-x64-2.213.2.zip -OutFile C:\vsts-agent-win-x64-2.213.2.zip
Ejecute el siguiente comando para extraer y crear el agente.
mkdir agent ; cd agent Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
Ejecute el siguiente comando para empezar a configurar el agente.
.\config.cmd
Cuando se le solicite, escriba la dirección URL del servidor. Ejemplo: https://dev.azure.com/fabrikamFiber
Cuando se le solicite el tipo de autenticación, elija PAT y presione Entrar.
Pegue el token de acceso personal que creó anteriormente y presione "Entrar".
Escriba el nombre del grupo de agentes y, luego, el nombre del agente.
Deje el valor predeterminado de carpeta de trabajo y escriba S si quiere ejecutar el agente como un servicio.
Ahora que el agente está listo para empezar a escuchar trabajos, vamos a instalar Docker en nuestra máquina virtual. Ejecute el siguiente comando para descargar Docker.
Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
Vaya a la ruta de acceso de descarga y ejecute el siguiente comando para instalar e iniciar Docker.
Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
Ahora, vuelva a la carpeta del agente y ejecute el archivo cmd para ejecutar el agente en la máquina virtual de Azure.
.\run.cmd
El agente debe aparecer ahora en el grupo de agentes ->Agentes en el portal de Azure DevOps.
Configuración de la identidad administrada
En Azure Portal, vaya a la máquina virtual que creó anteriormente.
Seleccione Identidad en el panel de navegación izquierdo y, luego, habilite la identidad Asignada por el sistema.
Cuando haya acabado, seleccione Guardar y confirme su elección.
Seleccione Asignaciones de roles de Azure y haga clic en Agregar asignación de roles.
Seleccione Grupo de recursos en el menú desplegable Ámbito.
En Suscripción, seleccione la suscripción, en Grupo de recursos, seleccione el grupo de recursos y, luego, elija el rol AcrPush.
Repita los pasos 5 y 6 para agregar el rol AcrPull.
Creación de una conexión de servicio de registro de Docker
- Identidad de servicio administrada
- Entidad de seguridad de servicio
- Federación de identidades de carga de trabajo
En el proyecto de Azure DevOps, seleccione el icono de engranaje para ir a Configuración del proyecto.
Seleccione Conexiones de servicio en el panel izquierdo.
Seleccione Nueva conexión de servicio, después Registro de Docker y, por último, Siguiente.
Seleccione Azure Container Registry y, luego, en Tipo de autenticación, elija Managed Service Identity.
Escriba los valores de ID de suscripción Nombre de la suscripción y el servidor de inicio de sesión del registro de contenedor de Azure. Pegue el identificador de inquilino asignado por el sistema de la máquina virtual que creó en el paso anterior en el campo de texto ID de inquilino.
Escriba un nombre para la conexión de servicio y active la casilla Conceder permiso de acceso a todas las canalizaciones. Para seleccionar esta opción, necesitarás el rol de conexión de servicio Administrador.
Cuando haya terminado, seleccione Guardar.
Implementación y publicación en Azure Container Registry
En el proyecto de Azure DevOps, seleccione Canalizaciones y, después, Crear canalización.
Seleccione el servicio que hospeda el código fuente (Azure Repos, GitHub, etc.).
Seleccione el repositorio y, luego, elija Canalización inicial.
Elimine la canalización YAML predeterminada y use el siguiente fragmento de código:
trigger: - main variables: dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>' imageRepository: '<IMAGE_NAME>' dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile' tag: '$(Build.BuildId)' stages: - stage: Build displayName: Build and publish stage jobs: - job: Build displayName: Build job pool: name: '<YOUR_AGENT_POOL_NAME>' steps: - task: DockerInstaller@0 inputs: dockerVersion: '17.09.0-ce' - task: Docker@2 displayName: Build and publish image to Azure Container Registry inputs: command: buildAndPush containerRegistry: $(dockerRegistryServiceConnection) repository: $(imageRepository) dockerfile: $(dockerfilePath) tags: | $(tag)
Una vez completada la ejecución de canalización, puede comprobar la imagen en Azure. Vaya a Azure Container Registry en Azure Portal y seleccione Repositorios.
Limpieza de recursos
Si no tiene previsto seguir usando esta aplicación, elimine el grupo de recursos para evitar incurrir en cargos continuos.
az group delete --name myapp-rg