A CI/CD és a GitHub Actions használata Python-webalkalmazás üzembe helyezéséhez a Linuxon futó Azure-alkalmazás Szolgáltatásban

A GitHub Actions folyamatos integrációs és folyamatos kézbesítési (CI/CD) platformjának használatával üzembe helyezhet egy Python-webalkalmazást Azure-alkalmazás Linuxon futó szolgáltatásban. A GitHub Actions-munkafolyamat automatikusan létrehozza a kódot, és üzembe helyezi azt az App Service-ben, 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 az alkalmazáskódhoz

Ha már van használandó Python-webalkalmazása, győződjön meg arról, hogy az egy GitHub-adattárhoz van kötve.

Ha szüksége van egy alkalmazásra a használatához, elágazhatja és klónozhatja az adattárat a következő helyen https://github.com/Microsoft/python-sample-vscode-flask-tutorial: . A kód a Visual Studio Code Flask oktatóanyagából származik.

Megjegyzés:

Ha az alkalmazás Django-t és SQLite-adatbázist használ, az ebben az oktatóanyagban nem fog működni. Ha a Django-alkalmazás egy külön adatbázist, például a PostgreSQL-t használ, ezt az oktatóanyagot használhatja. A Djangoval kapcsolatos további információkért tekintse meg a Djangoval kapcsolatos szempontokat a cikk későbbi részében.

A célszolgáltatás létrehozása Azure-alkalmazás

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 . A következő lépésekben az az webappot fogja használni az App Service létrehozásához és az alkalmazás első üzembe helyezéséhez.

1. lépés Sign in to the Azure portal at https://portal.azure.com.

2. lépés Nyissa meg az Azure CLI-t a Cloud Shell ikon kiválasztásával a portál eszköztárán.

Screenshot showing how to open Azure Cloud Shell in Azure portal.

3. lépés A Cloud Shellben válassza a Basht a legördülő listából.

Screenshot showing an Azure Cloud Shell Bash shell in Azure portal.

Step 4. A Cloud Shellben klónozza az adattárat a Git Clone használatával. Ha például a Flask mintaalkalmazást használja, a parancs a következő:

git clone https://github.com/<github-user>/python-sample-vscode-flask-tutorial.git

Cserélje le <a GitHub-felhasználót> annak a GitHub-fióknak a nevére, ahol elágaztatott az adattár. Ha másik alkalmazás-adattárat használ, ebben az adattárban fogja beállítani a GitHub Actionst.

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 a Cloud Shell fájlrendszerének képét tartalmazza, amely a klónozott adattárat tárolja. Ennek a tárolónak kis költsége van. A cikk végén törölheti a tárfiókot, valamint a létrehozott egyéb erőforrásokat.

Tipp.

A Cloud Shellbe való beillesztéshez használja a Ctrl Shift V billentyűkombinációt++, vagy kattintson a jobb gombbal, és válassza a Beillesztés parancsot a helyi menüből.

5. lépés A Cloud Shellben módosítsa a könyvtárat a Python-alkalmazást tartalmazó adattármappára, hogy az az webapp up parancs felismerje az alkalmazást Pythonként. A Flask-mintaalkalmazás esetében például:

cd python-sample-vscode-flask-tutorial

6. lépés A Cloud Shellben az az webapp használatával hozzon létre egy App Service-t, és először telepítse az alkalmazást.

az webapp up --name <app-service-name> --runtime "PYTHON:3.9"

Adja meg az Azure-ban egyedi App Service-nevet. 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.

Az elérhető futtatókörnyezetek listájának lekérésére használható az webapp list-runtimes . Használja a PYTHON|X.Y Python-verzió formátumát X.Y .

Megadhatja az App Service helyét is a --location paraméterrel. az account list-locations --output table A parancs használatával lekérheti az elérhető helyek listáját.

7. lépés Ha az alkalmazás egyéni indítási parancsot használ, használja az az webapp config parancsot. Ha az alkalmazás nem rendelkezik egyéni indítási paranccsal, hagyja ki ezt a lépést.

A python-sample-vscode-flask-tutorial alkalmazás például egy startup.txt nevű fájlt tartalmaz, amely egy indítási parancsot tartalmaz, amelyet az alábbiak szerint használhat:

az webapp config set \
  --resource-group <resource-group-name> \
  --name <app-service-name> \
  --startup-file startup.txt

Az erőforráscsoport nevét az előző az webapp up parancs kimenetéből találja. Az erőforráscsoport neve az azure-account-name>_rg_ névvel <kezdődik.

8. lépés A futó alkalmazás megtekintéséhez nyisson meg egy böngészőt, és nyissa meg a http:// app-service-name.azurewebsites.net>.<

Ha általános lapot lát, várjon néhány másodpercet, amíg az App Service elindul, és frissítse a lapot. Ha továbbra is az általános lapot látja, ellenőrizze, hogy a megfelelő mappából telepítette-e. Ha például a Flask-mintaalkalmazást használja, a mappa python-sample-vscode-flask-tutorial. Emellett a Flask mintaalkalmazás esetében ellenőrizze, hogy helyesen állította-e be az indítási parancsot.

Folyamatos üzembe helyezés beállítása az App Service-ben

Az alábbi lépésekben konfigurálja a folyamatos üzembe helyezést (CD), ami azt jelenti, hogy a munkafolyamat aktiválásakor új kódtelepítés történik. Az oktatóanyagban szereplő eseményindító az adattár fő ágának bármilyen módosítása, például lekéréses kérelem (PR) esetén.

1. lépés GitHub-művelet hozzáadása az az webapp deployment github-actions add paranccsal.

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

A --login-with-github paraméter interaktív módszerrel kéri le a személyes hozzáférési jogkivonatot. Kövesse az utasításokat a hitelesítés befejezéséhez.

Ha egy meglévő munkafolyamat-fájl ütközik az App Service által használt névvel, a rendszer megkéri, hogy döntse el, hogy felülírja-e. A paraméter használatával --force kérés nélkül felülírhatja azokat.

A hozzáadási parancs leírása:

  • Új munkafolyamatfájlt hoz létre: .github/workflows/<workflow-name.yml> az adattárban; a fájl neve tartalmazza az App Service nevét.
  • Lekéri az App Service titkos kulcsait tartalmazó közzétételi profilt, és GitHub-művelettitkként adja hozzá. A titkos kód neve az AZUREAPP Standard kiadásRVICE_PUBLISHPROFILE_-vel kezdődik. Erre a titkos kódra hivatkozik a munkafolyamat-fájl.

2. lépés A forrásvezérlő üzembehelyezési konfigurációjának részleteit az az webapp deployment source show paranccsal szerezheti be .

az webapp deployment source show \
  --name <app-service-name> \
  --resource-group <resource-group-name>

A parancs kimenetében erősítse meg a parancs értékeit és branch tulajdonságaitrepoUrl. Ezeknek az értékeknek meg kell egyezniük az előző lépésben megadott értékekkel.

A GitHub munkafolyamatának és műveleteinek ismertetése

A munkafolyamatokat egy YAML-fájl (.yml) határozza meg 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. Minden feladat lépéskészlet. Végül pedig minden lépés egy rendszerhéjszkript vagy egy művelet.

Az 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:

Művelet Leírás
Pénztár 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ás üzembe helyezése közzétételi profil hitelesítő adataival az Azure-ban való hitelesítéshez. 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 a Azure-alkalmazás Szolgáltatást 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 YML-fájlt a .github/workflows/<workflow-name.yml> fájlban. Megtekintheti a jogosult alkalmazásait, és visszavonhatja az engedélyeket a GitHub-fiókok Gépház, az Integrációk/alkalmazások területen.

Screenshot showing how to view authorized OAuth Apps for a GitHub account.

Munkafolyamat-közzétételi profil titkos kódja

Az adattárhoz hozzáadott .github/workflows/<workflow-name.yml> munkafolyamatfájlban megjelenik egy helyőrző a profil hitelesítő adatainak közzétételéhez, amelyek szükségesek a munkafolyamat üzembehelyezési feladatához. A közzétételi profil adatai titkosítva vannak tárolva az adattárban Gépház, a Security/Actions területen.

Screenshot showing how to view action secrets in GitHub.

Ebben a cikkben a GitHub-művelet egy közzétételi profil hitelesítő adataival hitelesít. A hitelesítés más módokon is lehetséges, például szolgáltatásnévvel vagy OpenID-Csatlakozás. További információ: Üzembe helyezés az App Service-ben a GitHub Actions használatával.

A munkafolyamat futtatása

Most tesztelni fogja a munkafolyamatot az adattár módosításával.

1. lépés 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.

Screenshot showing how to go to the repo and branch where the GitHub Actions workflow is defined.

2. lépés Kis módosítást kell végeznie.

Ha például a VS Code Flask oktatóanyagot használta,

  • Nyissa meg az eseményindító ág /hello-app/templates/home.html fájlját.
  • Válassza a Szerkesztés lehetőséget, és adja hozzá az "Ismételt üzembe helyezés!" szöveget.

3. lépés Véglegesítse a módosítást közvetlenül arra az ágra, amelyben éppen dolgozik.

  • A szerkeszteni kívánt lap jobb felső sarkában válassza a Módosítások véglegesítése ... gombot. Megnyílik a Véglegesítési módosítások ablak. A Véglegesítési módosítások ablakban szükség esetén módosítsa a véglegesítési üzenetet, majd válassza a Véglegesítési módosítások gombot.
  • A véglegesítés elindítja a GitHub Actions munkafolyamatot.

Manuálisan is elindíthatja a munkafolyamatot.

1. lépés Nyissa meg a folyamatos üzembe helyezéshez beállított adattár Műveletek lapját.

2. lépés 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

A munkafolyamat állapotának ellenőrzéséhez nyissa meg az adattár Műveletek lapját. Az oktatóanyagban létrehozott munkafolyamat-fájl részletezésekor két "buildelési" és "üzembe helyezési" feladat jelenik meg. Sikertelen feladat esetén tekintse meg a feladatfeladatok kimenetét a hiba jelzéséhez. A leggyakoribb problémák a következők:

  • 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 up jelen cikkben látható parancs helyett.

  • Ha az app service-t a portálon keresztül hozta létre, előfordulhat, hogy a buildelési művelet SCM_DO_BUILD_DURING_DEPLOYMENT beállítás nincs beállítva. Ezt a beállítást a következőre kell állítani true: . A az webapp up parancs automatikusan beállítja a buildelési műveletet.

  • Ha a "TLS-kézfogás időtúllépése" hibaüzenet jelenik meg, futtassa manuálisan a munkafolyamatot az adattár Műveletek lapján az Automatikus üzembe helyezés aktiválásával, és ellenőrizze, 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 az oktatóanyagban látható módon, a munkafolyamat-fájl (.github/workflows/<workflow-name.yml>) kezdetben automatikusan létrejön Önnek. Ha módosította, 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 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 futtassa az indítási paranccsal.

A munkafolyamat YML-fájljában lévő változóértékek kemény kódolásának elkerülése érdekében ehelyett a GitHub webes felületén, majd a szkript változónevére hivatkozhat. Titkosított titkos kulcsokat hozhat létre egy adattárhoz vagy egy környezethez (fiókadattárhoz). További információ: Titkosított titkos kódok a GitHub Docsban.

A Django szempontjai

A cikk korábbi részében leírtak szerint a GitHub Actions használatával django-alkalmazásokat helyezhet üzembe Azure-alkalmazás Linuxon futó szolgáltatásban, 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, megakadályozva 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 - Tároló indítási folyamatában című cikkben leírtak szerint az App Service automatikusan keres egy wsgi.py fájlt az alkalmazáskódon belül, 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ódrészlet 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-rő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, hogy mentse vagy törölje a fájlt.

A GitHub Actions leválasztása az Azure CLI az webapp deployment github-actions remove paranccsal.

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

Clean up resources

Az oktatóanyagban létrehozott Azure-erőforrások költségeinek elkerülése érdekében törölje az App Service-t é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>

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.

Ha törölte az Azure-erőforráscsoportot, fontolja meg az alábbi módosításokat a folyamatos üzembe helyezéshez csatlakoztatott GitHub-fiók és adattár esetében is:

  • Az adattárban távolítsa el a .github/workflows/<workflow-name.yml> fájlt.
  • Az adattár beállításai között távolítsa el a munkafolyamathoz létrehozott AZUREAPP Standard kiadásRVICE_PUBLISHPROFILE_ titkos kulcsot.
  • A GitHub-fiók beállításai között távolítsa el a Azure-alkalmazás Szolgáltatást a GitHub-fiók hivatalos Oauth-alkalmazásaként.