Compartir vía


Flujos de trabajo de publicación de la CLI para desarrolladores de Azure

El azd publish comando permite compilar e insertar imágenes de contenedor en un registro de contenedor como Azure Container Registry o Docker Hub sin implementarlas inmediatamente en un recurso de Azure.

Al separar los pasos de compilación e inserción del paso de implementación, puede implementar flujos de trabajo de implementación más avanzados, como el patrón "compilar una vez, implementar en todas partes". Este enfoque es útil para las aplicaciones en contenedores destinadas a Azure Container Apps o Azure Kubernetes Service (AKS).

¿Por qué usar azd publish?

En un flujo de trabajo estándar azd , el azd deploy comando realiza tres acciones en secuencia:

  1. Compilación: compila el código de la aplicación en una imagen de contenedor.
  2. Inserción: inserta esa imagen en un registro.
  3. Implementación: actualiza el servicio de hospedaje de Azure (como Container Apps) para ejecutar la nueva imagen.

Aunque resulta conveniente para el desarrollo de bucles internos, este enfoque supone que cada implementación requiere una nueva compilación. En escenarios de producción, a menudo se quiere:

  • Compilar una vez, implementar en todas partes: cree un único artefacto (imagen), pruébelo en un entorno de desarrollo y, a continuación, promueva ese mismo artefacto exacto a producción sin volver a generarlo.
  • Centralizar artefactos: use una sola instancia compartida de Azure Container Registry (ACR) para almacenar imágenes para todos los entornos.
  • Mejorar la seguridad: asegúrese de que solo se implementan imágenes comprobadas y probadas en producción.

azd publish habilita estos escenarios controlando solo los pasos 1 y 2 (compilación y empuje). A continuación, puede usar azd deploy con marcas específicas para controlar el paso 3 (Implementar) mediante la imagen publicada previamente.

Características clave

  • Publicación independiente: publique imágenes en un registro sin desencadenar una implementación.
  • Destinos personalizados: use la --to marca para especificar exactamente dónde se debe insertar la imagen ([registry/]repository[:tag]), invalidando las convenciones de nomenclatura predeterminadas.
  • Compatibilidad con el Registro de terceros: inserción en registros externos (como Docker Hub) además de Azure Container Registry.
  • Soporte de ganchos: admite prepublish y postpublish ganchos para la automatización personalizada.
  • Destino del servicio: actualmente admite servicios hospedados en Azure Container Apps y AKS.

Usage

Para compilar y publicar la imagen para un servicio específico definido en azure.yaml:

azd publish <service-name>

Para compilar y publicar todos los servicios:

azd publish --all

Parámetros

Flag Description
--all Publica todos los servicios definidos en azure.yaml.
--from-package <image> Usa una imagen o paquete local existente en lugar de compilar a partir del origen.
--to <image-ref> Especifica la referencia de imagen de destino (por ejemplo, <your-registry>.azurecr.io/my-app:v1). Invalida la nomenclatura predeterminada en azure.yaml.

Examples

Publique un servicio específico en una etiqueta personalizada:

azd publish api-service --to <your-registry>.azurecr.io/api-service:v1.0.0

Publicar una imagen local en un registro remoto:

Si ya ha creado una imagen localmente (por ejemplo: local-api:dev), puede etiquetarla e insertarla mediante azd:

azd publish api-service --from-package local-api:dev --to <your-registry>.azurecr.io/api-service:v1.0.0

Escenario: Compilación una vez, implementación en todas partes

Un flujo de trabajo de producción común implica crear una imagen una vez y promocionarla a través de varios entornos, como Dev -> Test -> Prod. Consigue esto mediante una combinación de azd publish y azd deploy.

  1. Publique la imagen:

    Compile el código e insértelo en el registro compartido.

    azd publish api-service --to <your-registry>.azurecr.io/my-app:v1.0.0
    
  2. Implementación en desarrollo:

    Implemente la versión de imagen específica en el entorno de desarrollo. La --from-package bandera indica a azd deploy que omita los pasos de compilar y empujar y solo actualice la configuración del servicio.

    azd env select dev
    azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0
    
  3. Implementar en producción:

    Después de realizar pruebas en Dev, implemente la misma referencia de imagen al entorno de producción.

    azd env select prod
    azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0
    

Comparación con otros comandos

Command Acciones realizadas Mejor para
azd publish Construir -> Enviar Pipelines de CI/CD, creación de artefactos, flujos de trabajo de "Compilar una vez".
azd publish --from-package Solo cargar envía artefactos pregenerados a entornos.
azd deploy Construir -> Push -> Desplegar Iteración de desarrollo estándar (bucle interno).
azd deploy --from-package Solo implementación implementar artefactos precompilados/publicados previamente a entornos.
azd up Aprovisionamiento:> Compilación:> Push:> Implementación Introducción, inicialización de nuevos entornos desde cero.

Nota:

El comportamiento predeterminado de azd up permanece sin cambios. Todavía organiza el proceso completo de un extremo a otro. Sin embargo, puede personalizar sus flujos de trabajo en azure.yaml para utilizar azd publish si es necesario.

Configuración en azure.yaml

Configure los valores predeterminados de Docker para los servicios en azure.yaml. El azd publish comando respeta esta configuración a menos que se invalide mediante marcas como --to.

name: my-app
services:
  api:
    project: ./src/api
    host: containerapp
    docker:
      registry: 'docker.io/myusername' # Default registry
      image: 'my-api'                  # Default image name
      tag: 'latest'                    # Default tag

Con esta configuración, ejecutar azd publish api empujaría a docker.io/myusername/my-api:latest.

Pasos siguientes