Distribuzione continua con contenitori personalizzati nel servizio app 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. Passare al Centro distribuzione

Nella portale di Azure passare alla pagina di gestione per l'app servizio app.

Dal menu a sinistra fare clic su Centro> distribuzione Impostazioni.

2. Scegliere l'origine di distribuzione

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

  • Registro Contenitori configura CI/CD tra il registro contenitori e 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ò essere eseguita docker build e docker push direttamente nel registro contenitori, quindi aggiornare l'app 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 Contenitori.

Se si sceglie GitHub Actions, fare clic suAutorizza 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, il repository e il ramo da cui eseguire la distribuzione.

2. Configurare le impostazioni del Registro di sistema

3. Configurare le impostazioni del Registro di sistema

Nota

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

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

Se l'elenco a discesa Tipo di contenitore non è visualizzato, scorrere fino a Origine e selezionareRegistro Contenitori.

In Origine registro selezionaredove si trova il registro contenitori. Se non è né Registro Azure Container né l'hub Docker, selezionareRegistro di sistema 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, selezionareHub Docker, anche se alcune immagini non si trovano nell'hub Docker.

Seguire i passaggi successivi selezionando la scheda corrispondente alla scelta.

L'elenco a discesa Registro di sistema visualizza i registri nella stessa sottoscrizione dell'app. Selezionare il Registro di sistema 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 di sistema 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.

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

3. Abilitare CI/CD

4. Abilitare CI/CD

servizio app supporta l'integrazione CI/CD con Registro Azure Container e Docker Hub. Per abilitarla, selezionare nella 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 suAnteprima 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, servizio app aggiunge un webhook al repository in Registro Azure Container o nell'hub Docker. Il repository invia a questo webhook ogni volta che l'immagine selezionata viene aggiornata con docker push. Il webhook causa il riavvio e l'esecuzione docker pull dell'app servizio app 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:

  • Passare al Impostazioni Generale di configurazione > dell'app Web.
  • 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, servizio app crea un webhook nel Registro di sistema selezionato con il Registro di sistema come ambito. Un docker push oggetto a qualsiasi repository nel Registro di sistema (inclusi quelli a cui non fa riferimento il file Docker Compose) attiva un riavvio dell'app. È possibile modificare il webhook in un ambito più ristretto.
  • Docker Hub non supporta webhook a livello di Registro di sistema. È necessario aggiungere manualmente i webhook alle immagini specificate nel file Docker Compose.

4. Salvare le impostazioni

5. Salvare le impostazioni

Fare clic suSalva.

Funzionamento di CI/CD con GitHub Actions

Se si sceglie GitHub Actions in Origine (vedere Scegliere l'origine della distribuzione), 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 in 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 l'autenticazione con 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 nell'immagine aggiornata.
  • Acquisisce le informazioni dai log di esecuzione del flusso di lavoro e le visualizza nella scheda Log del 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, vedere 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 nell'interfaccia della riga di comando di Azure. Nell'esempio seguente sostituire <subscription-id>, <group-name e <app-name>> con i propri valori. 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. L'ambito nell'esempio precedente è limitato all'app servizio app specifica e non all'intero gruppo di risorse.

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

Nel file del flusso di lavoro generato dal Centro distribuzione rivedere il passaggio con codice azure/webapps-deploy 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, eseguireaz 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 eseguireaz webapp config container set con il --multicontainer-config-file parametro . Se il file Docker Compose contiene immagini private, aggiungere--docker-registry-server-* parametri 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, eseguireaz webapp deployment container config con il --enable-cd parametro . Il comando restituisce l'URL del webhook, ma è necessario creare manualmente il webhook nel Registro di sistema 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