Share via


Eseguire la distribuzione in App contenitore di Azure con GitHub Actions

App Azure Container consente di usare GitHub Actions per pubblicare revisioni nell'app contenitore. Quando i commit vengono inseriti nel repository GitHub, viene attivato un flusso di lavoro che aggiorna l'immagine del contenitore nel registro contenitori. App Azure Container 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 da 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 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 di GitHub Marketplace dell'azione.

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

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 il commit SHA 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 App Azure Container deve eseguire l'autenticazione con il Registro Azure Container per eseguire il push dell'immagine del contenitore. L'app contenitore deve anche eseguire l'autenticazione con il 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 il 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 di sistema, impostare gli input e acrPassword l'azioneacrUsername.

Impostazione

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

  • Creare un repository GitHub per l'app
  • Creare un'app contenitore con identità gestita abilitata
  • Assegnare il AcrPull ruolo per il 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, vedere Assegnare ruoli di Azure usando il portale di Azure.
GitHub Account 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 la versione più recente dell'estensione App Azure Container per l'interfaccia della riga di comando.

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

    1. Passare al percorso seguente per creare un nuovo repository:
    2. Assegnare al repository my-container-appil nome .
  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 az containerapp up comando nei passaggi seguenti. 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 AcrPull ruolo 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 \
      --output tsv
    

    Prendere nota dell'ID principale dell'identità gestita nell'output del comando.

  6. Assegnare il AcrPull ruolo per il 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 l'uso dell'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 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 contiene 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 --scopes parametro .

  2. Copiare l'output JSON dal comando .

  3. Nel repository GitHub passare a Impostazioni> Azionisecrets> 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 a Azioni e selezionare Nuovo flusso di lavoro.

  2. Selezionare Configura un flusso di lavoro manualmente.

  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, containerAppNamee 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 deve iniziare a compilare e distribuire l'app contenitore. Per controllare lo stato di avanzamento, passare a Azioni.

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