Configurare un'azione GitHub per creare un'istanza di 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 Distribuire in 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:
- Configurare il flusso di lavoro GitHub : creare un flusso di lavoro in un repository GitHub usando l'azione Distribuire in Istanze di Azure Container e altre azioni.
- Usare l'estensione dell'interfaccia della riga di comando : usare il comando
az container app up
nell'estensione Distribuisci in Azure nell'interfaccia della riga di comando di Azure. Questo comando semplifica la creazione del flusso di lavoro GitHub e dei passaggi di distribuzione.
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 di GitHub - Se non se ne ha già uno, creare un account in https://github.com.
- Interfaccia della riga di comando di Azure - Per completare questi passaggi, è possibile usare Azure Cloud Shell o un'installazione locale 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 contenitori di Azure nel livello Basic usando l'interfaccia della riga di comando di Azure, portale di Azureo 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.
Verificare che Azioni sia abilitata per il repository. Passare al repository con fork e selezionare Impostazioni>Azioni. In Autorizzazioni azioniassicurarsi 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 con nel seguente comando az group show:
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": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"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 del 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 eseguire l'autenticazione con il registro contenitori ed eseguire il push e il pull di un'immagine Docker.
Ottenere l'ID risorsa del Registro Container. Sostituire il nome del registro con nel seguente comando az acr show:
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
Nell'interfaccia utente di GitHub passare al repository con fork e selezionare Sicurezza > segreti e variabili > Azioni.
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 |
Il clientId dall'output JSON dalla creazione dell'entità servizio |
REGISTRY_PASSWORD |
Il 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
- Nell'interfaccia utente di GitHub selezionare Azioni.
- Selezionare Set up a workflow yourself (Configurare manualmente un flusso di lavoro).
- In Modifica nuovo file incollare il contenuto YAML seguente per sovrascrivere il codice di esempio. Accettare il nome file predefinito
main.yml
o specificare un nome file scelto. - Selezionare Avvia commit, specificare facoltativamente delle descrizioni brevi ed estese del commit e selezionare Eseguire il commit di un 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'
Convalida 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 Azioni>Flussi di lavoro.
Vedere Visualizzazione della cronologia di esecuzione del flusso di lavoro per informazioni sulla visualizzazione dello stato e dei risultati di ogni passaggio 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.
Usare Distribuire in un estensione di Azure
In alternativa, usare Distribuire in un estensione di Azure nell'interfaccia della riga di comando di Azure per configurare il flusso di lavoro. Il comando az container app up
nell'estensione accetta i 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 Distribuire in un estensione di 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:
- Il nome del registro Azure Container, ad esempio myregistry
- L’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 GitHub (PAT) che dispone di repository e ambiti dell’utente per l'autenticazione con l'account GitHub. Se vengono specificate le credenziali di GitHub, il comando crea automaticamente un token di accesso personale. Seguire le 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.
Convalida 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 contenute, eseguire il comando az group delete:
az group delete \
--name <resource-group-name>
Passaggi successivi
Esplorare Marketplace di GitHub per altre azioni per automatizzare il flusso di lavoro di sviluppo