Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il azd publish comando consente di compilare ed eseguire il push di immagini del contenitore in un registro contenitori come Registro Azure Container o l'hub Docker senza distribuirle immediatamente in una risorsa di Azure.
Separando i passaggi di compilazione e push dal passaggio di distribuzione, è possibile implementare flussi di lavoro di distribuzione più avanzati, ad esempio il modello "build once, deploy everywhere". Questo approccio è utile per le applicazioni in contenitori destinate ad App Azure Container o al servizio Azure Kubernetes.
Perché usare azd publish?
In un flusso di lavoro standard azd , il azd deploy comando esegue tre azioni in sequenza:
- Compilazione: compila il codice dell'applicazione in un'immagine del contenitore.
- Push: esegue il push dell'immagine in un registro.
- Implementazione: aggiorna il servizio di hosting su Azure (ad esempio Container Apps) per eseguire la nuova immagine.
Sebbene sia utile per lo sviluppo iterativo interno, questo approccio presuppone che ogni rilascio richieda una nuova compilazione. Negli scenari di produzione è spesso necessario:
- Compilare una sola volta, distribuire ovunque: compilare un singolo artefatto (immagine), testarlo in un ambiente di sviluppo e quindi alzare di livello lo stesso artefatto esattamente all'ambiente di produzione senza ricompilarlo.
- Centralizzare gli artefatti: usare un singolo Registro Azure Container condiviso per archiviare le immagini per tutti gli ambienti.
- Migliorare la sicurezza: assicurarsi che solo le immagini verificate e testate vengano distribuite nell'ambiente di produzione.
azd publish abilita questi scenari gestendo solo i passaggi 1 e 2 (compilazione e push). È quindi possibile usare azd deploy con flag specifici per gestire il passaggio 3 (Distribuisci) usando l'immagine prepubblicata.
Funzionalità principali
- Pubblicazione indipendente: pubblicare immagini in un registro senza attivare una distribuzione.
-
Destinazioni personalizzate: usare il
--toflag per specificare esattamente dove deve essere eseguito il push dell'immagine ([registry/]repository[:tag]), sostituendo le convenzioni di denominazione predefinite. - Supporto per registri di terze parti: eseguire il push nei registri esterni (ad esempio Docker Hub) oltre al Registro Azure Container.
-
Supporto ganci: supporta i ganci
prepublishepostpublishper l'automazione personalizzata. - Targeting dei servizi: supporta attualmente i servizi ospitati su App contenitore di Azure e AKS.
Usage
Per compilare e pubblicare l'immagine per un servizio specifico definito in azure.yaml:
azd publish <service-name>
Per compilare e pubblicare tutti i servizi:
azd publish --all
Parametri
| Flag | Description |
|---|---|
--all |
Pubblica tutti i servizi definiti in azure.yaml. |
--from-package <image> |
Usa un'immagine o un pacchetto locale esistente anziché crearlo dall'origine. |
--to <image-ref> |
Specifica il riferimento all'immagine di destinazione, ad esempio <your-registry>.azurecr.io/my-app:v1. Sovrascrive la denominazione predefinita in azure.yaml. |
Annotazioni
Per i servizi configurati con services.<name>.docker.imagePassthrough: true, azd publish non compila o esegue il push di un'immagine. Riutilizza invece l'immagine remota configurata e rifiuta i --from-package flag e --to per tale servizio.
Esempi
Pubblicare un servizio specifico in un tag personalizzato:
azd publish api-service --to <your-registry>.azurecr.io/api-service:v1.0.0
Pubblicare un'immagine locale in un registro remoto:
Se è già stata creata un'immagine in locale (ad esempio: local-api:dev), è possibile contrassegnarla ed eseguirne il push usando azd:
azd publish api-service --from-package local-api:dev --to <your-registry>.azurecr.io/api-service:v1.0.0
Scenario: costruire una sola volta, distribuire ovunque
Un flusso di lavoro di produzione comune prevede la creazione di un'immagine una sola volta e la promozione tramite più ambienti, ad esempio Sviluppo -> Test -> Prod. Ottenere questo risultato usando una combinazione di azd publish e azd deploy.
Questo scenario non si applica ai servizi configurati con services.<name>.docker.imagePassthrough: true, perché azd publish non compila o esegue il push di un'immagine per tali servizi.
Pubblicare l'immagine:
Compilare il codice ed eseguirne il push nel registro condiviso.
azd publish api-service --to <your-registry>.azurecr.io/my-app:v1.0.0Distribuzione nello sviluppo:
Distribuire la versione specifica dell'immagine nell'ambiente di sviluppo. Il flag
--from-packageindica aazd deploydi saltare i passaggi di build/invio e di aggiornare la configurazione del servizio semplicemente.azd env select dev azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0Alzare di livello la produzione:
Dopo il test in Dev, distribuire lo stesso riferimento all'immagine nell'ambiente di produzione.
azd env select prod azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0
Confronto con altri comandi
| Command | Azioni eseguite | Ideale per |
|---|---|---|
azd publish |
Compilazione -> Push | Pipeline CI/CD, creazione di artefatti, flussi di lavoro "Compila una sola volta". |
azd publish --from-package |
Solo push | invia artefatti predefiniti agli ambienti. |
azd deploy |
Compilazione -> Inoltro -> Distribuzione | Iterazione di sviluppo standard (ciclo interno). |
azd deploy --from-package |
Distribuire soltanto | distribuzione di artefatti pre-compilati/pre-pubblicati in ambienti. |
azd up |
Provision -> Compilazione -> Push -> Distribuzione | Introduzione, inizializzazione di nuovi ambienti da zero. |
Annotazioni
Il comportamento predefinito di azd up rimane invariato. Orchestra ancora il processo end-to-end completo. Tuttavia, è possibile personalizzare i flussi di lavoro in azure.yaml per usare azd publish se necessario.
Per i servizi configurati con services.<name>.docker.imagePassthrough: trueazd publish e azd publish --from-package non si applicano.
azd riutilizza l'immagine remota configurata invece di crearla o caricarla.
Configurazione in azure.yaml
Configurare le impostazioni docker predefinite per i servizi in azure.yaml. Il azd publish comando rispetta queste impostazioni a meno che non venga sovrascritto da flag come --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 questa configurazione, l'esecuzione di azd publish api porterà a un push in docker.io/myusername/my-api:latest.
Riutilizzare un'immagine remota con imagePassthrough
Se il servizio dispone già di un'immagine pubblicata che azd non deve compilare, eseguire il push o gestire in altro modo, impostare services.<name>.docker.imagePassthrough: true. Quando si abilita questa opzione:
- Impostare
services.<name>.imagesul riferimento finale completo e pienamente qualificato dell'immagine remota, incluso un registry esplicito. - Non è possibile combinare
docker.imagePassthroughcondocker.remoteBuild. -
azd publishnon compila o esegue il push di un'immagine per il servizio e rifiuta i--from-packageflag e--toper tale servizio.
name: my-app
services:
api:
host: containerapp
docker:
imagePassthrough: true
image: docker.io/myusername/my-api:v1.0.0