Delen via


Continue implementatie configureren voor een Python-web-app in Azure Container Apps

Dit artikel maakt deel uit van een zelfstudie over het in een container zetten en implementeren van een Python-web-app in Azure Container Apps. Met Container Apps kunt u container-apps implementeren zonder dat u complexe infrastructuur hoeft te beheren.

In dit deel van de zelfstudie leert u hoe u continue implementatie of levering (CD) voor de container-app configureert. CD maakt deel uit van de DevOps-praktijk van continue integratie/continue levering (CI/CD), wat automatisering is van uw werkstroom voor app-ontwikkeling. In het bijzonder gebruikt u GitHub Actions voor continue implementatie.

In dit servicediagram worden de onderdelen beschreven in dit artikel: configuratie van CI/CD.

Een schermopname van de services in de zelfstudie : Een Python-app implementeren in Azure Container Apps. Secties zijn onderdelen met betrekking tot continue integratie- continue levering (CI/CD).

Vereisten

Als u continue implementatie wilt instellen, hebt u het volgende nodig:

  • De resources en de configuratie die zijn gemaakt in het vorige artikel van deze reeks zelfstudies, waaronder een Azure Container Registry en een container-app in Azure Container Apps.

  • Een GitHub-account waarmee u de voorbeeldcode (Django of Flask) hebt gesplitst en waarmee u verbinding kunt maken vanuit Azure Container Apps. (Als u de voorbeeldcode hebt gedownload in plaats van een forking, moet u uw lokale opslagplaats naar uw GitHub-account pushen.)

  • Git is optioneel geïnstalleerd in uw ontwikkelomgeving om codewijzigingen aan te brengen en naar uw opslagplaats in GitHub te pushen. U kunt de wijzigingen ook rechtstreeks in GitHub aanbrengen.

CD configureren voor een container

In een vorig artikel van deze zelfstudie hebt u een container-app gemaakt en geconfigureerd in Azure Container Apps. Een deel van de configuratie heeft een Docker-installatiekopie opgehaald uit een Azure Container Registry. De containerinstallatiekopie wordt opgehaald uit het register bij het maken van een containerrevisie, bijvoorbeeld wanneer u de container-app voor het eerst instelt.

In deze sectie stelt u continue implementatie in met behulp van een GitHub Actions-werkstroom. Bij continue implementatie worden een nieuwe Docker-installatiekopieën en containerrevisie gemaakt op basis van een trigger. De trigger in deze zelfstudie is elke wijziging in de hoofdbranch van uw opslagplaats, zoals met een pull-aanvraag (PR). Wanneer deze wordt geactiveerd, maakt de werkstroom een nieuwe Docker-installatiekopieën, pusht deze naar Azure Container Registry en werkt de container-app bij naar een nieuwe revisie met behulp van de nieuwe installatiekopieën.

Azure CLI-opdrachten kunnen worden uitgevoerd in Azure Cloud Shell of op een werkstation waarop de Azure CLI is geïnstalleerd.

Als u opdrachten uitvoert in een Git Bash-shell op een Windows-computer, voert u de volgende opdracht in voordat u doorgaat:

export MSYS_NO_PATHCONV=1

Stap 1. Maak een service-principal met de opdracht 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>"

Hierin:

  • <app-naam is een optionele weergavenaam> voor de service-principal. Als u de --name optie uitschakelt, wordt er een GUID gegenereerd als de weergavenaam.
  • <abonnements-id> is de GUID die uw abonnement uniek identificeert in Azure. Als u uw abonnements-id niet weet, kunt u de opdracht az account show uitvoeren en deze kopiëren vanuit de id eigenschap in de uitvoer.
  • <resource-group-name is de naam> van een resourcegroep die de Azure Container Apps-container bevat. Op rollen gebaseerd toegangsbeheer (RBAC) bevindt zich op het niveau van de resourcegroep. Als u de stappen in het vorige artikel in deze zelfstudie hebt gevolgd, is pythoncontainer-rgde naam van de resourcegroep.

Sla de uitvoer van deze opdracht op voor de volgende stap, met name de client-id (appId eigenschap), clientgeheim (password eigenschap) en tenant-id (tenant eigenschap).

Stap 2. Configureer GitHub Actions met az containerapp github-action add command.

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

Hierin:

  • <resource-group-name> is de naam van de resourcegroep. Als u deze zelfstudie volgt, is dit 'pythoncontainer-rg'.
  • <https://github.com/userid/repo> is de URL van uw GitHub-opslagplaats. Als u de stappen in deze zelfstudie volgt, is https://github.com/userid/msdocs-python-django-azure-container-apps dit ofwel https://github.com/userid/msdocs-python-flask-azure-container-apps; waar userid is uw GitHub-gebruikers-id.
  • <registernaam> is de bestaande Container Registry die u hebt gemaakt voor deze zelfstudie of een containerregister dat u kunt gebruiken.
  • <client-id> is de waarde van de appId eigenschap uit de vorige az ad sp create-for-rbac opdracht. De id is een GUID van het formulier 00000000-0000-0000-0000-000000000.
  • <tenant-id> is de waarde van de tenant eigenschap uit de vorige az ad sp create-for-rbac opdracht. De id is ook een GUID die vergelijkbaar is met de client-id.
  • <clientgeheim> is de waarde van de password eigenschap uit de vorige az ad sp create-for-rbac opdracht.

In de configuratie van continue implementatie wordt een service-principal gebruikt om GitHub Actions toegang te geven tot Azure-resources en deze te wijzigen. Toegang tot resources wordt beperkt door de rollen die zijn toegewezen aan de service-principal. Aan de service-principal is de ingebouwde rol Inzender toegewezen voor de resourcegroep die de container-app bevat.

Als u de stappen voor de portal hebt gevolgd, is de service-principal automatisch voor u gemaakt. Als u de stappen voor de Azure CLI hebt gevolgd, hebt u eerst de service-principal gemaakt voordat u continue implementatie configureert.

Web-app opnieuw implementeren met GitHub Actions

In deze sectie gaat u een wijziging aanbrengen in uw geforkte kopie van de voorbeeldopslagplaats en bevestigen dat de wijziging automatisch op de website wordt geïmplementeerd.

Als u dat nog niet hebt gedaan, maakt u een fork van de voorbeeldopslagplaats (Django of Flask). U kunt de code rechtstreeks in GitHub of in uw ontwikkelomgeving wijzigen vanaf een opdrachtregel met Git.

Stap 1. Ga naar uw fork van de voorbeeldopslagplaats en begin in de hoofdbranch .

Schermopname van een fork van de voorbeeldopslagplaats en beginnend in de hoofdvertakking.

Stap 2. Breng een wijziging aan.

  • Ga naar het bestand /templates/base.html . (Voor Django is het pad: restaurant_review/templates/restaurant_review/base.html.)
  • Selecteer Bewerken en wijzig de woordgroep 'Azure Restaurant Review' in 'Azure Restaurant Review - Opnieuw geïmplementeerd'.

Schermopname die laat zien hoe u een wijziging aanbrengt in een sjabloonbestand in de fork van de voorbeeldopslagplaats.

Stap 3. Voer de wijziging rechtstreeks door naar de hoofdbranch .

  • Selecteer onderaan de pagina die u bewerkt de knop Doorvoeren .
  • Met de doorvoering wordt de GitHub Actions-werkstroom gestart.

Schermopname die laat zien hoe u een wijziging doorvoert in een sjabloonbestand in de fork van de voorbeeldopslagplaats.

Notitie

We hebben een wijziging rechtstreeks in de hoofdbranch laten zien. In typische softwarewerkstromen maakt u een wijziging in een andere vertakking dan de hoofdvertakking en maakt u vervolgens een pull-aanvraag (PR) om deze wijziging samen te voegen in de hoofdversie. Pull-aanvragen starten ook de werkstroom.

Info over GitHub-acties

Werkstroomgeschiedenis weergeven

Stap 1. Ga op GitHub naar uw fork van de voorbeeldopslagplaats en open het tabblad Acties .

Schermopname van het weergeven van GitHub Actions voor een opslagplaats en het bekijken van werkstromen.

Werkstroomgeheimen

In de .github/workflows/<werkstroomnaam>.yml werkstroombestand dat is toegevoegd aan de opslagplaats, ziet u tijdelijke aanduidingen voor referenties die nodig zijn voor de updatetaken voor de build- en container-app-updatetaken van de werkstroom. De referentiegegevens worden versleuteld opgeslagen in de opslagplaatsinstellingen onder Beveiligingsgeheimen//en variabelenacties.

Schermopname die laat zien waar GitHub Actions-geheimen zijn opgeslagen in GitHub.

Als de referentiegegevens worden gewijzigd, kunt u deze hier bijwerken. Als de Azure Container Registry-wachtwoorden bijvoorbeeld opnieuw worden gegenereerd, moet u de REGISTRY_PASSWORD-waarde bijwerken. Zie Versleutelde geheimen in de GitHub-documentatie voor meer informatie.

Geautoriseerde OAuth-apps

Wanneer u continue implementatie instelt, autoriseert u Azure Container Apps als een geautoriseerde OAuth-app voor uw GitHub-account. Container Apps gebruikt de geautoriseerde toegang om een GitHub Actions YML-bestand te maken in .github/workflows/<workflow-name>.yml. U kunt uw geautoriseerde apps zien en machtigingen intrekken onder Integratietoepassingen/ van uw account.

Schermopname die laat zien hoe u de geautoriseerde apps voor een gebruiker in GitHub kunt zien.

Tips voor probleemoplossing

Fouten bij het instellen van een service-principal met de Azure CLI-opdracht az ad sp create-for-rba .

  • Er wordt een foutbericht weergegeven met 'InvalidSchema: Er zijn geen verbindingsadapters gevonden'.

  • Er wordt een foutbericht weergegeven met 'Meer dan één toepassing heeft dezelfde weergavenaam'.

    • Deze fout geeft aan dat de naam al is gebruikt voor de service-principal. Kies een andere naam of laat het --name argument weg en er wordt automatisch een GUID gegenereerd als weergavenaam.

GitHub Actions-werkstroom is mislukt.

  • Als u de status van een werkstroom wilt controleren, gaat u naar het tabblad Acties van de opslagplaats.
  • Als er een mislukte werkstroom is, zoomt u in op het werkstroombestand. Er moeten twee taken 'build' en 'deploy' zijn. Bekijk voor een mislukte taak de uitvoer van de taken van de taak om te zoeken naar problemen.
  • Als u een foutbericht ziet met de time-out voor TLS-handshake, voert u de werkstroom handmatig uit door automatische implementatie activeren te selecteren op het tabblad Acties van de opslagplaats om te zien of de time-out een tijdelijk probleem is.
  • Als u continue implementatie instelt voor de container-app, zoals wordt weergegeven in deze zelfstudie, wordt het werkstroombestand (.github/workflows/<workflow-name>.yml) automatisch voor u gemaakt. U hoeft dit bestand niet te wijzigen voor deze zelfstudie. Als u dit hebt gedaan, kunt u de wijzigingen terugzetten en de werkstroom proberen.

Op de website worden geen wijzigingen weergegeven die u in de hoofdbranch hebt samengevoegd.

  • Controleer in GitHub of de GitHub Actions-werkstroom is uitgevoerd en of u de wijziging hebt gecontroleerd in de vertakking die de werkstroom activeert.
  • Controleer in Azure Portal of azure Container Registry is gemaakt met een tijdstempel na de wijziging in de vertakking of er een nieuwe Docker-installatiekopieën zijn gemaakt.
  • Controleer in Azure Portal de logboeken van de container-app. Als er een programmeerfout is, ziet u deze hier.
    • Ga naar de container-app | Revisiebeheer | <actieve container> | Revisiedetails | Consolelogboeken
    • Kies de volgorde van de kolommen om 'Tijd gegenereerd', 'Stream_s' en 'Log_s' weer te geven. Sorteer de logboeken op de meest recente eerste en zoek naar Python-stderr- en stdout-berichten in de kolom 'Stream_s'. Python-uitvoer 'afdrukken' bevat stdout-berichten .
  • Gebruik met de Azure CLI de opdracht az containerapp logs show .

Wat gebeurt er wanneer ik continue implementatie loskoppel?

  • Het stoppen van continue implementatie betekent dat de verbinding tussen uw container-app en uw opslagplaats wordt verbroken. Verbinding verbreken:

  • Nadat de verbinding is verbroken, gaat u als volgt te werk in uw GitHub-opslagplaats:

    • Het bestand .github/workflows/<workflow-name>.yml wordt verwijderd uit uw opslagplaats.
    • Geheime sleutels worden niet verwijderd.
    • Azure Container Apps blijft als een geautoriseerde OAuth-app voor uw GitHub-account.
  • Nadat de verbinding is verbroken, gaat u naar Azure:

    • De container blijft over met de laatst geïmplementeerde container. U kunt de container-app opnieuw verbinden met Azure Container Registry, zodat nieuwe containerrevisies de meest recente installatiekopieën ophalen.
    • Service-principals die zijn gemaakt en gebruikt voor continue implementatie, worden niet verwijderd.

Volgende stappen

Als u klaar bent met de zelfstudie en geen extra kosten wilt maken, verwijdert u de gebruikte resources. Als u een resourcegroep verwijdert, worden alle resources in de groep verwijderd en is dit de snelste manier om resources te verwijderen. Zie Zelfstudie Containerize voor een voorbeeld van het verwijderen van resourcegroepen.

Als u van plan bent om voort te bouwen op deze zelfstudie, volgen hier enkele volgende stappen die u kunt uitvoeren.