Condividi tramite


Distribuzione continua con contenitori personalizzati nel Servizio app di Azure

In questa esercitazione verrà configurata la distribuzione continua per un'immagine personalizzata del contenitore da repository gestite del Registro Azure Container o dall'hub Docker.

1. Vai al Centro distribuzione

Nel portale di Azure, andare alla pagina di gestione dell'app del Servizio app.

Nel menu a sinistra, fare clic su Centro distribuzione>Impostazioni.

2. Scegliere l'origine della distribuzione

Scegliere l'origine della distribuzione dipende dallo scenario in uso:

  • Il registro contenitori configura CI/CD tra il registro contenitori e il Servizio app.
  • L'opzione GitHub Actions è adatta se si mantiene il codice sorgente per l'immagine del contenitore in GitHub. Attivato da nuovi commit nel repository GitHub, l'azione di distribuzione può eseguire docker build e docker push direttamente nel registro contenitori, quindi aggiornare l'app del Servizio app per eseguire la nuova immagine. Per altre informazioni, vedere Funzionamento di CI/CD con GitHub Actions.
  • Per configurare CI/CD con Azure Pipelines, vedere Distribuire un contenitore di app Web di Azure da Azure Pipelines.

Nota

Per un'app Docker Compose selezionare Registro Azure Container.

Se si sceglie GitHub Actions, fare clic su Autorizza e seguire le istruzioni di autorizzazione. Se si è già autorizzati con GitHub in precedenza, è possibile eseguire la distribuzione da un repository utente diverso facendo clic su Cambia account.

Dopo aver autorizzato l'account Azure con GitHub, selezionare l'Organizzazione, i Repository e il Ramo desiderati.

2. Configura impostazioni del registro

3. Configura impostazioni del registro

Nota

I contenitori sidecar (anteprima) avranno esito positivo nelle app multi-contenitore (Docker Compose) nel Servizio app. Per iniziare, vedere Esercitazione: Configurare un contenitore sidecar per un contenitore personalizzato nel Servizio app di Azure (anteprima).

Per distribuire un'app multi-contenitore (Docker Compose), selezionare Docker Compose in Tipo di contenitore.

Se l'elenco a discesa Tipo di contenitore non è visualizzato, scorrere fino a Origine e selezionare Registro Azure Container.

In Origine registro selezionare dove si trova il registro contenitori. Se non si tratta né di Registro Azure Container né di Docker Hub, selezionare Registro privato.

Nota

Se l'app multi-contenitore (Docker Compose) usa più immagini private, assicurarsi che le immagini private si trovino nello stesso registro privato e accessibili con le stesse credenziali utente. Se l'app multi-contenitore usa solo immagini pubbliche, selezionare Docker Hub, anche se alcune immagini non si trovano nel Docker Hub.

Seguire i passaggi successivi selezionando la scheda corrispondente alla scelta.

L'elenco a discesa Registro visualizza i registri nella stessa sottoscrizione dell'app. Selezionare il registro desiderato.

Nota

Selezionare l'immagine e il tag da distribuire. Se si vuole, digitare il comando di avvio in File di avvio.

Seguire il passaggio successivo a seconda del Tipo di contenitore:

  • Per Docker Compose selezionare il registro per le immagini private. Fare clic suScegli file per caricare il file Docker Compose o semplicemente incollare il contenuto del file Docker Compose in Config.
  • Per Contenitore singolo selezionare l'immagine e il tag da distribuire. Se si vuole, digitare il comando di avvio in File di avvio.

Il Servizio app aggiunge la stringa in File di avvio alla fine del comando docker run (come segmento [COMMAND] [ARG...]) all'avvio del contenitore.

3. Abilita CI/CD

4. Abilita CI/CD

Il Servizio app supporta l'integrazione CI/CD con Registro Azure Container e i Docker Hub. Per abilitarla, selezionare On in Distribuzione continua.

Nota

Se si seleziona GitHub Actions in Origine, non si ottiene questa opzione perché CI/CD viene gestito direttamente da GitHub Actions. Viene invece visualizzata una sezione Configurazione flusso di lavoro in cui è possibile fare clic su Anteprima file per esaminare il file del flusso di lavoro. Azure esegue il commit di questo file nel repository di origine GitHub selezionato per gestire le attività di compilazione e distribuzione. Per altre informazioni, vedere Funzionamento di CI/CD con GitHub Actions.

Quando si abilita questa opzione, il Servizio app aggiunge un webhook al repository in Registro Azure Container o in Docker Hub. Il repository invia a questo webhook ogni volta che l'immagine selezionata viene aggiornata con docker push. Il webhook causa il riavvio dell'app del Servizio app e l'esecuzione di docker pull per ottenere l'immagine aggiornata.

Nota

Per garantire il corretto funzionamento del webhook, è essenziale abilitare l'opzione Credenziali di pubblicazione dell'autenticazione di base all'interno dell'app Web. In caso contrario, potrebbe verificarsi un errore 401 non autorizzato per il webhook. Per verificare se le Credenziali di pubblicazione dell'autenticazione di base sono abilitate, seguire questa procedura:

  • Andare a Configurazione > Impostazioni generali.
  • Cercare la sezione Impostazioni piattaforma, in cui è disponibile l'opzione Credenziali di pubblicazione dell'autenticazione di base.

Per altri registri privati, è possibile inviare manualmente al webhook o come passaggio in una pipeline CI/CD. In URL webhook fare clic sul pulsante Copia per ottenere l'URL del webhook.

Nota

Il supporto per le app multi-contenitore (Docker Compose) è limitato:

  • Per Registro Azure Container, il Servizio app crea un webhook nel registro selezionato con il registro come ambito. Un docker push a qualsiasi repository nel registro (inclusi quelli a cui non fa riferimento il file Docker Compose) attiva un riavvio dell'app. È possibile modificare il webhook secondo un ambito più ristretto.
  • Docker Hub non supporta webhook a livello di registro. È necessario aggiungere manualmente i webhook alle immagini specificate nel file Docker Compose.

4. Salvare le impostazioni

5. Salvare le impostazioni

Fare clic su Salva.

Funzionamento di CI/CD con GitHub Actions

Se si sceglie GitHub Actions in Origine (vedere Scegliere l'origine della distribuzione), il Servizio app configura CI/CD nei modi seguenti:

  • Deposita un file del flusso di lavoro di GitHub Actions nel repository GitHub per gestire le attività di compilazione e distribuzione nel servizio app.
  • Aggiunge le credenziali per il registro privato come segreti GitHub. Il file del flusso di lavoro generato esegue l'azione Azure/docker-login per accedere con il registro privato, quindi viene eseguito docker push per la distribuzione.
  • Aggiunge il profilo di pubblicazione per l'app come segreto GitHub. Il file del flusso di lavoro generato usa questo segreto per eseguire l'autenticazione con il Servizio app, quindi esegue l'azione Azure/webapps-deploy per configurare l'immagine aggiornata, che attiva il riavvio di un'app per eseguire il pull dell'immagine aggiornata.
  • Acquisisce le informazioni dai log di esecuzione del flusso di lavoro e le visualizza nella scheda Log nel Centro distribuzione dell'app.

È possibile personalizzare il provider di compilazione GitHub Actions nei modi seguenti:

  • Personalizzare il file del flusso di lavoro dopo che è stato generato nel repository GitHub. Per altre informazioni, vedi Sintassi del flusso di lavoro per GitHub Actions. Assicurarsi che il flusso di lavoro termini con l'azione Azure/webapps-deploy per attivare il riavvio di un'app.
  • Se il ramo selezionato è protetto, è comunque possibile visualizzare in anteprima il file del flusso di lavoro senza salvare la configurazione, quindi aggiungerlo e i segreti GitHub necessari nel repository manualmente. Questo metodo non offre l'integrazione dei log con il portale di Azure.
  • Anziché un profilo di pubblicazione, distribuire usando un'entità servizio in Microsoft Entra ID.

Eseguire l'autenticazione con un'entità servizio

Questa configurazione facoltativa sostituisce l'autenticazione predefinita con i profili di pubblicazione nel file del flusso di lavoro generato.

Generare un'entità servizio con il comando az ad sp create-for-rbac dell'interfaccia della riga di comando di Azure. Nell'esempio seguente sostituire <subscription-id>, <group-name> e <app-name> con valori propri. Salvare l'intero output JSON per il passaggio successivo, incluso il livello superiore{}.

az ad sp create-for-rbac --name "myAppDeployAuth" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
                            --json-auth

Importante

Per la sicurezza, concedere l'accesso minimo necessario all'entità servizio. Nell'esempio precedente l'ambito è limitato all'app del Servizio app specifica, e non include l'intero gruppo di risorse.

In GitHub andare al repository e selezionareImpostazioni > Segreti > Aggiungi un nuovo segreto. Incollare l'intero output JSON del comando dell'interfaccia della riga di comando di Azure nel campo del valore del segreto. Assegnare al segreto un nome come AZURE_CREDENTIALS.

Nel file del flusso di lavoro generato dal Centro distribuzione, rivedere il passaggio azure/webapps-deploy con codice simile all'esempio seguente:

- name: Sign in to Azure 
# Use the GitHub secret you added
- uses: azure/login@v1
    with:
    creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
# Remove publish-profile
- uses: azure/webapps-deploy@v2
    with:
    app-name: '<app-name>'
    slot-name: 'production'
    images: '<registry-server>/${{ secrets.AzureAppService_ContainerUsername_... }}/<image>:${{ github.sha }}'
    - name: Sign out of Azure
    run: |
    az logout

Automatizzare con l'interfaccia della riga di comando

Per configurare il registro contenitori e l'immagine Docker, eseguire az webapp config container set.

az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name '<image>:<tag>' --docker-registry-server-url 'https://<registry-name>.azurecr.io' --docker-registry-server-user '<username>' --docker-registry-server-password '<password>'

Per configurare un'app multi-contenitore (Docker Compose), preparare un file Docker Compose in locale, quindi eseguire az webapp config container set con il parametro --multicontainer-config-file. Se il file Docker Compose contiene immagini private, aggiungere parametri --docker-registry-server-* come illustrato nell'esempio precedente.

az webapp config container set --resource-group <group-name> --name <app-name> --multicontainer-config-file <docker-compose-file>

Per configurare CI/CD dal registro contenitori all'app, eseguire az webapp deployment container config con il parametro --enable-cd. Il comando restituisce l'URL del webhook, ma è necessario creare manualmente il webhook nel registro in un passaggio separato. L'esempio seguente abilita CI/CD nell'app, quindi usa l'URL del webhook nell'output per creare il webhook in Registro Azure Container.

ci_cd_url=$(az webapp deployment container config --name <app-name> --resource-group <group-name> --enable-cd true --query CI_CD_URL --output tsv)

az acr webhook create --name <webhook-name> --registry <registry-name> --resource-group <group-name> --actions push --uri $ci_cd_url --scope '<image>:<tag>'

Altre risorse