Share via


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.

Ändringar i en GitHub-lagringsplats utlöser en åtgärd för att skapa en ny revision.

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

  1. Logga in på Azure med Azure CLI.

    az login
    
  2. Installera sedan det senaste Azure Container Apps-tillägget för CLI.

    az extension add --name containerapp --upgrade
    
  3. Om du inte har en egen GitHub-lagringsplats skapar du en från ett exempel.

    1. Gå till följande plats för att skapa en ny lagringsplats:
    2. Ge lagringsplatsen my-container-appnamnet .
  4. 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.

  1. Ändra till mappen src för den klonade lagringsplatsen.

    cd my-container-app
    cd src
    
  2. Skapa Azure-resurser och distribuera en containerapp med az containerapp up kommandot .

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    
  3. Anteckna namnet på Azure Container Registry i kommandots utdata.

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

  5. Aktivera hanterad identitet för containerappen.

    az containerapp identity assign \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --system-assigned \
      --output tsv
    

    Observera huvud-ID:t för den hanterade identiteten i kommandoutdata.

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

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

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

  2. Kopiera JSON-utdata från kommandot.

  3. Gå till Inställningar> Secrets Actions på GitHub-lagringsplatsen>och välj Ny lagringsplatshemlighet.

  4. Ange AZURE_CREDENTIALS som namn och klistra in innehållet i JSON-utdata som värde.

  5. Välj Add secret (Lägg till hemlighet).

Skapa ett GitHub Actions-arbetsflöde

  1. Gå till Åtgärder på GitHub-lagringsplatsen och välj Nytt arbetsflöde.

  2. Välj Konfigurera ett arbetsflöde själv.

  3. 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 under branches och värdena för appSourcePath, containerAppNameoch resourceGroup matchar värdena för din lagringsplats och Azure-resurser.

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