Dela via


Självstudie: Konfigurera kontinuerlig distribution för en Python-webbapp i Azure Container Apps

Den här artikeln är en del av en självstudieserie om hur man containeriserar och distribuerar en Python-webbapp till Azure Container Apps. Med Container Apps kan du distribuera containerbaserade appar utan att hantera komplex infrastruktur.

I den här självstudien kommer du att:

  • Konfigurera kontinuerlig distribution för en containerapp med hjälp av ett GitHub Actions- arbetsflöde.
  • Gör en ändring i en kopia av exempellagringsplatsen för att utlösa GitHub Actions-arbetsflödet.
  • Felsöka problem som kan uppstå när du konfigurerar kontinuerlig distribution.
  • Ta bort resurser som du inte behöver när du slutför självstudieserien.

Kontinuerlig distribution är relaterad till DevOps-metoden för kontinuerlig integrering och kontinuerlig leverans (CI/CD), vilket är automatisering av ditt arbetsflöde för apputveckling.

Följande diagram lyfter fram uppgifterna i den här handledningen.

Diagram över tjänster som ingår i distributionen av en Python-app i Azure Container Apps, där delarna om kontinuerlig distribution är markerade.

Förutsättningar

För att konfigurera kontinuerlig distribution behöver du:

  • De resurser (och deras konfiguration) som du skapade i den tidigare handledning, som innehåller en instans av Azure Container Registry och en containerapp i Azure Container Apps.

  • Ett GitHub-konto där du förgrenade exempelkoden (Django eller Flask) och som du kan ansluta till från Azure Container Apps. (Om du har laddat ned exempelkoden i stället för att klona, ska du pusha ditt lokala repo till ditt GitHub-konto.)

  • Valfritt kan du ha Git installerat i din utvecklingsmiljö för att göra kodändringar och pusha till ditt repo på GitHub. Du kan också göra ändringarna direkt i GitHub.

Konfigurera kontinuerlig distribution för en container

I den föregående självstudien skapade och konfigurerade du en containerapp i Azure Container Apps. En del av konfigurationen var att hämta en Docker-avbildning från en Azure Container Registry-instans. Containeravbildningen hämtas från registret när du skapar en container revision, till exempel när du först konfigurerar containerappen.

I det här avsnittet konfigurerar du kontinuerlig distribution med hjälp av ett GitHub Actions-arbetsflöde. ** Med kontinuerlig distribution skapas en ny Docker-avbildning och en ny version av containern baserat på en trigger. Utlösaren i den här handledningen är en ändring i huvudgrenen på ditt arkiv, till exempel med en pull-förfrågan. När arbetsflödet utlöses skapar det en ny Docker-avbildning, push-överför den till Azure Container Registry-instansen och uppdaterar containerappen till en ny revision med hjälp av den nya avbildningen.

Du kan köra Azure CLI-kommandon i Azure Cloud Shell- eller på en arbetsstation där Azure CLI- är installerad.

Om du kör kommandon i ett Git Bash-gränssnitt på en Windows-dator anger du följande kommando innan du fortsätter:

export MSYS_NO_PATHCONV=1
  1. Skapa ett tjänsthuvudnamn med hjälp av kommandot az ad sp create-for-rbac:

    az ad sp create-for-rbac \
    --name <app-name> \
    --role Contributor \
    --scopes "/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>"
    

    I kommandot:

    • <app-name> är ett valfritt displaynamn för tjänsteprincipalen. Om du lämnar alternativet --name genereras ett GUID som visningsnamn.
    • <prenumerations-ID> är det GUID som unikt identifierar din prenumeration i Azure. Om du inte känner till ditt prenumerations-ID kan du köra kommandot az account show och kopiera det från egenskapen id i utdata.
    • <resursgruppsnamn> är namnet på en resursgrupp som innehåller Azure Container Apps-containern. Rollbaserad åtkomstkontroll (RBAC) finns på resursgruppsnivå. Om du följde stegen i föregående självstudiekurs är namnet på resursgruppen pythoncontainer-rg.

    Spara utdata från det här kommandot för nästa steg. Spara särskilt klient-ID (appId attribut), klienthemlighet (password attribut) och hyresgäst-ID (tenant attribut).

  2. Konfigurera GitHub Actions med hjälp av kommandot az containerapp github-action add:

    az containerapp github-action add \
    --resource-group <resource-group-name> \
    --name python-container-app \
    --repo-url <https://github.com/userid/repo> \
    --branch main \
    --registry-url <registry-name>.azurecr.io \
    --service-principal-client-id <client-id> \
    --service-principal-tenant-id <tenant-id> \
    --service-principal-client-secret <client-secret> \
    --login-with-github
    

    I kommandot:

    • <resursgruppsnamn> är namnet på resursgruppen. I den här självstudien är det pythoncontainer-rg.
    • <https://github.com/userid/repo> är URL:en för din GitHub-lagringsplats. I den här självstudien är det antingen https://github.com/userid/msdocs-python-django-azure-container-apps eller https://github.com/userid/msdocs-python-flask-azure-container-apps. I dessa URL:er är userid ditt GitHub-användar-ID.
    • <registernamn> är den befintliga Azure Container Registry-instansen som du skapade i föregående självstudie, eller en som du kan använda.
    • <klient-ID> är värdet för egenskapen appId från föregående az ad sp create-for-rbac kommando. ID:t är ett GUID för formuläret 00000000-0000-0000-0000-00000000.
    • <klient-ID> är värdet för egenskapen tenant från föregående az ad sp create-for-rbac kommando. ID:t är också ett GUID som liknar klient-ID:t.
    • <klienthemlighet> är värdet för egenskapen password från föregående az ad sp create-for-rbac kommando.

I konfigurationen för kontinuerlig distribution möjliggör en tjänsthuvudman för GitHub Actions att komma åt och ändra Azure-resurser. Roller som tilldelats service principal begränsar åtkomsten till resurser. Tjänstens huvudobjekt tilldelades den inbyggda rollen Deltagare i resursgruppen som innehåller containerappen.

Om du följde stegen för portalen skapades tjänstens huvudnamn automatiskt åt dig. Om du följde stegen för Azure CLI skapade du uttryckligen tjänstens huvudnamn innan du konfigurerade kontinuerlig distribution.

Återdistribuera webbappen med GitHub Actions

I det här avsnittet gör du en ändring i din förgrenade kopia av exempellagringsplatsen. Därefter kan du bekräfta att ändringen distribueras automatiskt till webbplatsen.

Om du inte redan har gjort det, skapa en förgrening av exempelarkivet (Django eller Flask). Du kan göra din kodändring direkt i GitHub- eller i utvecklingsmiljön från en kommandorad med Git.

  1. Gå till din förgrening av exempellagringsplatsen och börja i grenen main.

    Skärmbild som visar huvudgrenen i en förgrening av exempelrepoen.

  2. Gör en ändring:

    1. Gå till filen /templates/base.html. (För Django är sökvägen restaurant_review/templates/restaurant_review/base.html.)
    2. Välj Redigera och ändra frasen Azure Restaurant Review till Azure Restaurant Review - Redeployed.

    Skärmbild som visar hur du gör en ändring i en mallfil i förgreningen av exempelrepoen.

  3. Längst ned på sidan som du redigerar kontrollerar du att Begå direkt till huvudgrenen är markerad. Välj sedan knappen Spara ändringar.

    Skärmbild som visar val för att genomföra en ändring i en mallfil i förgreningen av exempelrepoen.

Incheckningen startar GitHub Actions-arbetsflödet.

Not

Den här handledningen visar hur du gör en ändring direkt i huvudgrenen. I vanliga programvaruarbetsflöden gör du en ändring i en annan gren än huvudsakliga och skapar sedan en pull-begäran för att sammanfoga ändringen till huvudsakliga. Pull-begäranden startar också arbetsflödet.

Förstå GitHub Actions

Visa arbetsflödeshistorik

Om du behöver visa arbetsflödeshistoriken använder du någon av följande procedurer.

GitHub-går du till din förgrening av exempellagringsplatsen och öppnar fliken Åtgärder.

Skärmbild som visar arbetsflöden på fliken Åtgärder för en lagringsplats.

Arbetsflödeshemligheter

.github/workflows/<arbetsflödesnamn>.yml arbetsflödesfil som lades till på lagringsplatsen innehåller platshållare för autentiseringsuppgifter som behövs för arbetsflödets bygg- och containerappsuppdateringsjobb. Informationen om autentiseringsuppgifter lagras krypterad i lagringsplatsens Inställningar område, under Security>Secrets and variables>Actions.

Skärmbild som visar autentiseringsuppgifter som GitHub Actions-hemligheter.

Om information om autentiseringsuppgifter ändras kan du uppdatera den här. Om du till exempel återskapar Azure Container Registry-lösenorden måste du uppdatera värdet för REGISTRY_PASSWORD. Mer information finns i Krypterade hemligheter i GitHub-dokumentationen.

OAuth-auktoriserade appar

När du konfigurerar kontinuerlig distribution anger du Azure Container Apps som en auktoriserad OAuth-app för ditt GitHub-konto. Container Apps använder den auktoriserade åtkomsten för att skapa en GitHub Actions YAML-fil i .github/workflows/<arbetsflödesnamn>.yml. Du kan visa dina auktoriserade appar och återkalla behörigheter i ditt konto under Integrations>Applications.

Skärmbild som visar platsen för auktoriserade appar för en användare i GitHub.

Felsöka

Du får fel när du konfigurerar ett huvudnamn för tjänsten via Azure CLI

Det här avsnittet kan hjälpa dig att felsöka fel som du får när du konfigurerar ett huvudnamn för tjänsten med hjälp av kommandot Azure CLI az ad sp create-for-rba.

Om du får ett fel som innehåller "InvalidSchema: Inga anslutningskort hittades":

Om du får ett fel som innehåller "Fler än ett program har samma visningsnamn":

  • Namnet är redan taget för tjänstehuvudet. Välj ett annat namn eller utelämna argumentet --name. Ett GUID genereras automatiskt som visningsnamn.

GitHub Actions-arbetsflödet misslyckades

Om du vill kontrollera statusen för ett arbetsflöde går du till fliken Åtgärder på lagringsplatsen:

  • Om ett arbetsflöde har misslyckats, gå igenom arbetsflödesfilen. Det bör finnas två jobb: skapa och distribuera. För ett misslyckat jobb kontrollerar du utdata från jobbets aktiviteter för att söka efter problem.
  • Om det finns ett felmeddelande som innehåller TLS-handskakningens tidsgräns kör du arbetsflödet manuellt. På lagringsplatsen går du till fliken Åtgärder och väljer Utlösa automatisk distribution för att se om tidsgränsen är ett tillfälligt problem.
  • Om du konfigurerar kontinuerlig distribution för containerappen enligt den här självstudien skapas arbetsflödesfilen (.github/workflows/<arbetsflödesnamn>.yml) automatiskt åt dig. Du bör inte behöva ändra den här filen i den här handledningen. Om du gjorde det återställer du ändringarna och provar arbetsflödet.

Webbplatsen visar inte ändringar som du sammanfogade i huvudgrenen

I GitHub:

  • Kontrollera att GitHub Actions-arbetsflödet kördes och att du har kontrollerat ändringen i den gren som utlöser arbetsflödet.

I Azure-portalen:

  • Kontrollera Azure Container Registry-instansen för att se om en ny Docker-avbildning skapades med en tidsstämpel efter ändringen av grenen.

  • Kontrollera loggarna för containerappen för att se om det finns ett programmeringsfel:

    1. Gå till containerappen och gå sedan till Revisionshantering><aktiv container>>Revisionsinformation>konsolloggar.
    2. Välj ordningen på kolumnerna för att visa tidsgenererad, Stream_soch Log_s.
    3. Sortera loggarna efter de senaste och leta efter Python-stderr och stdout meddelanden i kolumnen Stream_s. Python-print utdata är stdout meddelanden.

I den Azure CLI:

Du vill stoppa kontinuerlig distribution

Att stoppa kontinuerlig distribution innebär att koppla bort din containerapp från ditt kodförråd.

I Azure-portalen:

  • Gå till containerappen. På tjänstmenyn väljer du Kontinuerlig distributionoch väljer sedan Koppla från.

I Azure CLI gör du följande:

När du har kopplat bort:

  • .github/workflows/<arbetsflödesnamn>.yml filen tas bort från lagringsplatsen.
  • Hemliga nycklar tas inte bort från lagringsplatsen.
  • Azure Container Apps förblir som en auktoriserad OAuth-app för ditt GitHub-konto.
  • På Azure förblir containern den senast distribuerade containern. Du kan återansluta containerappen med Azure Container Registry-instansen så att nya containerrevisioner hämtar den senaste avbildningen.
  • I Azure tas inte tjänstens huvudnamn som du skapade och använde för kontinuerlig distribution bort.

Ta bort resurser

Om du är klar med självstudieserien och inte vill medföra extra kostnader tar du bort de resurser som du använde.

Om du tar bort en resursgrupp tas alla resurser i gruppen bort och det snabbaste sättet att ta bort resurser. Ett exempel på hur du tar bort resursgrupper finns i rensning av Containerize-guiden.

Om du planerar att bygga vidare på den här självstudien kan du utföra följande steg: