gebeurtenis
17 mrt, 23 - 21 mrt, 23
Neem deel aan de meetup-serie om schaalbare AI-oplossingen te bouwen op basis van praktijkgebruiksvoorbeelden met collega-ontwikkelaars en experts.
Nu registrerenDeze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
Gebruik het Ci/CD-platform (continue integratie en continue levering) van GitHub Actions om een Python-web-app te implementeren in Azure-app Service op Linux. Uw GitHub Actions-werkstroom bouwt automatisch de code en implementeert deze in de App Service wanneer er een doorvoering naar de opslagplaats is. U kunt andere automatisering toevoegen in uw GitHub Actions-werkstroom, zoals testscripts, beveiligingscontroles en implementatie met meerdere fasen.
Als u al een Python-web-app hebt om te gebruiken, controleert u of deze is doorgevoerd in een GitHub-opslagplaats.
Als u een app nodig hebt om mee te werken, kunt u de opslagplaats splitsen en klonen op https://github.com/Microsoft/python-sample-vscode-flask-tutorial. De code is afkomstig uit de zelfstudie Flask in Visual Studio Code.
Notitie
Als uw app Django en een SQLite-database gebruikt, werkt deze niet voor deze zelfstudie. Als uw Django-app een afzonderlijke database zoals PostgreSQL gebruikt, kunt u deze gebruiken met deze zelfstudie. Zie overwegingen voor Django verderop in dit artikel voor meer informatie over Django.
De snelste manier om een App Service-exemplaar te maken, is door de Azure-opdrachtregelinterface (CLI) te gebruiken via de interactieve Azure Cloud Shell. De Cloud Shell bevat Git en Azure CLI. In de volgende stappen gebruikt u az webapp om zowel de App Service te maken als de eerste implementatie van uw app uit te voeren.
Stap 1. Meld u aan bij de Azure Portal op https://portal.azure.com.
Stap 2. Open de Azure CLI door het Cloud Shell-pictogram op de portalwerkbalk te selecteren.
Stap 3. Selecteer Bash in de Cloud Shell in de vervolgkeuzelijst.
Stap 4. Kloon uw opslagplaats in Cloud Shell met behulp van git-kloon. Als u bijvoorbeeld de Flask-voorbeeld-app gebruikt, is de opdracht:
git clone https://github.com/<github-user>/python-sample-vscode-flask-tutorial.git
Vervang <github-gebruiker> door de naam van het GitHub-account waar u de opslagplaats hebt gesplitst. Als u een andere app-opslagplaats gebruikt, gaat u in deze opslagplaats GitHub Actions instellen.
Notitie
Cloud Shell wordt ondersteund door een Azure Storage-account in een resourcegroep met de naam cloud-shell-storage-your-region><. Dat opslagaccount bevat een afbeelding van het bestandssysteem van Cloud Shell, waarin de gekloonde opslagplaats wordt opgeslagen. Er zijn kleine kosten voor deze opslag. U kunt het opslagaccount aan het einde van dit artikel verwijderen, samen met andere resources die u maakt.
Tip
Als u in Cloud Shell wilt plakken, gebruikt u Ctrl+Shift+V of klikt u met de rechtermuisknop en selecteert u Plakken in het contextmenu.
Stap 5. Wijzig in Cloud Shell de map in de opslagplaatsmap met uw Python-app, zodat de opdracht az webapp up de app herkent als Python. Bijvoorbeeld voor de Flask-voorbeeld-app:
cd python-sample-vscode-flask-tutorial
Stap 6. Gebruik az webapp up in Cloud Shell om een App Service te maken en uw app in eerste instantie te implementeren.
az webapp up --name <app-service-name> --runtime "PYTHON:3.9"
Geef een App Service-naam op die uniek is in Azure. De naam moet 3 tot 60 tekens lang zijn en mag alleen letters, cijfers en afbreekstreepjes bevatten. De naam moet beginnen met een letter en eindigen op een letter of cijfer.
Hiermee az webapp list-runtimes
haalt u een lijst met beschikbare runtimes op. Gebruik de PYTHON|X.Y
indeling, waar X.Y
is de Python-versie.
U kunt ook de locatie van de App Service opgeven met de --location
parameter. Gebruik de az account list-locations --output table
opdracht om een lijst met beschikbare locaties op te halen.
Stap 7. Als uw app een aangepaste opstartopdracht gebruikt, gebruikt u de az webapp config die opdracht. Als uw app geen aangepaste opstartopdracht heeft, kunt u deze stap overslaan.
De app python-sample-vscode-flask-tutorial bevat bijvoorbeeld een bestand met de naam startup.txt dat een opstartopdracht bevat die u als volgt kunt gebruiken:
az webapp config set \
--resource-group <resource-group-name> \
--name <app-service-name> \
--startup-file startup.txt
U vindt de naam van de resourcegroep in de uitvoer van de vorige az webapp up
opdracht. De naam van de resourcegroep begint met <azure-account-name>_rg_.
Stap 8. Als u de actieve app wilt zien, opent u een browser en gaat u naar http:// app-service-name.azurewebsites.net>.<
Als u een algemene pagina ziet, wacht u enkele seconden totdat de App Service is gestart en vernieuwt u de pagina. Als u de algemene pagina blijft zien, controleert u of u de juiste map hebt geïmplementeerd. Als u bijvoorbeeld de Flask-voorbeeld-app gebruikt, is de map python-sample-vscode-flask-tutorial. Controleer ook voor de Flask-voorbeeld-app of u de opstartopdracht juist hebt ingesteld.
In de onderstaande stappen stelt u continue implementatie (CD) in, wat betekent dat er een nieuwe code-implementatie plaatsvindt wanneer een werkstroom wordt geactiveerd. De trigger in deze zelfstudie is elke wijziging in de hoofdbranch van uw opslagplaats, zoals met een pull-aanvraag (PR).
Stap 1. Voeg GitHub Action toe met de opdracht az webapp deployment github-actions add .
az webapp deployment github-actions add \
--repo "<github-user>/<github-repo>" \
--resource-group <resource-group-name> \
--branch <branch-name> \
--name <app-service-name> \
--login-with-github
De --login-with-github
parameter maakt gebruik van een interactieve methode om een persoonlijk toegangstoken op te halen. Volg de aanwijzingen om de verificatie te voltooien.
Als er een bestaand werkstroombestand is dat conflicteert met de naam die App Service gebruikt, wordt u gevraagd of u wilt overschrijven. Gebruik de --force
parameter om te overschrijven zonder te vragen.
Wat de opdracht toevoegen doet:
Stap 2. Haal de details van een implementatieconfiguratie voor broncodebeheer op met de opdracht az webapp deployment source show .
az webapp deployment source show \
--name <app-service-name> \
--resource-group <resource-group-name>
Bevestig in de uitvoer van de opdracht de waarden voor de repoUrl
en branch
eigenschappen. Deze waarden moeten overeenkomen met de waarden die u in de vorige stap hebt opgegeven.
Een werkstroom wordt gedefinieerd door een YAML-bestand (.yml) in het pad /.github/workflows/ in uw opslagplaats. Dit YAML-bestand bevat de verschillende stappen en parameters waaruit de werkstroom bestaat, een geautomatiseerd proces dat is gekoppeld aan een GitHub-opslagplaats. U kunt elk project bouwen, testen, verpakken, vrijgeven en implementeren op GitHub met een werkstroom.
Elke werkstroom bestaat uit een of meer taken. Elke taak is op zijn beurt een reeks stappen. En tot slot is elke stap een shellscript of een actie.
In termen van de werkstroom die is ingesteld met uw Python-code voor implementatie in App Service, heeft de werkstroom de volgende acties:
Actie | Beschrijving |
---|---|
Checkout | Bekijk de opslagplaats op een runner, een GitHub Actions-agent. |
setup-python | Installeer Python op de runner. |
appservice-build | Bouw de web-app. |
webapps-deploy | Implementeer de web-app met behulp van een publicatieprofielreferentie om te verifiëren in Azure. De referentie wordt opgeslagen in een GitHub-geheim. |
De werkstroomsjabloon die wordt gebruikt om de werkstroom te maken, is Azure/actions-workflow-samples.
De werkstroom wordt geactiveerd bij pushgebeurtenissen naar de opgegeven vertakking. De gebeurtenis en vertakking worden gedefinieerd aan het begin van het werkstroombestand. In het volgende codefragment ziet u bijvoorbeeld dat de werkstroom wordt geactiveerd bij pushgebeurtenissen naar de hoofdbranch :
on:
push:
branches:
- main
Wanneer u continue implementatie instelt, autoriseert u Azure-app Service als een geautoriseerde OAuth-app voor uw GitHub-account. App Service gebruikt de geautoriseerde toegang om een GitHub-actie YML-bestand te maken in .github/workflows/<workflow-name.yml>. U kunt uw geautoriseerde apps zien en machtigingen intrekken onder uw GitHub-accounts Instellingen, onder Integraties/toepassingen.
In het werkstroombestand .github/workflows/<workflow-name.yml> dat is toegevoegd aan de opslagplaats, ziet u een tijdelijke aanduiding voor het publiceren van profielreferenties die nodig zijn voor de implementatietaak van de werkstroom. De publicatieprofielgegevens worden versleuteld opgeslagen in de opslagplaats Instellingen, onder Beveiliging/acties.
In dit artikel wordt de GitHub-actie geverifieerd met een referentie voor een publicatieprofiel. Er zijn andere manieren om te verifiëren, zoals met een service-principal of OpenID-Verbinding maken. Zie Implementeren in App Service met behulp van GitHub Actions voor meer informatie.
Nu gaat u de werkstroom testen door een wijziging aan te brengen in de opslagplaats.
Stap 1. Ga naar de fork van de voorbeeldopslagplaats (of de opslagplaats die u hebt gebruikt) en selecteer de vertakking die u hebt ingesteld als onderdeel van de trigger.
Stap 2. Breng een kleine wijziging aan.
Als u bijvoorbeeld de VS Code Flask-zelfstudie hebt gebruikt, kunt u
Stap 3. Voer de wijziging rechtstreeks door naar de vertakking waarin u werkt.
U kunt de werkstroom ook handmatig starten.
Stap 1. Ga naar het tabblad Acties van de opslagplaats die is ingesteld voor continue implementatie.
Stap 2. Selecteer de werkstroom in de lijst met werkstromen en selecteer vervolgens Werkstroom uitvoeren.
Als u de status van een werkstroom wilt controleren, gaat u naar het tabblad Acties van de opslagplaats. Wanneer u inzoomt op het werkstroombestand dat in deze zelfstudie is gemaakt, ziet u twee taken 'build' en 'deploy'. Voor een mislukte taak bekijkt u de uitvoer van taaktaken voor een indicatie van de fout. Enkele veelvoorkomende problemen zijn:
Als de app mislukt vanwege een ontbrekende afhankelijkheid, is uw bestand requirements.txt niet verwerkt tijdens de implementatie. Dit gedrag treedt op als u de web-app rechtstreeks in de portal hebt gemaakt in plaats van de az webapp up
opdracht te gebruiken, zoals wordt weergegeven in dit artikel.
Als u de app-service hebt ingericht via de portal, is de buildactie SCM_DO_BUILD_DURING_DEPLOYMENT instelling mogelijk niet ingesteld. Deze instelling moet zijn ingesteld op true
. Met az webapp up
de opdracht wordt de build-actie automatisch ingesteld.
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>) in eerste instantie automatisch voor u gemaakt. Als u deze hebt gewijzigd, verwijdert u de wijzigingen om te zien of deze de fout veroorzaken.
Een script na de implementatie kan bijvoorbeeld omgevingsvariabelen definiëren die worden verwacht door de app-code. Voeg het script toe als onderdeel van de app-code en voer het uit met behulp van de opstartopdracht.
Als u hardcoderingsvariabelewaarden in uw YML-bestand van uw werkstroom wilt voorkomen, kunt u deze in plaats daarvan in de GitHub-webinterface raadplegen en vervolgens verwijzen naar de naam van de variabele in het script. U kunt versleutelde geheimen maken voor een opslagplaats of voor een omgeving (accountopslagplaats). Zie Versleutelde geheimen in GitHub Docs voor meer informatie.
Zoals eerder in dit artikel is vermeld, kunt u GitHub Actions gebruiken om Django-apps te implementeren in Azure-app Service op Linux, als u een afzonderlijke database gebruikt. U kunt geen SQLite-database gebruiken, omdat App Service het bestand db.sqlite3 vergrendelt, waardoor zowel lees- als schrijfbewerkingen worden voorkomen. Dit gedrag heeft geen invloed op een externe database.
Zoals beschreven in het artikel Python-app configureren in App Service - Container opstarten, zoekt App Service automatisch naar een wsgi.py-bestand in uw app-code, dat meestal het app-object bevat. Wanneer u de opdracht hebt gebruikt om de webapp config set
opstartopdracht in te stellen, hebt u de --startup-file
parameter gebruikt om het bestand op te geven dat het app-object bevat. De webapp config set
opdracht is niet beschikbaar in de webapps-deploy-actie. In plaats daarvan kunt u de startup-command
parameter gebruiken om de opstartopdracht op te geven. In het volgende codefragment ziet u bijvoorbeeld hoe u de opstartopdracht opgeeft in het werkstroombestand:
startup-command: startup.txt
Wanneer u Django gebruikt, wilt u doorgaans de gegevensmodellen migreren met behulp van python manage.py migrate
de opdracht nadat u de app-code hebt geïmplementeerd. U kunt de migratieopdracht uitvoeren in een script na de implementatie.
Als u de verbinding met GitHub Actions van uw App Service verbreekt, kunt u de implementatie van de app opnieuw configureren. U kunt kiezen wat er gebeurt met uw werkstroombestand nadat u de verbinding hebt verbroken, ongeacht of u het bestand wilt opslaan of verwijderen.
Verbreek de verbinding met GitHub Actions met Azure CLI az webapp deployment github-actions remove command.
az webapp deployment github-actions remove \
--repo "<github-user>/<github-repo>" \
--resource-group <resource-group-name> \
--branch <branch-name> \
--name <app-service-name> \
--login-with-github
Verwijder de resourcegroep die de App Service en het App Service-plan bevat om te voorkomen dat er kosten in rekening worden gebracht voor de Azure-resources die in deze zelfstudie zijn gemaakt.
Overal waar de Azure CLI is geïnstalleerd, inclusief de Azure Cloud Shell, kunt u de opdracht az group delete gebruiken om de resourcegroep te verwijderen.
az group delete --name <resource-group-name>
Als u het opslagaccount wilt verwijderen dat het bestandssysteem voor Cloud Shell onderhoudt, waarvoor een kleine maandelijkse kosten in rekening worden gebracht, verwijdert u de resourcegroep die begint met cloud-shell-storage. Als u de enige gebruiker van de groep bent, is het veilig om de resourcegroep te verwijderen. Als er andere gebruikers zijn, kunt u een opslagaccount in de resourcegroep verwijderen.
Als u de Azure-resourcegroep hebt verwijderd, kunt u ook de volgende wijzigingen aanbrengen in het GitHub-account en de opslagplaats die is verbonden voor continue implementatie:
gebeurtenis
17 mrt, 23 - 21 mrt, 23
Neem deel aan de meetup-serie om schaalbare AI-oplossingen te bouwen op basis van praktijkgebruiksvoorbeelden met collega-ontwikkelaars en experts.
Nu registrerenTraining
Module
Build and deploy applications to Azure by using GitHub Actions - Training
Create two deployment workflows using GitHub Actions and Microsoft Azure. Learn about triggering a CD workflow and storing credentials.
Certificering
Microsoft Certified: Azure Developer Associate - Certifications
Build end-to-end solutions in Microsoft Azure to create Azure Functions, implement and manage web apps, develop solutions utilizing Azure storage, and more.
Documentatie
Quickstart: Deploy a Python (Django, Flask, or FastAPI) web app to Azure - Azure App Service
Get started with Azure App Service by deploying your first Python app to Azure App Service.
Configure Linux Python apps - Azure App Service
Learn how to configure the Python container in which web apps are run, using both the Azure portal and the Azure CLI.
Publish Python web app to Azure App Service on Linux - Visual Studio (Windows)
Publish a Python web application directly to Azure App Service on Linux from Visual Studio, including the necessary content for the web.config file.