Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan használható a folyamatos integrációs és folyamatos kézbesítési (CI/CD) platform a GitHub Actionsben Python-webalkalmazás üzembe helyezéséhez Linuxon az Azure App Service-ben. A GitHub Actions-munkafolyamat automatikusan létrehozza a kódot, és üzembe helyezi azt az App Service-példányon, amikor véglegesítést végez az adattárban. A GitHub Actions-munkafolyamatban további automatizálásokat is hozzáadhat, például tesztszkripteket, biztonsági ellenőrzéseket és többlépcsős üzembe helyezést.
Adattár létrehozása alkalmazáskódhoz
A cikkben ismertetett eljárások elvégzéséhez egy GitHub-adattárban véglegesített Python-webalkalmazásra van szükség.
Meglévő alkalmazás: Meglévő Python-webalkalmazás használatához győződjön meg arról, hogy az alkalmazás egy GitHub-adattárhoz van kötve.
Új alkalmazás: Ha új Python-webalkalmazásra van szüksége, elágaztathatja és klónozhatja a https://github.com/Microsoft/python-sample-vscode-flask-tutorial GitHub-adattárat. A mintakód támogatja a Flask in Visual Studio Code oktatóanyagot, és egy működő Python-alkalmazást biztosít.
Megjegyzés:
Ha az alkalmazás Django-t és SQLite-adatbázist használ, az nem fog működni ezeken az eljárásokon. Az SQLite a legtöbb felhőalapú környezetben nem támogatott a helyi fájlalapú tárolási korlátozások miatt. Érdemes lehet felhőkompatibilis adatbázisra váltani, például a PostgreSQL-re vagy az Azure Cosmos DB-re. További információ: A Django szempontjainak áttekintése a cikk későbbi részében.
A kijelölt App Service példányának létrehozása
Az App Service-példányok létrehozásának leggyorsabb módja az Azure parancssori felületének (CLI) használata az interaktív Azure Cloud Shellen keresztül. A Cloud Shell tartalmazza a Gitet és az Azure CLI-t. Az alábbi eljárás során az az webapp up paranccsal hozza létre az App Service-példányt, és végezze el az alkalmazás kezdeti üzembe helyezését.
Jelentkezzen be az Azure Portalra a https://portal.azure.com webhelyen.
Nyissa meg az Azure CLI-t a Cloud Shell lehetőség kiválasztásával a portál eszköztárán:
A Cloud Shellben válassza a Bash lehetőséget a legördülő menüben:
A Cloud Shellben klónozza az adattárat a Git Clone paranccsal.
Jótanács
Parancsok vagy szöveg Cloud Shellbe való beillesztéséhez használja a Ctrl+Shift+V billentyűparancsot, vagy kattintson a jobb gombbal, és válassza a Helyi menü Beillesztés parancsát .
A Flask-mintaalkalmazáshoz az alábbi parancsot használhatja. Cserélje le a
<github-user>részt annak a GitHub-fióknak a nevére, ahol forkolta a tárházat.git clone https://github.com/<github-user>/python-sample-vscode-flask-tutorial.gitHa az alkalmazás egy másik adattárban található, állítsa be a GitHub Actionst az adott adattárhoz. Cserélje le a
<github-user>részt annak a GitHub-fióknak a nevére, ahol elágaztatta a repót, és adja meg a tényleges repónév a<repo-name>helyőrzőben:git clone https://github.com/<github-user>/<repo-name>.git
Megjegyzés:
A Cloud Shellt egy Azure Storage-fiók felügyeli egy cloud-shell-storage-your-region<> nevű erőforráscsoportban. Ez a tárfiók tartalmazza a Cloud Shell fájlrendszer képét, amely a klónozott adattárat tárolja. Ennek a tárolónak kis költsége van. A cikk befejezése után törölheti a tárfiókot, valamint a létrehozott egyéb erőforrásokat.
A Cloud Shellben módosítsa a címtárat a Python-alkalmazás adattármappájába, így az az webapp up parancs Pythonként ismeri fel az alkalmazást. A Flask-mintaalkalmazáshoz a következő parancsot kell használnia:
cd python-sample-vscode-flask-tutorialA Cloud Shellben az az webapp up paranccsal hozzon létre egy App Service-példányt, és végezze el az alkalmazás kezdeti üzembe helyezését:
az webapp up --name <app-service-name> --runtime "PYTHON:3.9"A
<app-service-name>helyőrzőről adjon meg egy olyan App Service nevet, amely az Azure-ban egyedi. A névnek 3–60 karakter hosszúságúnak kell lennie, és csak betűket, számokat és kötőjeleket tartalmazhat. A névnek betűvel kell kezdődnie, és betűvel vagy számmal kell végződnie.A rendszeren elérhető futtatókörnyezetek listájához használja a
az webapp list-runtimesparancsot.Amikor megadja a futtatókörnyezet értékét a parancsban, használja a
PYTHON:X.Yformátumot, aholX.Ya Python fő- és alverziója található.A
--locationparaméterrel megadhatja az App Service-példány régiójának helyét is. Az elérhető helyek listájához használja aaz account list-locations --output tableparancsot.
Ha az alkalmazás egyéni indítási szkripttel rendelkezik, az az webapp config paranccsal kezdeményezheti a szkriptet.
Ha az alkalmazás nem rendelkezik egyéni indítási szkripttel, folytassa a következő lépéssel.
A Flask-mintaalkalmazáshoz az alábbi parancs futtatásával kell hozzáférnie a startup.txt fájlban lévő indítási szkripthez:
az webapp config set \ --resource-group <resource-group-name> \ --name <app-service-name> \ --startup-file startup.txtAdja meg az erőforráscsoport nevét és az App Service-példány nevét a
<resource-group-name>és<app-service-name>helyőrzőkben. Az erőforráscsoport nevének megkereséséhez ellenőrizze az előzőaz webapp upparancs kimenetét. Az erőforráscsoport neve tartalmazza az Azure-fiók nevét, majd a _rg utótagot, ahogyan az <azure-account-name>_rg_ esetében is.
A futó alkalmazás megtekintéséhez nyisson meg egy böngészőt, és nyissa meg az App Service-példány üzembehelyezési végpontját. A következő URL-címben cserélje le a
<app-service-name>helyőrzőt az App Service-példány nevére:http://<app-service-name>.azurewebsites.netHa általános lapot lát, várjon néhány másodpercet, amíg az App Service-példány elindul, és frissítse a lapot.
- Ha továbbra is megjelenik egy általános lap, győződjön meg arról, hogy a megfelelő mappából telepítette.
- A Flask-mintaalkalmazás esetében ellenőrizze, hogy üzembe helyezte-e a python-sample-vscode-flask-tutorial mappából. Ellenőrizze azt is, hogy helyesen állította-e be az indítási parancsot.
Folyamatos üzembe helyezés beállítása az App Service-ben
A következő eljárásban beállítja a folyamatos kézbesítést (CD), ami azt jelenti, hogy egy új kód üzembe helyezése történik, amikor egy munkafolyamat aktiválódik. A cikkben szereplő példa eseményindítója az adattár fő ágának bármilyen módosítása, például lekéréses kérelem (PR) esetén.
A Cloud Shellben győződjön meg arról, hogy a rendszer gyökérkönyvtárában (
~) van, és nem egy alkalmazás almappájában, például python-sample-vscode-flask-tutorial.GitHub Actions-t az az webapp deployment github-actions add paranccsal adhat hozzá. Cserélje le a helyőrzőket a megadott értékekre:
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-githubA
--login-with-githubparaméter interaktív módszerrel kéri le a személyes hozzáférési jogkivonatot. Kövesse az utasításokat, és fejezze be a hitelesítést.Ha a rendszer egy meglévő munkafolyamat-fájlt talál ugyanazzal az App Service-példánynévvel, az utasításokat követve döntse el, hogy felülírja-e a munkafolyamatot. A
--forceparamétert a paranccsal együtt használhatja, hogy automatikusan felülírja az ütköző munkafolyamatokat.
A
addparancs a következő feladatokat hajtja végre:- Létrehoz egy új munkafolyamat-fájlt a .github/workflows/<workflow-name>.yml elérési úton az adattárban. A fájlnév tartalmazza az App Service-példány nevét.
- Lekéri az App Service-példány titkos kulcsait tartalmazó közzétételi profilt, és GitHub-művelettitkként adja hozzá. A titkos kód neve AZUREAPPSERVICE_PUBLISHPROFILE_ kezdődik. Erre a titkos kódra hivatkozik a munkafolyamat-fájl.
A forrásvezérlő üzembehelyezési konfigurációjának részleteit az az webapp deployment source show paranccsal szerezheti be . Cserélje le a helyőrző paramétereket a megadott értékekre:
az webapp deployment source show \ --name <app-service-name> \ --resource-group <resource-group-name>A parancs kimenetében erősítse meg a
repoUrlésbranchtulajdonságok értékeit. Ezeknek az értékeknek meg kell egyezniük aaddparanccsal megadott értékekkel.
A GitHub munkafolyamatának és műveleteinek vizsgálata
A munkafolyamat-definíciók egy YAML-fájlban (.yml) vannak megadva az adattár /.github/workflows/ elérési útján. Ez a YAML-fájl tartalmazza a munkafolyamatot alkotó különböző lépéseket és paramétereket, egy GitHub-adattárhoz társított automatizált folyamatot. Bármilyen projektet létrehozhat, tesztelhet, csomagolhat, kiadhat és üzembe helyezhet a GitHubon egy munkafolyamattal.
Minden munkafolyamat egy vagy több feladatból áll, és minden feladat lépéskészlet. Minden lépés egy rendszerhéjszkript vagy egy művelet. Minden feladathoz tartozik egy Művelet szakasz a munkafolyamat-fájlban.
Az Azure App Service-be való üzembe helyezéshez beállított Python-kóddal beállított munkafolyamat tekintetében a munkafolyamat a következő műveleteket hajtja végre:
| Tevékenység | Leírás |
|---|---|
| fizetés | Tekintse meg az adattárat egy futón, egy GitHub Actions-ügynökön. |
| setup-python | Telepítse a Pythont a futóra. |
| appservice-build | A webalkalmazás létrehozása. |
| webapps-deploy | A webalkalmazást helyezze üzembe a közzétételi profil hitelesítő adatainak használatával az Azure-ban való hitelesítés céljára. A hitelesítő adatokat egy GitHub-titkos kód tárolja. |
A munkafolyamat létrehozásához használt munkafolyamat-sablon az Azure/actions-workflow-samples.
A munkafolyamat a megadott ágba történő leküldéses események esetén aktiválódik. Az esemény és az ág a munkafolyamat-fájl elején van definiálva. A következő kódrészlet például azt mutatja, hogy a munkafolyamat a főágba irányuló leküldéses eseményeken aktiválódik:
on:
push:
branches:
- main
OAuth-jogosult alkalmazások
A folyamatos üzembe helyezés beállításakor engedélyezi az Azure App Service-t engedélyezett OAuth-alkalmazásként a GitHub-fiókjához. Az App Service az engedélyezett hozzáféréssel hoz létre egy GitHub-művelet YAML-fájlt a .github/workflows/<workflow-name>.yml elérési úton az adattárban.
A jogosult alkalmazások megtekintéséhez és a GitHub-fiókok engedélyeinek visszavonásához lépjen a Beállítások>integrációi/alkalmazások lapra:
Munkafolyamat-közzétételi profil titkos kódja
Az adattárhoz hozzáadott .github/workflows/<workflow-name>.yml munkafolyamat-fájlban van egy helyőrző, amely a munkafolyamat üzembehelyezési feladatához szükséges a profil hitelesítő adatainak közzétételéhez. A közzétételi profil adatai titkosítva vannak tárolva az adattárban.
A titkos kód megtekintéséhez lépjen a Beállítások>biztonsági>titkos kód és változók>műveletek lapjára:
Ebben a cikkben a GitHub-művelet a hitelesítést egy közzétételi profil hitelesítő adataival végzi. A hitelesítés más módokon is lehetséges, például szolgáltatásnévvel vagy OpenID Connecttel. További információ: Üzembe helyezés az App Service-ben a GitHub Actions használatával.
Munkafolyamat futtatása és tesztelése
Az utolsó lépés a munkafolyamat tesztelése az adattár módosításával.
Egy böngészőben nyissa meg a mintaadattár elágazását (vagy a használt adattárat), és válassza ki az eseményindító részeként beállított ágat:
Kis módosítást végezhet a Python-webalkalmazáson.
A Flask-oktatóanyagban egy egyszerű módosítást talál:
- Nyissa meg az eseményindító ág /hello-app/templates/home.html fájlját.
- Válassza a Szerkesztés (ceruza) lehetőséget.
- A Szerkesztőben keresse meg a nyomtatási
<p>utasítást, és adja hozzá az "Ismételt üzembe helyezés!" szöveget
Véglegesítse a módosítást közvetlenül arra az ágra, amelyben éppen dolgozik.
- A Szerkesztőben válassza a módosítások véglegesítése lehetőséget a jobb felső sarokban. Megnyílik a Véglegesítési módosítások ablak.
- A Véglegesítési módosítások ablakban módosítsa a véglegesítési üzenetet igény szerint, és válassza a Módosítások véglegesítése lehetőséget.
A véglegesítési folyamat elindítja a GitHub Actions munkafolyamatot.
Manuálisan is aktiválhatja a munkafolyamatot:
Nyissa meg a folyamatos üzembe helyezéshez beállított adattár Műveletek lapját.
Válassza ki a munkafolyamatot a munkafolyamatok listájában, majd válassza a Munkafolyamat futtatása lehetőséget.
Sikertelen munkafolyamat hibaelhárítása
Az alkalmazás-adattár Műveletek lapján ellenőrizheti egy munkafolyamat állapotát. A cikkben létrehozott munkafolyamat-fájl vizsgálatakor két feladat jelenik meg: a buildelés és az üzembe helyezés. Emlékeztetőül, a munkafolyamat az Azure/actions-workflow-samples sablonon alapul.
Sikertelen feladat esetén tekintse meg a feladatfeladatok kimenetét a hiba jelzéséhez.
Az alábbiakban néhány gyakori problémát vizsgálunk meg:
Ha az alkalmazás egy hiányzó függőség miatt meghiúsul, akkor a requirements.txt fájl nem lett feldolgozva az üzembe helyezés során. Ez a viselkedés akkor fordul elő, ha a webalkalmazást közvetlenül a portálon hozta létre a
az webapp upjelen cikkben látható parancs helyett.Ha az app service-t a portálon keresztül építette ki, előfordulhat, hogy a buildelési művelet
SCM_DO_BUILD_DURING_DEPLOYMENTbeállítása nem lesz beállítva. Ezt a beállítást a következőre kell állítanitrue: . Aaz webapp upparancs automatikusan beállítja a buildelési műveletet.Ha a "TLS-kézfogás időtúllépésével" kapcsolatos hibaüzenet jelenik meg, futtassa manuálisan a munkafolyamatot az alkalmazás-adattár Műveletek lapján az automatikus üzembe helyezés aktiválásával. Meghatározhatja, hogy az időtúllépés átmeneti probléma-e.
Ha a tárolóalkalmazás folyamatos üzembe helyezését állítja be a jelen cikkben látható módon, a rendszer automatikusan létrehozza a kezdeti munkafolyamatfájlt (.github/workflows/<workflow-name>.yml . Ha módosította a fájlt, távolítsa el a módosításokat, és ellenőrizze, hogy azok okozzák-e a hibát.
Üzembe helyezés utáni szkript futtatása
Az üzembe helyezés utáni szkriptek több feladatot is végrehajthatnak, például meghatározhatják az alkalmazáskód által várt környezeti változókat. Adja hozzá a szkriptet az alkalmazáskód részeként, és hajtsa végre a szkriptet az indítási paranccsal.
Annak érdekében, hogy elkerülje a változóértékek közvetlen kódolását a munkafolyamat YAML-fájljában, érdemes konfigurálni a változókat a GitHubon, és a szkriptben a változónevekre hivatkozni. Titkosított titkos kulcsokat hozhat létre egy adattárhoz vagy egy környezethez (fiókadattárhoz). További információ: Titkos kódok használata a GitHub Actionsben.
Django-szempontok áttekintése
A cikk korábbi részében leírtak szerint a GitHub Actions használatával django-alkalmazásokat helyezhet üzembe az Azure App Service-ben Linuxon, ha külön adatbázist használ. Nem használhat SQLite-adatbázist, mert az App Service zárolja a db.sqlite3 fájlt, ami megakadályozza az olvasást és az írást. Ez a viselkedés nem befolyásolja a külső adatbázist.
A Python-alkalmazás konfigurálása az App Service-ben – Tárolóindítási folyamat című cikk azt ismerteti, hogy az App Service hogyan keres automatikusan egy wsgi.py fájlt az alkalmazáskódban, amely általában az alkalmazásobjektumot tartalmazza. Amikor a webapp config set parancsot használta az indítási parancs beállításához, a --startup-file paramétert használta az alkalmazásobjektumot tartalmazó fájl megadásához. A webapp config set parancs nem érhető el a webapps-deploy műveletben. Ehelyett a startup-command paraméterrel megadhatja az indítási parancsot. A következő kód például bemutatja, hogyan adhatja meg az indítási parancsot a munkafolyamat-fájlban:
startup-command: startup.txt
A Django használatakor általában az alkalmazáskód üzembe helyezése után a parancs használatával python manage.py migrate szeretné migrálni az adatmodelleket. A migrálási parancsot futtathatja egy üzembe helyezés utáni szkriptben.
A GitHub-műveletek leválasztása
Ha leválasztja a GitHub Actionst az App Service-példányról, újrakonfigurálhatja az alkalmazástelepítést. Kiválaszthatja, hogy mi történik a munkafolyamat-fájllal a leválasztást követően, és hogy menti vagy törölje-e a fájlt.
Bontsa le a GitHub Actionst az alábbi Azure CLI az webapp deployment github-actions remove paranccsal. Cserélje le a helyőrzőket az Ön által megadott értékekre:
az webapp deployment github-actions remove \
--repo "<github-username>/<github-repo>" \
--resource-group <resource-group-name> \
--branch <branch-name> \
--name <app-service-name> \
--login-with-github
Erőforrások tisztítása
A cikkben létrehozott Azure-erőforrások költségeinek elkerülése érdekében törölje az App Service-példányt és az App Service-csomagot tartalmazó erőforráscsoportot.
Bárhol, ahol az Azure CLI telepítve van, beleértve az Azure Cloud Shellt is, az az group delete paranccsal törölheti az erőforráscsoportot:
az group delete --name <resource-group-name>
Tárfiók törlése
Ha törölni szeretné a Cloud Shell fájlrendszerét karbantartó tárfiókot, amely egy kis havi díjat von maga után, törölje a cloud-shell-storage-val kezdődő erőforráscsoportot. Ha Ön a csoport egyetlen felhasználója, nyugodtan törölheti az erőforráscsoportot. Ha vannak más felhasználók, törölheti a tárfiókot az erőforráscsoportban.
GitHub-fiók és -adattár frissítése
Ha törli az Azure-erőforráscsoportot, fontolja meg a következő módosításokat a folyamatos üzembe helyezéshez csatlakoztatott GitHub-fiók és adattár esetében:
- Az alkalmazás adattárában távolítsa el a .github/workflows/<workflow-name>.yml fájlt.
- Az alkalmazás adattárának beállításai között távolítsa el a munkafolyamathoz létrehozott AZUREAPPSERVICE_PUBLISHPROFILE_ titkos kulcsot.
- A GitHub-fiók beállításai között távolítsa el az Azure App Service-t hivatalos Oauth-alkalmazásként a GitHub-fiókjához.