Condividi tramite


Eseguire la distribuzione in App contenitore di Azure con GitHub Actions

App contenitore di Azure consente di usare GitHub Actions per pubblicare revisioni nell'app contenitore. Quando viene eseguito il push dei commit nel repository GitHub, viene attivato un flusso di lavoro che aggiorna l'immagine del contenitore nel registro contenitori. App contenitore di Azure crea una nuova revisione basata sull'immagine del contenitore aggiornata.

Le modifiche apportate a un repository GitHub attivano un'azione per creare una nuova revisione.

Il flusso di lavoro di GitHub Actions viene attivato dai commit in un ramo specifico nel repository. Quando si crea il flusso di lavoro, si decide quale ramo attiva il flusso di lavoro.

Questo articolo illustra come creare un flusso di lavoro completamente personalizzabile. Per generare un flusso di lavoro di GitHub Actions iniziale con l'interfaccia della riga di comando di Azure, vedere Generare un flusso di lavoro di GitHub Actions con l'interfaccia della riga di comando di Azure.

Azione GitHub per App contenitore di Azure

Per compilare e distribuire l'app contenitore, aggiungere l'azione azure/container-apps-deploy-action al flusso di lavoro di GitHub Actions.

L'azione 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

Esempi di utilizzo

Ecco alcuni scenari comuni per l'uso dell'azione. Per altre informazioni, vedere la pagina Marketplace dell'azione GitHub.

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:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      appSourcePath: ${{ github.workspace }}/src
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg

L'azione usa il Dockerfile in appSourcePath per compilare l'immagine del contenitore. Se non viene trovato alcun Dockerfile, l'azione prova a 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.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg
      imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}

Importante

Se si compila un'immagine del contenitore in un passaggio separato, assicurarsi di usare un tag univoco, ad esempio lo SHA di commit, 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'azione per 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'azione esegue automaticamente l'autenticazione con il registro contenitori specificato in acrName usando le credenziali fornite all'azione azure/login.

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 che l'azione sta distribuendo deve essere configurata per l'uso dell'identità gestita. Per eseguire l'autenticazione con le credenziali di amministratore del registro, impostare gli input dell'azione acrUsername e acrPassword.

Impostazione

Per configurare un flusso di lavoro di GitHub Actions da distribuire in App contenitore di Azure, seguire questa procedura.

  • Creare un repository GitHub 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
  • Configurare i segreti nel repository GitHub
  • Creare un flusso di lavoro di GitHub Actions

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.
Account GitHub Iscriversi gratuitamente.
Interfaccia della riga di comando di Azure Installare l'interfaccia della riga di comando di Azure.

Creare un repository GitHub e clonare il codice sorgente

Prima di creare il flusso di lavoro, il codice sorgente per l'app deve trovarsi in un repository GitHub.

  1. Accedere ad Azure con l'interfaccia della riga di comando di Azure.

    az login
    
  2. Installare quindi l'estensione App contenitore di Azure più recente per l'interfaccia della riga di comando.

    az extension add --name containerapp --upgrade
    
  3. Se non si ha un repository GitHub, crearne uno da un esempio.

    1. Passare al percorso seguente per creare un nuovo repository:
    2. Assegnare al repository il nome my-container-app.
  4. Clonare il repository nel computer locale.

    git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
    

Creare un'app contenitore con identità gestita abilitata

Creare l'app contenitore usando il comando az containerapp up nella 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 assegnarle il ruolo AcrPull per consentire all'identità di eseguire il pull delle immagini dal registro.

  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.

Configurare i segreti nel repository GitHub

Il flusso di lavoro di GitHub richiede un segreto denominato AZURE_CREDENTIALS per eseguire l'autenticazione con Azure. Il segreto contiene le credenziali per un'entità servizio con il ruolo Collaboratore nel gruppo di risorse contenente l'app contenitore e il registro contenitori.

  1. Creare un'entità servizio con il ruolo Collaboratore nel gruppo di risorse che include l'app contenitore e il registro contenitori.

    az ad sp create-for-rbac \
      --name my-app-credentials \
      --role contributor \
      --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \
      --json-auth \
      --output json
    

    Sostituire <SUBSCRIPTION_ID> con l'ID della sottoscrizione di Azure. Se il registro contenitori si trova in un gruppo di risorse diverso, specificare entrambi i gruppi di risorse nel parametro --scopes.

  2. Copiare l'output JSON del comando.

  3. Nel repository GitHub passare a Impostazioni>Segreti>Azioni e selezionare Nuovo segreto del repository.

  4. Immettere AZURE_CREDENTIALS come nome e incollare il contenuto dell'output JSON come valore.

  5. Selezionare Aggiungi segreto.

Creare un flusso di lavoro di GitHub Actions

  1. Nel repository GitHub passare ad Azioni e selezionare Nuovo flusso di lavoro.

  2. Selezionare Configura un flusso di lavoro.

  3. Incollare il codice YAML seguente nell'editor.

    name: Azure Container Apps Deploy
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v3
    
          - name: Log in to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Build and deploy Container App
            uses: azure/container-apps-deploy-action@v1
            with:
              appSourcePath: ${{ github.workspace }}/src
              acrName: <ACR_NAME>
              containerAppName: my-container-app
              resourceGroup: my-container-app-rg
    

    Sostituire <ACR_NAME> con il nome del Registro Azure Container. Verificare che il nome del ramo in branches e i valori per appSourcePath, containerAppName e resourceGroup corrispondano ai valori per il repository e le risorse di Azure.

  4. Eseguire il commit delle modifiche nel ramo principale.

Un'esecuzione del flusso di lavoro di GitHub Actions dovrebbe iniziare a compilare e distribuire l'app contenitore. Per controllarne lo stato di avanzamento, passare ad Azioni.

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