Konfigurace průběžného nasazování pro webovou aplikaci v Pythonu v Azure Container Apps
Tento článek je součástí kurzu o kontejnerizaci a nasazení webové aplikace v Pythonu do Azure Container Apps. Container Apps umožňuje nasazovat kontejnerizované aplikace bez nutnosti spravovat složitou infrastrukturu.
V této části kurzu se dozvíte, jak nakonfigurovat průběžné nasazování nebo doručování (CD) pro aplikaci kontejneru. CD je součástí postupu kontinuální integrace / průběžného doručování (CI/CD), což je automatizace pracovního postupu vývoje aplikací. Konkrétně používáte GitHub Actions k průběžnému nasazování.
Tento diagram služby zvýrazňuje součásti popsané v tomto článku: konfigurace CI/CD.
Požadavky
K nastavení průběžného nasazování potřebujete:
Prostředky a jejich konfigurace vytvořené v předchozím článku této série kurzů, které zahrnují Službu Azure Container Registry a aplikaci kontejneru v Azure Container Apps.
Účet GitHubu, do kterého jste forkovali ukázkový kód (Django nebo Flask) a můžete se připojit z Azure Container Apps. (Pokud jste si místo forku stáhli ukázkový kód, nezapomeňte do svého účtu GitHubu odeslat místní úložiště.)
Volitelně je možné, že Git je nainstalovaný ve vašem vývojovém prostředí, aby se změny kódu a nasdílel je do úložiště na GitHubu. Případně můžete provést změny přímo na GitHubu.
Konfigurace disku CD pro kontejner
V předchozím článku tohoto kurzu jste vytvořili a nakonfigurovali aplikaci kontejneru v Azure Container Apps. Součástí konfigurace bylo načtení image Dockeru ze služby Azure Container Registry. Image kontejneru se načte z registru při vytváření revize kontejneru, například při prvním nastavení aplikace kontejneru.
V této části nastavíte průběžné nasazování pomocí pracovního postupu GitHub Actions. Při průběžném nasazování se na základě triggeru vytvoří nová image Dockeru a revize kontejneru. Triggerem v tomto kurzu je jakákoli změna hlavní větve úložiště, jako je žádost o přijetí změn. Po aktivaci pracovní postup vytvoří novou image Dockeru, odešle ji do služby Azure Container Registry a aktualizuje aplikaci kontejneru na novou revizi pomocí nové image.
Příkazy Azure CLI je možné spouštět v Azure Cloud Shellu nebo na pracovní stanici s nainstalovaným Azure CLI .
Pokud spouštíte příkazy v prostředí Git Bash na počítači s Windows, před pokračováním zadejte následující příkaz:
export MSYS_NO_PATHCONV=1
Krok 1. Pomocí příkazu az ad sp create-for-rbac vytvořte instanční objekt.
az ad sp create-for-rbac \
--name <app-name> \
--role Contributor \
--scopes "/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>"
Kde:
- <název> aplikace je volitelný zobrazovaný název instančního objektu. Pokud možnost
--name
vynecháte, jako zobrazovaný název se vygeneruje identifikátor GUID. - <> ID předplatného je identifikátor GUID, který jednoznačně identifikuje vaše předplatné v Azure. Pokud své ID předplatného neznáte, můžete spustit příkaz az account show a zkopírovat ho
id
z vlastnosti ve výstupu. - <název> skupiny prostředků je název skupiny prostředků, která obsahuje kontejner Azure Container Apps. Řízení přístupu na základě role (RBAC) je na úrovni skupiny prostředků. Pokud jste postupovali podle kroků v předchozím článku v tomto kurzu, název skupiny prostředků je
pythoncontainer-rg
.
Uložte výstup tohoto příkazu pro další krok, zejména ID klienta (appId
vlastnost), tajný klíč klienta (password
vlastnost) a ID tenanta (tenant
vlastnost).
Krok 2. Nakonfigurujte GitHub Actions pomocí příkazu 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
Kde:
- <název> skupiny prostředků je název skupiny prostředků. Pokud sledujete tento kurz, jedná se o pythoncontainer-rg.
- <https://github.com/userid/repo> je adresa URL vašeho úložiště GitHub. Pokud postupujete podle kroků v tomto kurzu, bude to buď
https://github.com/userid/msdocs-python-django-azure-container-apps
nebohttps://github.com/userid/msdocs-python-flask-azure-container-apps
, kdeuserid
je VAŠE ID uživatele GitHubu. - <název> _registru je existující registr kontejneru, který jste vytvořili pro účely tohoto kurzu, nebo ten, který můžete použít.
- <client-id> je hodnota
appId
vlastnosti z předchozíhoaz ad sp create-for-rbac
příkazu. ID je identifikátor GUID formuláře 00000000-0000-0000-0000-0000-0000000000. - <ID> tenanta je hodnota
tenant
vlastnosti z předchozíhoaz ad sp create-for-rbac
příkazu. ID je také identifikátor GUID podobný ID klienta. - <client-secret> je hodnota
password
vlastnosti z předchozíhoaz ad sp create-for-rbac
příkazu.
V konfiguraci průběžného nasazování se instanční objekt používá k povolení přístupu ke službě GitHub Actions a úpravě prostředků Azure. Přístup k prostředkům je omezený rolemi přiřazenými k instančnímu objektu. Instančnímu objektu byla přiřazena předdefinovaná role Přispěvatel ve skupině prostředků obsahující aplikaci kontejneru.
Pokud jste postupovali podle kroků pro portál, instanční objekt se automaticky vytvořil za vás. Pokud jste postupovali podle kroků pro Azure CLI, před konfigurací průběžného nasazování jste nejprve explicitně vytvořili instanční objekt.
Opětovné nasazení webové aplikace pomocí GitHub Actions
V této části provedete změnu rozvětvované kopie ukázkového úložiště a potvrdíte, že se tato změna automaticky nasadí na web.
Pokud jste to ještě neudělali, vytvořte fork ukázkového úložiště (Django nebo Flask). Změnu kódu můžete provést přímo v GitHubu nebo ve vývojovém prostředí z příkazového řádku s Gitem.
Krok 1. Přejděte do forku ukázkového úložiště a začněte v hlavní větvi.
Krok 2. Provést změnu.
- Přejděte do souboru /templates/base.html . (Pro Django je cesta: restaurant_review/templates/restaurant_review/base.html.)
- Vyberte Upravit a změňte frázi "Azure Restaurant Review" (Revize restaurace Azure) na "Azure Restaurant Review – Redeployed" (Revize restaurace Azure – Znovu nasazeno).
Krok 3. Potvrďte změnu přímo do hlavní větve.
- V dolní části stránky, kterou upravujete, vyberte tlačítko Potvrdit .
- Potvrzení spustí pracovní postup GitHub Actions.
Poznámka:
Ukázali jsme změnu přímo v hlavní větvi. V typických softwarových pracovních postupech provedete změnu v jiné větvi, než je hlavní , a pak vytvoříte žádost o přijetí změn( PR), která tuto změnu sloučí do hlavní větve. Žádosti o přijetí změn také zahájí pracovní postup.
O nástroji GitHub Actions
Zobrazení historie pracovního postupu
Krok 1. Na GitHubu přejděte do forku ukázkového úložiště a otevřete kartu Akce .
Tajné klíče pracovního postupu
V souboru pracovního postupu .github/workflows/<workflow-name>.yml souboru pracovního postupu přidaného do úložiště uvidíte zástupné symboly pro přihlašovací údaje potřebné pro úlohy aktualizace aplikace sestavení a kontejneru pracovního postupu. Informace o přihlašovacích údajích se ukládají zašifrované v nastavení úložiště v části Akce tajných kódů zabezpečení/a proměnných/.
Pokud se změní informace o přihlašovacích údaji, můžete je tady aktualizovat. Pokud se například znovu vygenerují hesla služby Azure Container Registry, budete muset aktualizovat REGISTRY_PASSWORD hodnotu. Další informace najdete v dokumentaci k GitHubu v části Šifrované tajné kódy .
Autorizované aplikace OAuth
Při nastavování průběžného nasazování autorizujete Azure Container Apps jako autorizovanou aplikaci OAuth pro váš účet GitHubu. Container Apps používá autorizovaný přístup k vytvoření souboru YML GitHub Actions v souboru .github/workflows/<workflow-name>.yml. V části Aplikace integrace/ vašeho účtu můžete zobrazit autorizované aplikace a odvolat oprávnění.
Rady pro řešení potíží
Chyby při nastavování instančního objektu pomocí příkazu Azure CLI az ad sp create-for-rba
Zobrazí se chyba Typu InvalidSchema: Nebyly nalezeny žádné adaptéry připojení.
- Zkontrolujte prostředí, ve kterém běžíte. Pokud používáte prostředí Bash, nastavte MSYS_NO_PATHCONV proměnné následujícím způsobem
export MSYS_NO_PATHCONV=1
. Další informace najdete v tématu Problém GitHubu Nejde vytvořit instanční objekt pomocí Azure CLI z prostředí Git Bash, nebyly nalezeny žádné adaptéry připojení.< a1/>.
- Zkontrolujte prostředí, ve kterém běžíte. Pokud používáte prostředí Bash, nastavte MSYS_NO_PATHCONV proměnné následujícím způsobem
Zobrazí se chyba obsahující "Více než jedna aplikace má stejný zobrazovaný název".
- Tato chyba značí, že název se už používá pro instanční objekt. Zvolte jiný název nebo vynechte
--name
argument a identifikátor GUID se automaticky vygeneruje jako zobrazovaný název.
- Tato chyba značí, že název se už používá pro instanční objekt. Zvolte jiný název nebo vynechte
Pracovní postup GitHub Actions selhal.
- Pokud chcete zkontrolovat stav pracovního postupu, přejděte na kartu Akce v úložišti.
- Pokud dojde k selhání pracovního postupu, přejděte k podrobnostem jeho souboru pracovního postupu. Měly by existovat dvě úlohy sestavení a nasazení. V případě neúspěšné úlohy se podívejte na výstup úkolů úlohy a vyhledejte problémy.
- Pokud se zobrazí chybová zpráva s časovým limitem handshake PROTOKOLU TLS, spusťte pracovní postup ručně tak, že na kartě Akce v úložišti vyberete možnost Aktivovat automatické nasazení, abyste zjistili, jestli je časový limit dočasným problémem.
- Pokud pro aplikaci kontejneru nastavíte průběžné nasazování, jak je znázorněno v tomto kurzu, vytvoří se automaticky soubor pracovního postupu (.github/workflows/<workflow-name>.yml). Pro účely tohoto kurzu byste tento soubor nemuseli upravovat. Pokud jste to udělali, vraťte změny a zkuste pracovní postup.
Web nezobrazuje změny, které jste sloučili v hlavní větvi.
- Na GitHubu: Zkontrolujte, jestli se spustil pracovní postup GitHub Actions a že jste zkontrolovali změnu ve větvi, která tento pracovní postup aktivuje.
- Na webu Azure Portal: Ve službě Azure Container Registry zkontrolujte, jestli se po změně na větev vytvořila nová image Dockeru s časovým razítkem.
- Na webu Azure Portal: Zkontrolujte protokoly aplikace kontejneru. Pokud dojde k chybě programování, uvidíte ji tady.
- Přejít do kontejnerové aplikace | Správa revizí | <aktivní kontejner> | Podrobnosti revize | Protokoly konzoly
- Zvolte pořadí sloupců, ve kterých se má zobrazit "Čas vygenerovaný", "Stream_s" a "Log_s". Seřaďte protokoly podle nejnovějšího data a ve sloupci "Stream_s" vyhledejte zprávy stderr a stdout Pythonu. Výstupem pythonu print budou zprávy stdout .
- Pomocí Azure CLI použijte příkaz az containerapp logs show .
Co se stane, když odpojím průběžné nasazování?
Zastavení průběžného nasazování znamená odpojení aplikace kontejneru od úložiště. Odpojení:
- Na webu Azure Portal přejděte do aplikace kontejneru, vyberte prostředek průběžného nasazování a vyberte Odpojit.
- Pomocí Azure CLI použijte příkaz az container app github-action remove .
Po odpojení v úložišti GitHub:
- Soubor .github/workflows/<workflow-name>.yml se z úložiště odebere.
- Tajné klíče se neodeberou.
- Azure Container Apps zůstává pro váš účet GitHubu jako autorizovaná aplikace OAuth.
Po odpojení v Azure:
- Kontejner zůstane s posledním nasazeným kontejnerem. Aplikaci kontejneru můžete znovu připojit ke službě Azure Container Registry, aby nové revize kontejnerů nabíraly nejnovější image.
- Instanční objekty vytvořené a používané pro průběžné nasazování se neodstraní.
Další kroky
Pokud jste s kurzem hotovi a nechcete mít další náklady, odeberte použité prostředky. Odebráním skupiny prostředků odeberete všechny prostředky ve skupině a nejrychleji odeberete prostředky. Příklad odebrání skupin prostředků najdete v tématu Vyčištění kurzu Containerize.
Pokud plánujete stavět na tomto kurzu, tady je několik dalších kroků, které můžete provést.