Distribuera till Azure Container Apps med GitHub Actions
Med Azure Container Apps kan du använda GitHub Actions för att publicera revisioner till din containerapp. När incheckningar skickas till din GitHub-lagringsplats utlöses ett arbetsflöde som uppdaterar containeravbildningen i containerregistret. Azure Container Apps skapar en ny revision baserat på den uppdaterade containeravbildningen.
GitHub Actions-arbetsflödet utlöses av incheckningar till en specifik gren på lagringsplatsen. När du skapar arbetsflödet bestämmer du vilken gren som utlöser arbetsflödet.
Den här artikeln visar hur du skapar ett fullständigt anpassningsbart arbetsflöde. Information om hur du genererar ett GitHub Actions-startarbetsflöde med Azure CLI finns i Generera GitHub Actions-arbetsflöde med Azure CLI.
Azure Container Apps GitHub-åtgärd
Om du vill skapa och distribuera din containerapp lägger du till åtgärden i azure/container-apps-deploy-action
ditt GitHub Actions-arbetsflöde.
Åtgärden stöder följande scenarier:
- Skapa från en Dockerfile och distribuera till Container Apps
- Skapa från källkod utan en Dockerfile och distribuera till Container Apps. Språk som stöds är .NET, Java, Node.js, PHP och Python
- Distribuera en befintlig containeravbildning till Container Apps
Exempel på användning
Här följer några vanliga scenarier för att använda åtgärden. Mer information finns på github marketplace-sidan för åtgärden.
Skapa och distribuera till Container Apps
Följande kodfragment visar hur du skapar en containeravbildning från källkoden och distribuerar den till Container Apps.
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
Åtgärden använder Dockerfile i appSourcePath
för att skapa containeravbildningen. Om ingen Dockerfile hittas försöker åtgärden skapa containeravbildningen från källkoden i appSourcePath
.
Distribuera en befintlig containeravbildning till Container Apps
Följande kodfragment visar hur du distribuerar en befintlig containeravbildning till Container Apps.
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 }}
Viktigt!
Om du skapar en containeravbildning i ett separat steg kontrollerar du att du använder en unik tagg, till exempel inchecknings-SHA i stället för en stabil tagg som latest
. Mer information finns i Metodtips för bildtaggen.
Autentisera med Azure Container Registry
Azure Container Apps-åtgärden måste autentiseras med Azure Container Registry för att skicka containeravbildningen. Containerappen måste också autentiseras med Azure Container Registry för att hämta containeravbildningen.
För att skicka avbildningar autentiseras åtgärden automatiskt med det containerregister som anges i acrName
med hjälp av de autentiseringsuppgifter som angetts för åtgärden azure/login
.
För att hämta avbildningar använder Azure Container Apps antingen hanterad identitet (rekommenderas) eller administratörsautentiseringsuppgifter för att autentisera med Azure Container Registry. Om du vill använda hanterad identitet måste containerappen som åtgärden distribuerar konfigureras för att använda hanterad identitet. Om du vill autentisera med registrets administratörsautentiseringsuppgifter anger du åtgärdens acrUsername
och acrPassword
indata.
Konfiguration
Du utför följande steg för att konfigurera ett GitHub Actions-arbetsflöde för distribution till Azure Container Apps.
- Skapa en GitHub-lagringsplats för din app
- Skapa en containerapp med hanterad identitet aktiverad
AcrPull
Tilldela rollen för Azure Container Registry till containerappens hanterade identitet- Konfigurera hemligheter på din GitHub-lagringsplats
- Skapa ett GitHub Actions-arbetsflöde
Förutsättningar
Krav | Instruktioner |
---|---|
Azure-konto | Om du inte har något skapar du ett konto kostnadsfritt. Du behöver behörigheten Deltagare eller Ägare för Azure-prenumerationen för att kunna fortsätta. Mer information finns i Tilldela Azure-roller med hjälp av Azure Portal. |
GitHub-konto | Registrera dig kostnadsfritt. |
Azure CLI | Installera Azure CLI. |
Skapa en GitHub-lagringsplats och klona källkod
Innan du skapar arbetsflödet måste källkoden för din app finnas på en GitHub-lagringsplats.
Logga in på Azure med Azure CLI.
az login
Installera sedan det senaste Azure Container Apps-tillägget för CLI.
az extension add --name containerapp --upgrade
Om du inte har en egen GitHub-lagringsplats skapar du en från ett exempel.
- Gå till följande plats för att skapa en ny lagringsplats:
- Ge lagringsplatsen
my-container-app
namnet .
Klona lagringsplatsen till din lokala dator.
git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
Skapa en containerapp med hanterad identitet aktiverad
Skapa containerappen az containerapp up
med kommandot i följande steg. Det här kommandot skapar Azure-resurser, skapar containeravbildningen, lagrar avbildningen i ett register och distribuerar till en containerapp.
När du har skapat appen kan du lägga till en hanterad identitet i appen och tilldela identiteten AcrPull
rollen så att identiteten kan hämta avbildningar från registret.
Ändra till mappen src för den klonade lagringsplatsen.
cd my-container-app cd src
Skapa Azure-resurser och distribuera en containerapp med
az containerapp up
kommandot .az containerapp up \ --name my-container-app \ --source . \ --ingress external
Anteckna namnet på Azure Container Registry i kommandots utdata.
Hämta det fullständiga resurs-ID:t för containerregistret.
az acr show --name <ACR_NAME> --query id --output tsv
Byt ut
<ACR_NAME>
mot namnet på ditt register.Aktivera hanterad identitet för containerappen.
az containerapp identity assign \ --name my-container-app \ --resource-group my-container-app-rg \ --system-assigned
Observera huvud-ID:t för den hanterade identiteten i kommandoutdata.
AcrPull
Tilldela rollen för Azure Container Registry till containerappens hanterade identitet.az role assignment create \ --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \ --role AcrPull \ --scope <ACR_RESOURCE_ID>
Ersätt
<MANAGED_IDENTITY_PRINCIPAL_ID>
med huvud-ID:t för den hanterade identiteten och<ACR_RESOURCE_ID>
med resurs-ID:t för Azure Container Registry.Konfigurera containerappen så att den använder den hanterade identiteten för att hämta avbildningar från Azure Container Registry.
az containerapp registry set \ --name my-container-app \ --resource-group my-container-app-rg \ --server <ACR_NAME>.azurecr.io \ --identity system
Ersätt
<ACR_NAME>
med namnet på ditt Azure Container Registry.
Konfigurera hemligheter på din GitHub-lagringsplats
GitHub-arbetsflödet kräver en hemlighet med namnet AZURE_CREDENTIALS
för att autentisera med Azure. Hemligheten innehåller autentiseringsuppgifterna för ett huvudnamn för tjänsten med rollen Deltagare i resursgruppen som innehåller containerappen och containerregistret.
Skapa ett tjänsthuvudnamn med rollen Deltagare i resursgruppen som innehåller containerappen och containerregistret.
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
Ersätt
<SUBSCRIPTION_ID>
med ID:t för din Azure-prenumeration. Om containerregistret finns i en annan resursgrupp anger du båda resursgrupperna i parametern--scopes
.Kopiera JSON-utdata från kommandot.
På GitHub-lagringsplatsen går du till Inställningar>Hemligheter>åtgärder och väljer Ny lagringsplatshemlighet.
Ange
AZURE_CREDENTIALS
som namn och klistra in innehållet i JSON-utdata som värde.Välj Add secret (Lägg till hemlighet).
Skapa ett GitHub Actions-arbetsflöde
Gå till Åtgärder på GitHub-lagringsplatsen och välj Nytt arbetsflöde.
Välj Konfigurera ett arbetsflöde själv.
Klistra in följande YAML i redigeraren.
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
Ersätt
<ACR_NAME>
med namnet på ditt Azure Container Registry. Bekräfta att grennamnet underbranches
och värdena förappSourcePath
,containerAppName
ochresourceGroup
matchar värdena för din lagringsplats och Azure-resurser.Genomför ändringarna i huvudgrenen.
En GitHub Actions-arbetsflödeskörning bör börja skapa och distribuera din containerapp. Om du vill kontrollera förloppet går du till Åtgärder.
Om du vill distribuera en ny revision av din app skickar du en ny incheckning till huvudgrenen.