Condividi tramite


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.

  1. Accedere ad Azure DevOps e passare al progetto.

  2. Aprire la pagina Repository.

  3. Nella barra di spostamento superiore selezionare l'elenco a discesa repository e selezionare Importa repository.

  4. 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
  5. Selezionare Clona per visualizzare l'URL del repository e copiarlo.

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

  1. Passare alla cartella src del repository clonato.

    cd my-container-app
    cd src
    
  2. 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 
    
  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 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.

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

  1. In Azure DevOps, seleziona Impostazioni di progetto.

  2. Selezionare Connessioni al servizio.

  3. Selezionare Nuova connessione al servizio.

  4. Selezionare Azure Resource Manager.

  5. Selezionare Entità servizio (automatico) e selezionare Avanti.

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

  1. Nel progetto Azure DevOps selezionare Pipeline.

  2. Selezionare New pipeline (Nuova pipeline).

  3. Selezionare GIT Azure Repos.

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

  5. Selezionare Pipeline starter.

  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 e <ACR_NAME> con il nome del Registro Azure Container.

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