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.
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.
Accedere ad Azure con l'interfaccia della riga di comando di Azure.
az login
Installare quindi l'estensione App contenitore di Azure più recente per l'interfaccia della riga di comando.
az extension add --name containerapp --upgrade
Se non si ha un repository GitHub, crearne uno da un esempio.
- Passare al percorso seguente per creare un nuovo repository:
- Assegnare al repository il nome
my-container-app
.
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.
Passare alla cartella src del repository clonato.
cd my-container-app cd src
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
Nell'output del comando prendere nota del nome del Registro Azure Container.
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.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.
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.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.
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
.Copiare l'output JSON del comando.
Nel repository GitHub passare a Impostazioni>Segreti>Azioni e selezionare Nuovo segreto del repository.
Immettere
AZURE_CREDENTIALS
come nome e incollare il contenuto dell'output JSON come valore.Selezionare Aggiungi segreto.
Creare un flusso di lavoro di GitHub Actions
Nel repository GitHub passare ad Azioni e selezionare Nuovo flusso di lavoro.
Selezionare Configura un flusso di lavoro.
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 inbranches
e i valori perappSourcePath
,containerAppName
eresourceGroup
corrispondano ai valori per il repository e le risorse di Azure.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.