Eseguire la distribuzione in App contenitore di Azure da Azure Pipelines
App contenitore di Azure consente di usare Azure Pipelines per pubblicare revisioni nell'app contenitore. Quando viene eseguito il push dei commit nel repository di Azure DevOps, viene attivata una pipeline che aggiorna l'immagine del contenitore nel registro contenitori. App contenitore di Azure crea una nuova revisione basata sull'immagine del contenitore aggiornata.
Il commit viene eseguito in un ramo specifico nel repository per attivare la pipeline. Quando si crea la pipeline, si decide quale ramo è il trigger.
Attività App contenitore di Azure Pipelines
L'attività supporta gli scenari seguenti:
- Compilare da un Dockerfile e distribuirlo in App contenitore
- Compilare dal codice sorgente senza un Dockerfile e distribuirlo in App contenitore. I linguaggi supportati includono .NET, Java, Node.js, PHP e Python
- Distribuire un'immagine del contenitore esistente in App contenitore
Con la versione di produzione, questa attività viene fornita con Azure DevOps e non richiede più l'installazione esplicita. Per la documentazione completa, vedere AzureContainerApps@1 - Attività Deploy v1 (Azure Container Apps Deploy v1).
Esempi di utilizzo
Ecco alcuni scenari comuni per l'uso dell'attività. Per altre informazioni, vedere la documentazione dell'attività.
Compilare e distribuire in App contenitore
Il frammento di codice seguente illustra come compilare un'immagine del contenitore dal codice sorgente e distribuirla in App contenitore.
steps:
- task: AzureContainerApps@1
inputs:
appSourcePath: '$(Build.SourcesDirectory)/src'
azureSubscription: 'my-subscription-service-connection'
acrName: 'myregistry'
containerAppName: 'my-container-app'
resourceGroup: 'my-container-app-rg'
L'attività usa il Dockerfile in appSourcePath
per compilare l'immagine del contenitore. Se non viene trovato alcun Dockerfile, l'attività tenta di compilare l'immagine del contenitore dal codice sorgente in appSourcePath
.
Distribuire un'immagine del contenitore esistente in App contenitore
Il frammento di codice seguente illustra come distribuire un'immagine del contenitore esistente in App contenitore. L'attività esegue l'autenticazione con il Registro di sistema usando la connessione al servizio. Se all'identità della connessione del servizio non viene assegnato il ruolo AcrPush
per il Registro di sistema, specificare le credenziali di amministratore del Registro di sistema usando i parametri di input acrUsername
e acrPassword
.
steps:
- task: AzureContainerApps@1
inputs:
azureSubscription: 'my-subscription-service-connection'
containerAppName: 'my-container-app'
resourceGroup: 'my-container-app-rg'
imageToDeploy: 'myregistry.azurecr.io/my-container-app:$(Build.BuildId)'
Importante
Se si compila un'immagine del contenitore in un passaggio separato, assicurarsi di usare un tag univoco, ad esempio l'ID di compilazione anziché un tag stabile come latest
. Per altre informazioni, vedere Procedure consigliate per i tag di immagine.
Eseguire l'autenticazione con Registro Azure Container
L'attività App contenitore di Azure deve eseguire l'autenticazione con Registro Azure Container per eseguire il push dell'immagine del contenitore. L'app contenitore deve anche eseguire l'autenticazione con Registro Azure Container per eseguire il pull dell'immagine del contenitore.
Per eseguire il push delle immagini, l'attività esegue automaticamente l'autenticazione con il registro contenitori specificato in acrName
usando la connessione al servizio fornita in azureSubscription
. Se all'identità della connessione del servizio non è assegnato il AcrPush
ruolo per il Registro di sistema, specificare le credenziali di amministratore del Registro di sistema usando acrUsername
e acrPassword
.
Per eseguire il pull delle immagini, App contenitore di Azure usa l'identità gestita (scelta consigliata) o le credenziali di amministratore per l'autenticazione con Registro Azure Container. Per usare l'identità gestita, l'app contenitore di destinazione per l'attività deve essere configurata per l'uso dell'identità gestita. Per eseguire l'autenticazione con le credenziali di amministratore del Registro di sistema, impostare gli input dell'attività acrUsername
e acrPassword
.
Impostazione
Seguire questa procedura per configurare una pipeline di Azure DevOps da distribuire in App contenitore di Azure.
- Creare un repository Azure DevOps per l'app
- Creare un'app contenitore con identità gestita abilitata
- Assegnare il ruolo
AcrPull
per Registro Azure Container all'identità gestita dell'app contenitore - Installare l'attività App contenitore di Azure da Azure DevOps Marketplace
- Configurare una connessione al servizio Azure DevOps per la sottoscrizione di Azure
- Creare una pipeline di Azure DevOps
Prerequisiti
Requisito | Istruzioni |
---|---|
Account di Azure | Se non si dispone di un account, crearne uno gratuitamente. Per continuare, è necessaria l'autorizzazione collaboratore o proprietario per la sottoscrizione di Azure. Per informazioni dettagliate, fare riferimento ad Assegnare ruoli di Azure usando il portale di Azure. |
Progetto DevOps di Azure | Passare ad Azure DevOps e selezionare Avvia gratuitamente. Poi, creare un nuovo progetto. |
Interfaccia della riga di comando di Azure | Installare l'interfaccia della riga di comando di Azure. |
Creare un repository Azure DevOps e clonare il codice sorgente
Prima di creare una pipeline, il codice sorgente per l'app deve trovarsi in un repository.
Accedere ad Azure DevOps e passare al progetto.
Aprire la pagina Repository.
Nella barra di spostamento superiore selezionare l'elenco a discesa repository e selezionare Importa repository.
Immettere le informazioni seguenti e selezionare Importa:
Campo valore Tipo di repository Git Clonare URL https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
Nome my-container-app
Selezionare Clona per visualizzare l'URL del repository e copiarlo.
Aprire un terminale ed eseguire il comando seguente:
git clone <REPOSITORY_URL> my-container-app
Sostituire
<REPOSITORY_URL>
con l'URL copiato.
Creare un'app contenitore e configurare l'identità gestita
Creare l'app contenitore usando il comando az containerapp up
con la procedura seguente. Questo comando crea risorse di Azure, compila l'immagine del contenitore, archivia l'immagine in un registro e distribuisce in un'app contenitore.
Dopo aver creato l'app, è possibile aggiungere un'identità gestita all'app e assegnare l'identità al ruolo AcrPull
per consentire all'identità di eseguire il pull delle immagini dal Registro di sistema.
Passare alla cartella src del repository clonato.
cd my-container-app cd src
Creare risorse di Azure e distribuire un'app contenitore con il
az containerapp up
comando.az containerapp up \ --name my-container-app \ --source . \ --ingress external
Nell'output del comando prendere nota del nome del Registro Azure Container.
Ottenere l'ID risorsa completo del registro contenitori.
az acr show --name <ACR_NAME> --query id --output tsv
Sostituire
<ACR_NAME>
con il nome del registro.Abilitare l'identità gestita per l'app contenitore.
az containerapp identity assign \ --name my-container-app \ --resource-group my-container-app-rg \ --system-assigned
Prendere nota dell'ID principale dell'identità gestita nell'output del comando.
Assegnare il ruolo
AcrPull
per Registro Azure Container all'identità gestita dell'app contenitore.az role assignment create \ --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \ --role AcrPull \ --scope <ACR_RESOURCE_ID>
Sostituire
<MANAGED_IDENTITY_PRINCIPAL_ID>
con l'ID entità dell'identità gestita e<ACR_RESOURCE_ID>
con l'ID risorsa del Registro Azure Container.Configurare l'app contenitore per usare l'identità gestita per eseguire il pull delle immagini dal Registro Azure Container.
az containerapp registry set \ --name my-container-app \ --resource-group my-container-app-rg \ --server <ACR_NAME>.azurecr.io \ --identity system
Sostituire
<ACR_NAME>
con il nome del Registro Azure Container.
Creare una connessione al servizio Azure DevOps
Per eseguire la distribuzione in App contenitore di Azure, è necessario creare una connessione al servizio Azure DevOps per la sottoscrizione di Azure.
In Azure DevOps, seleziona Impostazioni di progetto.
Selezionare Connessioni al servizio.
Selezionare Nuova connessione al servizio.
Selezionare Azure Resource Manager.
Selezionare Entità servizio (automatico) e selezionare Avanti.
Immettere le informazioni seguenti e selezionare Salva:
Campo Valore Abbonamento Seleziona la tua sottoscrizione di Azure. Gruppo di risorse Selezionare il gruppo di risorse ( my-container-app-rg
) che contiene l'app contenitore e il registro contenitori.Nome della connessione al servizio my-subscription-service-connection
Per altre informazioni sulle connessioni al servizio, vedere Connettersi a Microsoft Azure.
Creare una pipeline YAML di Azure DevOps
Nel progetto Azure DevOps selezionare Pipeline.
Selezionare New pipeline (Nuova pipeline).
Selezionare GIT Azure Repos.
Selezionare il repository che contiene il codice sorgente (
my-container-app
).Selezionare Pipeline starter.
Nell'editor sostituire il contenuto del file con il codice YAML seguente:
trigger: branches: include: - main pool: vmImage: ubuntu-latest steps: - task: AzureContainerApps@1 inputs: appSourcePath: '$(Build.SourcesDirectory)/src' azureSubscription: '<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>' acrName: '<ACR_NAME>' containerAppName: 'my-container-app' resourceGroup: 'my-container-app-rg'
Sostituire
<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>
con il nome della connessione al servizio Azure DevOps (my-subscription-service-connection
) creata nel passaggio precedente e<ACR_NAME>
con il nome del Registro Azure Container.Seleziona Salva ed Esegui.
Un'esecuzione di Azure Pipelines inizia a compilare e distribuire l'app contenitore. Per controllare lo stato di avanzamento, passare a Pipeline e selezionare l'esecuzione. Durante la prima esecuzione della pipeline, potrebbe essere richiesto di autorizzare la pipeline a usare la connessione al servizio.
Per distribuire una nuova revisione dell'app, eseguire il push di un nuovo commit nel ramo principale.