Dela via


Konfigurera kontinuerlig distribution för en Python-webbapp i Azure Container Apps

Den här artikeln är en del av en självstudie om hur du 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 delen av självstudien får du lära dig hur du konfigurerar kontinuerlig distribution eller leverans (CD) för containerappen. CD är en del av DevOps-metoden för kontinuerlig integrering/kontinuerlig leverans (CI/CD), som är automatisering av ditt arbetsflöde för apputveckling. Mer specifikt använder du GitHub Actions för kontinuerlig distribution.

Det här tjänstdiagrammet visar de komponenter som beskrivs i den här artikeln: konfiguration av CI/CD.

En skärmbild av tjänsterna i självstudien – Distribuera en Python-app i Azure Container Apps. Avsnitt som är markerade är delar som rör kontinuerlig integrering – kontinuerlig leverans (CI/CD).

Förutsättningar

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

  • Resurserna och konfigurationen som skapades i föregående artikel i den här självstudieserien, som innehåller ett Azure Container Registry och en containerapp i Azure Container Apps.

  • Ett GitHub-konto där du förgrenade exempelkoden (Django eller Flask) och du kan ansluta till från Azure Container Apps. (Om du har laddat ned exempelkoden i stället för att förgrena dig kontrollerar du att du push-överför din lokala lagringsplats till ditt GitHub-konto.)

  • Du kan också installera Git i utvecklingsmiljön för att göra kodändringar och push-överföra till lagringsplatsen i GitHub. Du kan också göra ändringarna direkt i GitHub.

Konfigurera CD för en container

I en tidigare artikel i den här 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 ett Azure Container Registry. Containeravbildningen hämtas från registret när du skapar en containerrevision, 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 containerrevision baserat på en utlösare. Utlösaren i den här självstudien är en ändring av huvudgrenen för lagringsplatsen, till exempel med en pull-begäran (PR). När det utlöses skapar arbetsflödet en ny Docker-avbildning, push-överför den till Azure Container Registry och uppdaterar containerappen till en ny revision med den nya avbildningen.

Azure CLI-kommandon kan köras i Azure Cloud Shell eller på en arbetsstation med Azure CLI installerat.

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

Steg 1. Skapa ett huvudnamn för tjänsten med 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>"

Där:

  • <appnamn> är ett valfritt visningsnamn för tjänstens huvudnamn. Om du lämnar alternativet --name genereras ett GUID som visningsnamn.
  • <subscription-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 id egenskapen i utdata.
  • <resource-group-name> ä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 artikel i den här självstudien är pythoncontainer-rgresursgruppens namn .

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

Steg 2. Konfigurera GitHub Actions med 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

Där:

  • <resource-group-name> är namnet på resursgruppen. Om du följer den här självstudien är det "pythoncontainer-rg".
  • <https://github.com/userid/repo> är URL:en för din GitHub-lagringsplats. Om du följer stegen i den här självstudien blir det antingen https://github.com/userid/msdocs-python-django-azure-container-apps eller https://github.com/userid/msdocs-python-flask-azure-container-apps; där userid är ditt GitHub-användar-ID.
  • <registernamn> är det befintliga Container Registry som du skapade för den här självstudien, eller ett som du kan använda.
  • <client-id> är värdet för appId egenskapen från föregående az ad sp create-for-rbac kommando. ID:t är ett GUID i formuläret 00000000-0000-0000-0000-000000000.
  • <tenant-id> är värdet för tenant egenskapen från föregående az ad sp create-for-rbac kommando. ID:t är också ett GUID som liknar klient-ID:t.
  • <client-secret> är värdet för password egenskapen från föregående az ad sp create-for-rbac kommando.

I konfigurationen av kontinuerlig distribution används ett huvudnamn för tjänsten för att göra det möjligt för GitHub Actions att komma åt och ändra Azure-resurser. Åtkomsten till resurser begränsas av de roller som tilldelats tjänstens huvudnamn. Tjänstens huvudnamn tilldelades den inbyggda deltagarrollen 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 först innan du konfigurerade kontinuerlig distribution.

Distribuera om webbappen med GitHub Actions

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

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

Steg 1. Gå till din förgrening av exempellagringsplatsen och starta i huvudgrenen.

Skärmbild som visar en förgrening av exempelrepo och som börjar i huvudgrenen.

Steg 2. Gör en ändring.

  • Gå till filen /templates/base.html . (För Django är sökvägen: restaurant_review/templates/restaurant_review/base.html.)
  • Välj Redigera och ändra frasen "Azure Restaurant Review" till "Azure Restaurant Review – Omdistribuerad".

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

Steg 3. Checka in ändringen direkt till huvudgrenen .

  • Längst ned på sidan som du redigerar väljer du knappen Checka in .
  • Incheckningen startar GitHub Actions-arbetsflödet.

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

Kommentar

Vi visade att vi gjorde en ändring direkt i huvudgrenen. I vanliga programvaruarbetsflöden gör du en ändring i en annan gren än main och skapar sedan en pull-begäran (PR) för att sammanfoga ändringen till main. PR:er startar också arbetsflödet.

Om GitHub-åtgärder

Visa arbetsflödeshistorik

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

Skärmbild som visar hur du visar GitHub Actions för en lagringsplats och tittar på arbetsflöden.

Arbetsflödes hemligheter

I .github/workflows/<workflow-name>.yml arbetsflödesfil som lades till på lagringsplatsen ser du platshållare för autentiseringsuppgifter som behövs för uppdateringsjobben för bygg- och containerappen i arbetsflödet. Informationen om autentiseringsuppgifter lagras krypterad i lagringsplatsen Inställningar under Säkerhetshemligheter//och variabler Åtgärder.

Skärmbild som visar hur du ser var GitHub Actions-hemligheter lagras i GitHub.

Om information om autentiseringsuppgifter ändras kan du uppdatera den här. Om Azure Container Registry-lösenorden till exempel återskapas 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 godkänner 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 YML-fil i .github/workflows/<workflow-name>.yml. Du kan se dina auktoriserade appar och återkalla behörigheter under Integreringsprogram/för ditt konto.

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

Felsökningstips

Fel vid konfiguration av tjänstens huvudnamn med Azure CLI-kommandot az ad sp create-for-rba .

  • Du får ett felmeddelande som innehåller "InvalidSchema: Inga anslutningskort hittades".

  • Du får ett felmeddelande som innehåller "Fler än ett program har samma visningsnamn".

    • Det här felet anger att namnet redan har tagits för tjänstens huvudnamn. Välj ett annat namn eller utelämna --name argumentet så genereras ett GUID automatiskt som visningsnamn.

GitHub Actions-arbetsflödet misslyckades.

  • Om du vill kontrollera status för ett arbetsflöde går du till fliken Åtgärder på lagringsplatsen.
  • Om det finns ett misslyckat arbetsflöde kan du öka detaljnivån i arbetsflödesfilen. Det bör finnas två jobb "build" och "deploy". För ett misslyckat jobb kan du titta på utdata från jobbets aktiviteter för att söka efter problem.
  • Om du ser ett felmeddelande med tidsgränsen för TLS-handskakning kör du arbetsflödet manuellt genom att välja Utlösa automatisk distributionfliken Åtgärder på lagringsplatsen 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/<workflow-name>.yml) automatiskt åt dig. Du bör inte behöva ändra den här filen för den här självstudien. Om du gjorde det återställer du ändringarna och provar arbetsflödet.

Webbplatsen visar inte ändringar som du har sammanfogat i huvudgrenen.

  • I GitHub: kontrollera att GitHub Actions-arbetsflödet kördes och att du checkade in ändringen i den gren som utlöser arbetsflödet.
  • I Azure-portalen: Kontrollera Azure Container Registry för att se om en ny Docker-avbildning har skapats med en tidsstämpel efter ändringen av grenen.
  • I Azure-portalen: kontrollera loggarna för containerappen. Om det finns ett programmeringsfel visas det här.
    • Gå till containerappen | Revisionshantering | <aktiv container> | Revisionsinformation | Konsolloggar
    • Välj ordningen på kolumnerna för att visa "Time Generated", "Stream_s" och "Log_s". Sortera loggarna efter de senaste först och leta efter Python stderr - och stdout-meddelanden i kolumnen "Stream_s". Utdata från Python "print" kommer att vara stdout-meddelanden .
  • Med Azure CLI använder du kommandot az containerapp logs show .

Vad händer när jag kopplar från kontinuerlig distribution?

  • Att stoppa kontinuerlig distribution innebär att du kopplar från containerappen från lagringsplatsen. Så här kopplar du från:

  • Efter frånkopplingen går du till din GitHub-lagringsplats:

    • Filen .github/workflows/<workflow-name>.yml tas bort från lagringsplatsen.
    • Hemliga nycklar tas inte bort.
    • Azure Container Apps förblir som en auktoriserad OAuth-app för ditt GitHub-konto.
  • Efter frånkopplingen i Azure:

    • Containern finns kvar med den senast distribuerade containern. Du kan återansluta containerappen med Azure Container Registry så att nya containerrevisioner hämtar den senaste avbildningen.
    • Tjänstens huvudnamn som skapats och används för kontinuerlig distribution tas inte bort.

Nästa steg

Om du är klar med självstudien och inte vill medföra extra kostnader tar du bort de resurser som används. 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 containerbaserad självstudie.

Om du planerar att bygga vidare på den här självstudien kan du utföra några nästa steg.