Condividi tramite


Eseguire la distribuzione in App contenitore di Azure da Azure Pipelines

Azure Container Apps consente di usare Azure Pipelines per pubblicare revisioni dell'applicazione di contenitori. Quando viene eseguito il push dei commit nel repository di Azure DevOps, viene attivata una pipeline che aggiorna l'immagine del contenitore nel registro del contenitore. Container Apps crea una nuova revisione basata sulla container image aggiornata.

I commit su un ramo specifico nel repository attivano la pipeline. Quando si crea la pipeline, si decide quale ramo è il trigger.

Attività di Azure Pipelines di App contenitore

L'attività supporta gli scenari seguenti:

  • Compilare da un Dockerfile e distribuire in App contenitore.
  • Compilare dal codice sorgente senza un Dockerfile e distribuirlo in Container Apps. I linguaggi supportati includono .NET, Java, Node.js, PHP e Python.
  • Distribuire un'immagine di container esistente su Container Apps.

Con la versione di produzione, questa attività viene fornita con Azure DevOps e non richiede l'installazione esplicita. Per la documentazione completa, vedere AzureContainerApps@1 - attività di distribuzione v1 (Azure Container Apps Deploy v1 task).

Esempi di utilizzo

Di seguito sono riportati alcuni scenari comuni per l'uso dell'attività. Per altre informazioni, vedere la documentazione dell'attività.

Creare e distribuire su 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 creare 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 di un container esistente su Container Apps

Il seguente snippet illustra come distribuire un'immagine del contenitore esistente in Container Apps. L'attività esegue l'autenticazione con il registro usando la connessione al servizio. Se all'identità della connessione del servizio non viene assegnato il ruolo AcrPush per il registro, specificare le credenziali di amministratore del registro utilizzando 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.

Autenticare con Azure Container Registry

L'attività App contenitore deve eseguire l'autenticazione con Registro Azure Container per eseguire il push dell'immagine del contenitore. L'app contenitore deve anche autenticarsi con il registro contenitori 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, Container Apps usa l'identità gestita (scelta consigliata) o le credenziali di amministratore per l'autenticazione con il container registry. Per usare l'identità gestita, l'app contenitore di destinazione per l'attività deve essere configurata per l'uso dell'identità gestita. Per autenticarsi con le credenziali di amministratore del registro, impostare gli input dell'attività acrUsername e acrPassword.

Impostazione

Completare la procedura seguente per configurare una pipeline di Azure DevOps da distribuire in App contenitore.

  • Creare un repository Azure DevOps per l'app
  • Creare un'applicazione container con identità gestita abilitata
  • Assegnare il ruolo AcrPull per il registro contenitori all'identità gestita dell'app contenitore
  • 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 completare le procedure descritte in questo articolo, è necessaria l'autorizzazione Collaboratore o Proprietario per la sottoscrizione di Azure. Per altre informazioni, vedere Assegnare ruoli di Azure tramite il portale di Azure.
Progetto DevOps di Azure Passare a Azure DevOps e selezionare Introduzione a Azure. 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.

  1. Accedere ad Azure DevOps e passare al progetto.

  2. Selezionare Repo nel riquadro sinistro.

  3. Selezionare Importa un repository.

  4. Immettere i valori seguenti e quindi selezionare Importa:

    Campo valore
    Tipo di repository Git
    Clone URL https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
  5. Seleziona Importa

  6. Selezionare Clona per visualizzare l'URL del repository e copiarlo.

  7. Aprire un prompt dei comandi 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

Crea la tua app contenitore completando i seguenti passaggi. Il az containerapp up comando crea risorse di Azure, compila l'immagine del contenitore, archivia l'immagine in un registro e distribuisce 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.

  1. Passare alla cartella src del repository clonato:

    cd my-container-app
    cd src
    
  2. Creare risorse di Azure e distribuire un'app contenitore usando il az containerapp up comando :

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    

    Suggerimento

    Se la compilazione ha esito negativo con un errore del repository Debian, assicurarsi di usare la versione più recente dell'interfaccia della riga di comando di Azure e l'estensione containerapp eseguendo az extension add --name containerapp --upgrade. In alternativa, aggiungere un Dockerfile al progetto per un maggiore controllo sulla compilazione.

  3. Nell'output del comando prendere nota del nome del Registro Azure Container.

  4. 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.

  5. 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.

  6. Assegnare il ruolo AcrPull per il registro contenitori 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 Container.

  7. Configurare l'applicazione container per utilizzare l'identità gestita per pullare le immagini dal registro 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 Container Apps, devi creare una connessione di servizio Azure DevOps per il tuo abbonamento Azure.

  1. In Azure DevOps, seleziona Impostazioni di progetto.

  2. Selezionare Connessioni al servizio.

  3. Seleziona Crea connessione al servizio.

  4. Selezionare Azure Resource Manager, quindi selezionare Avanti.

  5. Selezionare Registrazione app (automatica) e quindi selezionare Avanti.

  6. Specificare i valori seguenti e quindi 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

  1. Nel progetto Azure DevOps selezionare Pipeline.

  2. Selezionare Crea pipeline.

  3. Selezionare Azure Repos Git.

    Annotazioni

    Se Azure Repos Git non è disponibile come opzione, assicurarsi che il codice sorgente venga inserito in un repository Git nel progetto Azure DevOps.

  4. Selezionare il repository che contiene il codice sorgente (my-container-app).

  5. Selezionare Pipeline iniziale.

  6. 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. Sostituire <ACR_NAME> con il nome del registro Azure Container.

  7. Seleziona Salva ed Esegui.

Un processo di Azure Pipelines inizia a compilare e distribuire la tua applicazione container. Per controllare lo stato di avanzamento, passare a Pipeline e selezionare l'esecuzione. Durante la prima esecuzione della pipeline, potrebbe essere richiesto di autorizzare l'uso della connessione di servizio da parte della pipeline.

Per distribuire una nuova revisione dell'app, eseguire il push di un nuovo commit nel ramo principale.