Share via


Configurare un'azione GitHub per creare un'istanza del contenitore

GitHub Actions è una suite di funzionalità in GitHub che serve ad automatizzare i flussi di lavoro dello sviluppo di software nella stessa posizione in cui si archivia il codice, ed a collaborare ai problemi e alle richieste pull.

Usare deploy to Istanze di Azure Container GitHub Actions per automatizzare la distribuzione di un singolo contenitore in Istanze di Azure Container. L'azione consente di impostare le proprietà per un'istanza del contenitore simile a quelle nel comando az container create .

Questo articolo illustra come configurare un flusso di lavoro in un repository GitHub che esegue le azioni seguenti:

  • Compilare un'immagine da un Dockerfile
  • Eseguire il push dell'immagine in un registro Azure Container
  • Distribuire l'immagine del contenitore in un'istanza di Contenitore di Azure

Questo articolo illustra due modi per configurare il flusso di lavoro:

Importante

GitHub Actions per Istanze di Azure Container è attualmente in anteprima. Le anteprime vengono rese disponibili a condizione che l'utente accetti le condizioni supplementari per l'utilizzo. Alcuni aspetti di questa funzionalità potrebbero subire modifiche prima della disponibilità a livello generale.

Prerequisiti

  • Account GitHub: creare un account in https://github.com se non ne è già disponibile uno.
  • Interfaccia della riga di comando di Azure: è possibile usare Azure Cloud Shell o un'installazione locale dell'interfaccia della riga di comando di Azure per completare i passaggi dell'interfaccia della riga di comando di Azure. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
  • Registro Azure Container: se non è disponibile, creare un registro Azure Container nel livello Basic usando l'interfaccia della riga di comando di Azure, portale di Azure o altri metodi. Prendere nota del gruppo di risorse usato per la distribuzione, usato per il flusso di lavoro GitHub.

Configurare il repository

  • Per gli esempi in questo articolo, usare GitHub per creare una copia tramite fork del repository seguente: https://github.com/Azure-Samples/acr-build-helloworld-node

    Questo repository contiene un Dockerfile e file di origine per creare un'immagine del contenitore di una piccola app Web.

    Screenshot del pulsante Fork (evidenziato) in GitHub

  • Verificare che Azioni sia abilitata per il repository. Passare al repository con fork e selezionare Impostazioni> Actions. In Autorizzazioni azioni verificare che l'opzione Consenti tutte le azioni sia selezionata.

Configurare il flusso di lavoro di GitHub

Creare credenziali per l'autenticazione di Azure

Nel flusso di lavoro di GitHub è necessario fornire le credenziali di Azure per l'autenticazione all'interfaccia della riga di comando di Azure. Nell'esempio seguente viene creata un'entità servizio con il ruolo Collaboratore con ambito del gruppo di risorse per il registro contenitori.

Ottenere prima di tutto l'ID risorsa del gruppo di risorse. Sostituire il nome del gruppo nel comando az group show seguente:

groupId=$(az group show \
  --name <resource-group-name> \
  --query id --output tsv)

Usare az ad sp create-for-rbac per creare l'entità servizio:

az ad sp create-for-rbac \
  --scope $groupId \
  --role Contributor \
  --sdk-auth

L'output è simile a:

{
  "clientId": "xxxx6ddc-xxxx-xxxx-xxx-ef78a99dxxxx",
  "clientSecret": "xxxx79dc-xxxx-xxxx-xxxx-aaaaaec5xxxx",
  "subscriptionId": "xxxx251c-xxxx-xxxx-xxxx-bf99a306xxxx",
  "tenantId": "xxxx88bf-xxxx-xxxx-xxxx-2d7cd011xxxx",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

Salvare l'output JSON perché viene usato in un passaggio successivo. Prendere inoltre nota di clientId, che è necessario aggiornare l'entità servizio nella sezione successiva.

Aggiornamento per l'autenticazione del Registro di sistema

Aggiornare le credenziali dell'entità servizio di Azure per consentire l'accesso push e pull al registro contenitori. Questo passaggio consente al flusso di lavoro GitHub di usare l'entità servizio per l'autenticazione con il registro contenitori e il push e il pull di un'immagine Docker.

Ottenere l'ID risorsa del registro contenitori. Sostituire il nome del registro nel comando az acr show seguente:

registryId=$(az acr show \
  --name <registry-name> \
  --resource-group <resource-group-name> \
  --query id --output tsv)

Usare az role assignment create per assegnare il ruolo AcrPush, che consente l'accesso push e pull al Registro di sistema. Sostituire l'ID client dell'entità servizio:

az role assignment create \
  --assignee <ClientId> \
  --scope $registryId \
  --role AcrPush

Salvare le credenziali nel repository GitHub

  1. Nell'interfaccia utente di GitHub passare al repository con fork e selezionare Security Secrets and variables Actions (Segreti e variabili > di sicurezza>).

  2. Selezionare Nuovo segreto del repository per aggiungere i segreti seguenti:

Segreto Valore
AZURE_CREDENTIALS L'intero output JSON del passaggio di creazione dell'entità servizio
REGISTRY_LOGIN_SERVER Nome del server di accesso del Registro di sistema (tutto in minuscolo). Esempio: myregistry.azurecr.io
REGISTRY_USERNAME Oggetto clientId dall'output JSON dalla creazione dell'entità servizio
REGISTRY_PASSWORD Oggetto clientSecret dall'output JSON dalla creazione dell'entità servizio
RESOURCE_GROUP Nome del gruppo di risorse usato per definire l'ambito dell'entità servizio

Creare un file del flusso di lavoro

  1. Nell'interfaccia utente di GitHub selezionare Azioni.
  2. Selezionare Set up a workflow yourself (Configurare manualmente un flusso di lavoro).
  3. In Modifica nuovo file incollare il contenuto YAML seguente per sovrascrivere il codice di esempio. Accettare il nome file main.ymlpredefinito oppure specificare un nome file scelto.
  4. Selezionare Avvia commit, facoltativamente specificare descrizioni brevi e estese del commit e selezionare Commit new file (Esegui commit nuovo file).
on: [push]
name: Linux_Container_Workflow

jobs:
    build-and-deploy:
        runs-on: ubuntu-latest
        steps:
        # checkout the repo
        - name: 'Checkout GitHub Action'
          uses: actions/checkout@main
          
        - name: 'Login via Azure CLI'
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
        
        - name: 'Build and push image'
          uses: azure/docker-login@v1
          with:
            login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            username: ${{ secrets.REGISTRY_USERNAME }}
            password: ${{ secrets.REGISTRY_PASSWORD }}
        - run: |
            docker build . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}

        - name: 'Deploy to Azure Container Instances'
          uses: 'azure/aci-deploy@v1'
          with:
            resource-group: ${{ secrets.RESOURCE_GROUP }}
            dns-name-label: ${{ secrets.RESOURCE_GROUP }}${{ github.run_number }}
            image: ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            registry-login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            registry-username: ${{ secrets.REGISTRY_USERNAME }}
            registry-password: ${{ secrets.REGISTRY_PASSWORD }}
            name: aci-sampleapp
            location: 'west us'

Convalidare il flusso di lavoro

Dopo aver eseguito il commit del file del flusso di lavoro, viene attivato il flusso di lavoro. Per esaminare lo stato del flusso di lavoro, passare a Flussi di lavoro azioni>.

Visualizzare lo stato del flusso di lavoro

Per informazioni sulla visualizzazione dello stato e dei risultati di ogni passaggio del flusso di lavoro, vedere Visualizzazione della cronologia di esecuzione del flusso di lavoro. Se il flusso di lavoro non viene completato, vedere Visualizzazione dei log per diagnosticare gli errori.

Al termine del flusso di lavoro, ottenere informazioni sull'istanza del contenitore denominata aci-sampleapp eseguendo il comando az container show . Sostituire il nome del gruppo di risorse:

az container show \
  --resource-group <resource-group-name> \
  --name aci-sampleapp \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

L'output è simile a:

FQDN                                   ProvisioningState
---------------------------------      -------------------
aci-action01.westus.azurecontainer.io  Succeeded

Dopo il provisioning dell'istanza, passare al nome di dominio completo del contenitore nel browser per visualizzare l'app Web in esecuzione.

Esecuzione dell'app Web nel browser

Usare l'estensione Distribuisci in Azure

In alternativa, usare l'estensione Distribuisci in Azure nell'interfaccia della riga di comando di Azure per configurare il flusso di lavoro. Il az container app up comando nell'estensione accetta parametri di input dall'utente per configurare un flusso di lavoro da distribuire in Istanze di Azure Container.

Il flusso di lavoro creato dall'interfaccia della riga di comando di Azure è simile al flusso di lavoro che è possibile creare manualmente usando GitHub.

Prerequisiti aggiuntivi

Oltre ai prerequisiti e alla configurazione del repository per questo scenario, è necessario installare l'estensione Distribuisci in Azure per l'interfaccia della riga di comando di Azure.

Eseguire il comando az extension add per installare l'estensione:

az extension add \
  --name deploy-to-azure

Per informazioni su come trovare, installare e gestire le estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.

Eseguire az container app up

Per eseguire il comando az container app up , specificare almeno:

  • Nome del registro Azure Container, ad esempio myregistry
  • URL del repository GitHub, ad esempio https://github.com/<your-GitHub-Id>/acr-build-helloworld-node

Comando di esempio:

az container app up \
  --acr myregistry \
  --repository https://github.com/myID/acr-build-helloworld-node

Stato del comando

  • Quando richiesto, specificare le credenziali di GitHub o fornire un token di accesso personale (PAT) di GitHub conrepository e ambiti utente per l'autenticazione con l'account GitHub. Se si specificano le credenziali di GitHub, il comando crea automaticamente un token di accesso personale. Seguire istruzioni aggiuntive per configurare il flusso di lavoro.

  • Il comando crea segreti del repository per il flusso di lavoro:

    • Credenziali dell'entità servizio per l'interfaccia della riga di comando di Azure
    • Credenziali per accedere al Registro Azure Container
  • Dopo che il comando esegue il commit del file del flusso di lavoro nel repository, il flusso di lavoro viene attivato.

L'output è simile a:

[...]
Checking in file github/workflows/main.yml in the GitHub repository myid/acr-build-helloworld-node
Creating workflow...
GitHub Action Workflow has been created - https://github.com/myid/acr-build-helloworld-node/runs/515192398
GitHub workflow completed.
Workflow succeeded
Your app is deployed at:  http://acr-build-helloworld-node.eastus.azurecontainer.io:8080/

Per visualizzare lo stato e i risultati del flusso di lavoro di ogni passaggio nell'interfaccia utente di GitHub, vedere Visualizzazione della cronologia di esecuzione del flusso di lavoro.

Convalidare il flusso di lavoro

Il flusso di lavoro distribuisce un'istanza del contenitore di Azure con il nome di base del repository GitHub, in questo caso acr-build-helloworld-node. Al termine del flusso di lavoro, ottenere informazioni sull'istanza del contenitore denominata acr-build-helloworld-node eseguendo il comando az container show . Sostituire il nome del gruppo di risorse:

az container show \
  --resource-group <resource-group-name> \
  --name acr-build-helloworld-node \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

L'output è simile a:

FQDN                                                   ProvisioningState
---------------------------------                      -------------------
acr-build-helloworld-node.westus.azurecontainer.io     Succeeded

Dopo il provisioning dell'istanza, passare al nome di dominio completo del contenitore nel browser per visualizzare l'app Web in esecuzione.

Pulire le risorse

Arrestare l'istanza del contenitore con il comando az container delete:

az container delete \
  --name <instance-name>
  --resource-group <resource-group-name>

Per eliminare il gruppo di risorse e tutte le risorse in esso contenute, eseguire il comando az group delete :

az group delete \
  --name <resource-group-name>

Passaggi successivi

Esplorare GitHub Marketplace per altre azioni per automatizzare il flusso di lavoro di sviluppo