Použití Azure Pipelines k sestavení a nasazení webové aplikace v Pythonu do služby Aplikace Azure Service
Služby Azure DevOps
Azure Pipelines slouží k zajištění kontinuální integrace a průběžného doručování (CI/CD) k sestavení a nasazení webové aplikace v Pythonu do služby Aplikace Azure Service v Linuxu. Kanál automaticky sestaví a nasadí webovou aplikaci v Pythonu do služby App Service, kdykoli dojde k potvrzení do úložiště.
V tomto článku získáte informace o těchto tématech:
- Vytvoříte webovou aplikaci ve službě Azure App Service.
- Vytvořte projekt v Azure DevOps.
- Připojte projekt DevOps k Azure.
- Vytvořte kanál specifický pro Python.
- Spuštěním kanálu sestavte a nasaďte aplikaci do webové aplikace ve službě App Service.
Požadavky
- Předplatné Azure. Pokud žádné nemáte, vytvořte si bezplatný účet.
- Účet GitHub. Pokud ho nemáte, vytvořte si ho zdarma.
- Organizace Azure DevOps Services Vytvořte si ho zdarma.
- Předplatné Azure. Pokud žádné nemáte, vytvořte si bezplatný účet.
- Účet GitHub. Pokud ho nemáte, vytvořte si ho zdarma.
- An Azure DevOps Server.
- Agent v místním prostředí. Pokud potřebujete vytvořit agenta v místním prostředí, přečtěte si téma Agenti v místním prostředí.
Vytvoření úložiště pro kód aplikace
Rozvětvujte ukázkové úložiště na https://github.com/Microsoft/python-sample-vscode-flask-tutorial svém účtu GitHubu.
Na místním hostiteli naklonujte úložiště GitHub. Použijte následující příkaz a nahraďte <repository-url>
adresou URL vašeho forku úložiště.
git clone <repository-url>
Místní testování aplikace
Sestavte a spusťte aplikaci místně, abyste měli jistotu, že funguje.
Přejděte do složky klonovaného úložiště.
cd python-sample-vscode-flask-tutorial
Sestavte a spusťte aplikaci.
python -m venv .env source .env/bin/activate pip install --upgrade pip pip install -r ./requirements.txt export set FLASK_APP=hello_app.webapp python3 -m flask run
Pokud chcete aplikaci zobrazit, otevřete okno prohlížeče a přejděte na http://localhost:5000. Ověřte, že se zobrazí název
Visual Studio Flask Tutorial
.Až budete hotovi, zavřete okno prohlížeče a zastavte server Flask pomocí ctrl+C.
Otevření Cloud Shellu
Přihlaste se k webu Azure Portal na adrese https://portal.azure.com.
Výběrem tlačítka Cloud Shell na panelu nástrojů portálu otevřete Azure CLI.
Cloud Shell se zobrazí v dolní části prohlížeče. V rozevírací nabídce vyberte Bash .
Pokud chcete více místa pro práci, vyberte tlačítko maximalizovat.
Vytvoření webové aplikace Aplikace Azure Service
Vytvořte webovou aplikaci Aplikace Azure Service z Cloud Shellu na webu Azure Portal.
Tip
Pokud chcete vložit do Cloud Shellu, použijte kombinaci kláves Ctrl+Shift+V nebo klikněte pravým tlačítkem myši a v místní nabídce vyberte Vložit.
Naklonujte úložiště následujícím příkazem a nahraďte
<repository-url>
adresou URL vašeho forku úložiště.git clone <repository-url>
Změňte adresář na naklonovanou složku úložiště, aby
az webapp up
příkaz aplikaci rozpoznal jako aplikaci v Pythonu.cd python-sample-vscode-flask-tutorial
Pomocí příkazu az webapp up zřiďte službu App Service a proveďte první nasazení aplikace. Nahraďte
<your-web-app-name>
ho jedinečným názvem v rámci Azure. Obvykle používáte osobní název nebo název společnosti spolu s identifikátorem aplikace, například<your-name>-flaskpipelines
. Adresa URL aplikace se stane vaší-appservice.azurewebsites.net>.<az webapp up --name <your-web-app-name>
Výstup JSON příkazu
az webapp up
ukazuje:{ "URL": <your-web-app-url>, "appserviceplan": <your-app-service-plan-name>, "location": <your-azure-location>, "name": <your-web-app-name>, "os": "Linux", "resourcegroup": <your-resource-group>, "runtime_version": "python|3.11", "runtime_version_detected": "-", "sku": <sku>, "src_path": <repository-source-path> }
Poznamenejte si
URL
hodnoty aruntime_version
hodnoty. Použijete souborruntime_version
YAML kanálu. AdresaURL
URL vaší webové aplikace. Můžete ho použít k ověření, jestli je aplikace spuštěná.Poznámka:
Příkaz
az webapp up
provádí tyto akce:Vytvořte výchozí skupinu prostředků.
Vytvořte výchozí plán služby App Service.
Vytvořte aplikaci se zadaným názvem.
Zip nasadí všechny soubory z aktuálního pracovního adresáře s povolenou automatizací sestavení.
Uložte parametry do mezipaměti místně v souboru .azure/config , abyste je nemuseli při pozdějším
az webapp up
az webapp
nasazení s jinými příkazy ze složky projektu zadávat znovu. Hodnoty uložené v mezipaměti se ve výchozím nastavení používají automaticky.
Výchozí akci můžete přepsat vlastními hodnotami pomocí parametrů příkazu. Další informace najdete v tématu az webapp up.
Aplikace python-sample-vscode-flask-tutorial obsahuje startup.txt soubor, který obsahuje konkrétní spouštěcí příkaz pro webovou aplikaci. Nastavte vlastnost konfigurace webové aplikace
startup-file
nastartup.txt
hodnotu .Z výstupu
az webapp up
příkazu zkopírujteresourcegroup
hodnotu.Pomocí skupiny prostředků a názvu aplikace zadejte následující příkaz.
az webapp config set --resource-group <your-resource-group> --name <your-web-app-name> --startup-file startup.txt
Po dokončení příkazu se zobrazí výstup JSON, který obsahuje všechna nastavení konfigurace vaší webové aplikace.
Pokud chcete zobrazit spuštěnou aplikaci, otevřete prohlížeč a přejděte na
URL
zobrazenýaz webapp up
výstup příkazu. Pokud se zobrazí obecná stránka, počkejte několik sekund, než se služba App Service spustí, a pak stránku aktualizujte. Ověřte, že se zobrazí názevVisual Studio Flask Tutorial
.
Vytvoření projektu Azure DevOps
Vytvořte nový projekt Azure DevOps.
- V prohlížeči přejděte na dev.azure.com a přihlaste se.
- Vyberte svoji organizaci.
- Pokud vytváříte první projekt v organizaci, vytvořte nový projekt výběrem možnosti Nový projekt nebo Vytvořit projekt .
- Zadejte název projektu.
- Vyberte viditelnost projektu.
- Vyberte Vytvořit.
- V prohlížeči přejděte na Azure DevOps Server.
- Vyberte kolekci.
- Vytvořte nový projekt výběrem možnosti Nový projekt nebo Vytvořit projekt , pokud vytváříte první projekt v kolekci.
- Zadejte název projektu.
- Vyberte viditelnost projektu.
- Vyberte Vytvořit.
Vytvoření instančního objektu služby
Instanční objekt je identita vytvořená pro používání s aplikacemi, hostovanými službami a automatizovanými nástroji, která umožňuje přístup k prostředkům Azure. Tento přístup je omezený na role přiřazené k instančnímu objektu a poskytuje vám kontrolu nad tím, ke kterým prostředkům je možné přistupovat a na jaké úrovni.
Pokud chcete vytvořit instanční objekt, přejděte do Cloud Shellu (Bash) a spusťte následující příkaz. Nahraďte <service-principal-name>
názvem vašeho instančního objektu, <your-subscription-id>
ID vašeho předplatného a <your-resource-group>
skupinou prostředků pro webovou aplikaci.
az ad sp create-for-rbac --display-name <service-principal-name> --role contributor --scopes /subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>
Příkaz vrátí objekt JSON podobný následujícímu příkladu:
{
"clientId": "<client GUID>",
"clientSecret": "<string-value>",
"subscriptionId": "<subscription GUID>",
"tenantId": "<tenant GUID>",
...
}
Poznamenejte si hodnoty clientId
, clientSecret
, subscriptionId
a tenantId
hodnoty. Tyto hodnoty potřebujete k vytvoření připojení služby v další části.
Vytvoření připojení služby
Připojení služby umožňuje vytvořit připojení, které poskytuje ověřený přístup ze služby Azure Pipelines k externím a vzdáleným službám. Pokud chcete nasadit do webové aplikace Aplikace Azure Service, vytvořte připojení služby ke skupině prostředků obsahující webovou aplikaci.
Na stránce projektu vyberte Nastavení projektu.
V části Kanály v nabídce vyberte připojení služby.
Vyberte Vytvořit připojení služby.
Vyberte Azure Resource Manager a vyberte Další.
Vyberte metodu ověřování a vyberte Další.
V dialogovém okně Připojení k nové službě Azure zadejte informace specifické pro vybranou metodu ověřování. Další informace o metodách ověřování najdete v tématu Připojení k Azure pomocí připojení služby Azure Resource Manager.
Pokud například používáte federaci identit úloh (automatickou) nebo metodu ověřování instančního objektu (automatické), zadejte požadované informace.
Pole Popis Úroveň oboru Vyberte Předplatné. Předplatné Název vašeho předplatného Azure Skupina prostředků Název skupiny prostředků obsahující vaši webovou aplikaci Název připojení služby Popisný název připojení. Udělení přístupových oprávnění všem kanálům Tuto možnost vyberte, pokud chcete udělit přístup ke všem kanálům. Zvolte Uložit.
Nové připojení se zobrazí v seznamu připojení služby a je připravené k použití ve vašem kanálu Azure.
Na stránce projektu vyberte Nastavení projektu.
V části Kanály v nabídce vyberte připojení služby.
Vyberte Vytvořit připojení služby.
Vyberte Azure Resource Manager a vyberte Další.
V části Nové připojení služby Azure vyberte Instanční objekt (ruční) a vyberte Další.
V dalším dialogovém okně vyplňte požadované informace.
Pole Popis Prostředí Vyberte možnost Azure Cloud
.Úroveň oboru Vyberte Předplatné. ID předplatného ID vašeho předplatného. Název předplatného Název vašeho předplatného Azure ID instančního objektu appId
Hodnota z objektu JSON vráceného příkazemaz ad sp create-for-rbac
.Klíč instančního objektu password
Hodnota z objektu JSON vráceného příkazemaz ad sp create-for-rbac
.ID tenanta tenant
Hodnota z objektu JSON vráceného příkazemaz ad sp create-for-rbac
.Výběrem možnosti Ověřit ověřte připojení.
Zadejte název připojení služby.
Ujistěte se, že je vybraná možnost Udělit přístupová oprávnění všem kanálům .
Vyberte Ověřit a uložit.
Nové připojení se zobrazí v seznamu připojení služby a je připravené k použití v Azure Pipelines z projektu.
Konfigurace agenta v místním prostředí
Pokud používáte vlastního místního agenta, musíte nakonfigurovat agenta tak, aby spustil Python. Stahování verzí Pythonu není podporováno u agentů v místním prostředí. Musíte předinstalovat verzi Pythonu. Pomocí úplného instalačního programu získejte verzi Pythonu kompatibilní s pipem.
Abyste se vyhnuli nekompatibilním problémům, měli byste odpovídat verzi Pythonu s verzí modulu runtime ve webové aplikaci Aplikace Azure Services. Verze modulu runtime se zobrazí ve výstupu az webapp up
JSON příkazu.
Požadovaná verze Pythonu se musí přidat do mezipaměti nástrojů v místním agentu, aby ji úloha mohl používat. Mezipaměť nástrojů se obvykle nachází v adresáři _work/_tool agenta; alternativně lze cestu přepsat pomocí proměnné prostředí AGENT_TOOLSDIRECTORY. V adresáři nástrojů vytvořte následující adresářovou strukturu založenou na vaší verzi Pythonu:
$AGENT_TOOLSDIRECTORY/
Python/
{version number}/
{platform}/
{tool files}
{platform}.complete
Číslo verze by mělo odpovídat formátu 1.2.3. Platforma by měla být x86 nebo x64. Soubory nástrojů by měly být rozbalené soubory verzí Pythonu. Měl {platform}.complete
by to být 0 bajtový soubor, který vypadá nebo x86.complete
x64.complete
jenom označuje, že je nástroj správně nainstalovaný v mezipaměti.
Pokud například používáte Python 3.11 na 64bitovém počítači s Windows, adresářová struktura by vypadala takto:
$AGENT_TOOLSDIRECTORY/
Python/
3.11.4/
x64/
{python files}
x64.complete
Pokud už máte verzi Pythonu, kterou chcete použít na počítači, který je hostitelem agenta, můžete soubory zkopírovat do mezipaměti nástroje. Pokud nemáte verzi Pythonu, můžete si ji stáhnout z webu Pythonu.
Vytvořit kanál
Vytvořte kanál pro sestavení a nasazení webové aplikace v Pythonu do služby Aplikace Azure Service. Pokud chcete porozumět konceptům kanálu, podívejte se na:
V levé navigační nabídce vyberte Kanály.
Vyberte Vytvořit kanál.
V dialogovém okně Kde je váš kód , vyberte GitHub. Může se zobrazit výzva k přihlášení k GitHubu.
Na obrazovce Vybrat úložiště vyberte forkované ukázkové úložiště.
Může se zobrazit výzva k opětovnému zadání hesla GitHubu jako potvrzení.
Pokud rozšíření Azure Pipelines není nainstalované na GitHubu, GitHub vás vyzve k instalaci rozšíření Azure Pipelines .
Na této stránce se posuňte dolů do části Přístup k úložišti, zvolte, jestli chcete rozšíření nainstalovat do všech úložišť nebo jenom vybraných úložišť, a pak vyberte Schválit a nainstalovat.
V dialogovém okně Konfigurace kanálu vyberte Python do linuxové webové aplikace v Azure.
Vyberte své předplatné Azure a vyberte Pokračovat.
Pokud k ověření používáte svoje uživatelské jméno a heslo, otevře se prohlížeč, abyste se přihlásili ke svému účtu Microsoft.
V rozevíracím seznamu vyberte název vaší webové aplikace a vyberte Ověřit a nakonfigurovat.
Azure Pipelines vytvoří azure-pipelines.yml soubor a zobrazí ho v editoru kanálů YAML. Soubor kanálu definuje kanál CI/CD jako řadu fází, úloh a kroků, kde každý krok obsahuje podrobnosti o různých úkolech a skriptech. Podívejte se na kanál a podívejte se, co to dělá. Ujistěte se, že jsou všechny výchozí vstupy vhodné pro váš kód.
V navigační nabídce vyberte Kanály.
Vyberte Vytvořit kanál.
V dialogovém okně Kde je váš kód , vyberte GitHub Enterprise Server. Může se zobrazit výzva k přihlášení k GitHubu.
Na kartě Vybrat úložiště vyberte forkované ukázkové úložiště.
Může se zobrazit výzva k opětovnému zadání hesla GitHubu jako potvrzení.
Pokud rozšíření Azure Pipelines není nainstalované na GitHubu, GitHub vás vyzve k instalaci rozšíření Azure Pipelines .
Na této stránce se posuňte dolů do části Přístup k úložišti, zvolte, jestli chcete rozšíření nainstalovat do všech úložišť nebo jenom vybraných úložišť, a pak vyberte Schválit a nainstalovat.
V dialogovém okně Konfigurace kanálu vyberte Počáteční kanál.
Obsah souboru azure-pipelines.yml nahraďte následujícím kódem.
trigger: - main variables: # Azure Resource Manager connection created during pipeline creation azureServiceConnectionId: '<your-service-connection-name>' # Web app name webAppName: '<your-web-app-name>' # Environment name environmentName: '<your-web-app-name>' # Project root folder. projectRoot: $(System.DefaultWorkingDirectory) # Python version: pythonVersion: '<your-python-version>' stages: - stage: Build displayName: Build stage jobs: - job: BuildJob pool: name: '<your-pool-name>' demands: python steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)' - script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install setup pip install -r requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements" - task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: true - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container' - stage: Deploy displayName: 'Deploy Web App' dependsOn: Build condition: succeeded() jobs: - deployment: DeploymentJob pool: name: '<your-pool-name' environment: $(environmentName) strategy: runOnce: deploy: steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version' - task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip startUpCommand: 'startup.txt'
Nahraďte následující zástupné symboly vlastními hodnotami:
Zástupný symbol Popis <your-service-connection-name>
Název připojení služby, které jste vytvořili. <your-web-app-name>
Název webové aplikace Aplikace Azure Service <your-pool-name>
Název fondu agentů, který chcete použít. <your-python-version>
Verze Pythonu spuštěná ve vašem agentu. Tuto verzi je vhodné shodovat s verzí Pythonu spuštěnou ve vaší webové aplikaci. Verze webové aplikace se zobrazí ve výstupu az webapp up
JSON příkazu.
Soubor kanálu YAML
Následující vysvětlení popisuje soubor kanálu YAML. Další informace o schématu souborů YAML kanálu najdete v referenčních informacích ke schématu YAML.
Kompletní ukázkový soubor YAML kanálu je uvedený níže:
trigger:
- main
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'
# Web app name
webAppName: '<your-webapp-name>'
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder. Point to the folder containing manage.py file.
projectRoot: $(System.DefaultWorkingDirectory)
pythonVersion: '3.11'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: BuildJob
pool:
vmImage: $(vmImageName)
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python $(pythonVersion)'
- script: |
python -m venv antenv
source antenv/bin/activate
python -m pip install --upgrade pip
pip install setup
pip install -r requirements.txt
workingDirectory: $(projectRoot)
displayName: "Install requirements"
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(projectRoot)'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
displayName: 'Upload package'
artifact: drop
- stage: Deploy
displayName: 'Deploy Web App'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
strategy:
runOnce:
deploy:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python version'
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Proměnné
Oddíl variables
obsahuje následující proměnné:
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'
# Web app name
webAppName: '<your-webapp-name>'
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder.
projectRoot: $(System.DefaultWorkingDirectory)
# Python version: 3.11. Change this to match the Python runtime version running on your web app.
pythonVersion: '3.11'
Proměnná | Popis |
---|---|
azureServiceConnectionId |
ID nebo název připojení služby Azure Resource Manager. |
webAppName |
Název webové aplikace Aplikace Azure Service. |
vmImageName |
Název operačního systému, který se má použít pro agenta sestavení. |
environmentName |
Název prostředí použitého ve fázi nasazení. Prostředí se automaticky vytvoří při spuštění úlohy fáze. |
projectRoot |
Kořenová složka obsahující kód aplikace. |
pythonVersion |
Verze Pythonu, která se má použít pro agenty sestavení a nasazení |
Oddíl variables
obsahuje následující proměnné:
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<your-service-connection-name>'
# Web app name
webAppName: '<your-webapp-name>'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder.
projectRoot: $(System.DefaultWorkingDirectory)
# Python version: 3.11. Change this to the version that is running on your agent and web app.
pythonVersion: '3.11'
Proměnná | Popis |
---|---|
azureServiceConnectionId |
Název připojení služby Azure Resource Manager. |
webAppName |
Název webové aplikace. |
environmentName |
Název prostředí použitého ve fázi nasazení. |
projectRoot |
Složka obsahující kód aplikace. Hodnota je automatická systémová proměnná. |
pythonVersion |
Verze Pythonu, která se má použít pro agenty sestavení a nasazení |
Fáze sestavení
Fáze sestavení obsahuje jednu úlohu, která běží v operačním systému definovaném v proměnné vmImageName.
- job: BuildJob
pool:
vmImage: $(vmImageName)
Fáze sestavení obsahuje jednu úlohu, která běží na agentu ve fondu identifikované parametrem name. Funkce agenta můžete zadat pomocí klíčového demands
slova. Určuje například, demands: python
že agent musí mít nainstalovaný Python. Pokud chcete zadat agenta v místním prostředí podle názvu, můžete použít demands: Agent.Name -equals <agent-name>
klíčové slovo.
- job: BuildJob
pool:
name: <your-pool-name>
demands: python
Úloha obsahuje několik kroků:
Úloha UsePythonVersion vybere verzi Pythonu, která se má použít. Verze je definována
pythonVersion
v proměnné.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)'
Tento krok používá skript k vytvoření virtuálního prostředí Pythonu a instalaci závislostí aplikace obsažených v
requirements.txt
workingDirectory
parametru Určuje umístění kódu aplikace.- script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install setup pip install -r ./requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements"
Úloha ArchiveFiles vytvoří .zip archiv obsahující webovou aplikaci. Soubor
.zip
se nahraje do kanálu jako artefakt s názvemdrop
. Soubor.zip
se používá ve fázi nasazení k nasazení aplikace do webové aplikace.- task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: true - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip displayName: 'Upload package' artifact: drop
Parametr Popis rootFolderOrFile
Umístění kódu aplikace. includeRootFolder
Určuje, zda se má do souboru .zip zahrnout kořenová složka. Nastavte tento parametr na false
jinak, obsah souboru .zip se vloží do složky s názvem s a App Service v Linuxu kontejner nemůže najít kód aplikace.archiveType
Typ archivu, který chcete vytvořit. Nastavte na zip
.archiveFile
Umístění souboru .zip , který se má vytvořit. replaceExistingArchive
Určuje, zda se má nahradit existující archiv, pokud soubor již existuje. Nastavte na true
.upload
Umístění souboru .zip k nahrání. artifact
Název artefaktu, který se má vytvořit.
Fáze nasazení
Fáze nasazení se spustí, pokud se fáze sestavení úspěšně dokončí. Toto chování definují následující klíčová slova:
dependsOn: Build
condition: succeeded()
Fáze nasazení obsahuje jednu úlohu nasazení nakonfigurovanou s následujícími klíčovými slovy:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
Klíčové slovo | Popis |
---|---|
deployment |
Označuje, že úloha je úloha nasazení cílící na prostředí. |
pool |
Určuje fond agentů nasazení. Výchozí fond agentů, pokud není zadaný název. Klíčové vmImage slovo identifikuje operační systém pro image virtuálního počítače agenta. |
environment |
Určuje prostředí, do které se má nasadit. Prostředí se ve vašem projektu automaticky vytvoří při spuštění úlohy. |
- deployment: DeploymentJob
pool:
name: <your-pool-name>
environment: $(environmentName)
Klíčové slovo | Popis |
---|---|
deployment |
Označuje, že úloha je úloha nasazení cílící na prostředí. |
pool Určuje fond agentů, který se má použít pro nasazení. Tento fond musí obsahovat agenta s možností spuštění verze Pythonu zadané v kanálu. |
|
environment |
Určuje prostředí, do které se má nasadit. Prostředí se ve vašem projektu automaticky vytvoří při spuštění úlohy. |
Klíčové strategy
slovo se používá k definování strategie nasazení. Klíčové runOnce
slovo určuje, že úloha nasazení se spustí jednou. Klíčové deploy
slovo určuje kroky, které se mají spustit v úloze nasazení.
strategy:
runOnce:
deploy:
steps:
Kanál steps
je následující:
Pomocí úlohy UsePythonVersion určete verzi Pythonu, která se má použít v agentu. Verze je definována
pythonVersion
v proměnné.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version'
Nasaďte webovou aplikaci pomocí AzureWebApp@1. Tato úloha nasadí artefakt
drop
kanálu do webové aplikace.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Parametr Popis azureSubscription
ID nebo název připojení služby Azure Resource Manager, které se má použít. appName
Název webové aplikace. package
Umístění souboru .zip , který se má nasadit. Vzhledem k tomu, že úložiště python-vscode-flask-tutorial obsahuje stejný spouštěcí příkaz v souboru s názvem startup.txt, můžete tento soubor zadat přidáním parametru:
startUpCommand: 'startup.txt'
.
Kanál steps
je následující:
Pomocí úlohy UsePythonVersion určete verzi Pythonu, která se má použít v agentu. Verze je definována
pythonVersion
v proměnné.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version'
Nasaďte webovou aplikaci pomocí AzureWebApp@1. Tato úloha nasadí artefakt
drop
kanálu do webové aplikace.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Parametr Popis azureSubscription
ID nebo název připojení služby Azure Resource Manager, které se má použít. appName
Název webové aplikace. package
Umístění souboru .zip , který se má nasadit. Vzhledem k tomu, že úložiště python-vscode-flask-tutorial obsahuje stejný spouštěcí příkaz v souboru s názvem startup.txt, můžete tento soubor zadat přidáním parametru:
startUpCommand: 'startup.txt'
.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : $(webAppName)' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip startUpCommand: 'startup.txt'
Parametr Popis azureSubscription
ID nebo název připojení služby Azure Resource Manager, které se má použít. appName
Název webové aplikace. package
Umístění souboru .zip , který se má nasadit. startUpCommand
Příkaz, který se má spustit po nasazení aplikace Ukázková aplikace používá startup.txt
.
Spuštění kanálu
Teď jste připravení to vyzkoušet!
V editoru vyberte Uložit a spustit.
V dialogovém okně Uložit a spustit přidejte zprávu potvrzení a pak vyberte Uložit a spustit.
Kanál můžete sledovat, jak běží, výběrem fází nebo úloh v souhrnu spuštění kanálu.
Vedle každé fáze a úlohy jsou zelené značky zaškrtnutí, jakmile se úspěšně dokončí. Pokud dojde k chybám, zobrazí se v souhrnu nebo v krocích úlohy.
Do editoru YAML se můžete rychle vrátit tak, že vyberete svislé tečky v pravém horním rohu stránky Souhrn a vyberete Upravit kanál:
V úloze nasazení vyberte úlohu Deploy Azure Web App (Nasadit webovou aplikaci Azure) a zobrazte její výstup. Pokud chcete navštívit nasazený web, podržte stisknutou klávesu Ctrl a vyberte adresu URL za
App Service Application URL
.Pokud používáte ukázkovou aplikaci, měla by se aplikace zobrazit takto:
Důležité
Pokud vaše aplikace selže kvůli chybějící závislosti, váš requirements.txt soubor se během nasazování nezpracoval. K tomuto chování dochází v případě, že jste webovou aplikaci vytvořili přímo na portálu, a ne pomocí az webapp up
příkazu, jak je znázorněno v tomto článku.
Příkaz az webapp up
konkrétně nastaví akci SCM_DO_BUILD_DURING_DEPLOYMENT
sestavení na true
. Pokud jste službu App Service zřídili prostřednictvím portálu, tato akce se nenastaví automaticky.
Následující kroky nastavily akci:
- Otevřete Azure Portal, vyberte svou službu App Service a pak vyberte Konfigurace.
- Na kartě Nastavení aplikace vyberte Nové nastavení aplikace.
- V místní nabídce, která se zobrazí, nastavte Název na , nastavte hodnotu na
true
a vyberte OK.SCM_DO_BUILD_DURING_DEPLOYMENT
- V horní části stránky Konfigurace vyberte Uložit.
- Opětovné spuštění kanálu Během nasazování by se měly nainstalovat vaše závislosti.
Aktivace spuštění kanálu
Pokud chcete aktivovat spuštění kanálu, potvrďte změnu do úložiště. Můžete například do aplikace přidat novou funkci nebo aktualizovat závislosti aplikace.
- Přejděte do úložiště GitHub.
- Změňte kód, například změňte název aplikace.
- Potvrďte změnu do úložiště.
- Přejděte do kanálu a ověřte, že se vytvoří nové spuštění.
- Po dokončení spuštění ověřte, že je nové sestavení nasazené do vaší webové aplikace.
- Na webu Azure Portal přejděte do své webové aplikace.
- Vyberte Deployment Center a vyberte kartu Protokoly .
- Ověřte, že je uvedené nové nasazení.
Důležité informace o Django
Pokud používáte samostatnou databázi, můžete pomocí Azure Pipelines nasadit aplikace Django do služby Aplikace Azure Service v Linuxu. Databázi SQLite nemůžete použít, protože App Service uzamkne soubor db.sqlite3 , což brání čtení i zápisu. Toto chování nemá vliv na externí databázi.
Jak je popsáno v tématu Konfigurace aplikace v Pythonu ve službě App Service – Proces spuštění kontejneru, App Service automaticky hledá soubor wsgi.py v kódu aplikace, který obvykle obsahuje objekt aplikace. Pokud chcete spouštěcí příkaz libovolně přizpůsobit, použijte startUpCommand
parametr v AzureWebApp@1
kroku souboru kanálu YAML, jak je popsáno v předchozí části.
Při použití Django obvykle chcete migrovat datové modely pomocí manage.py migrate
po nasazení kódu aplikace. K tomuto účelu můžete přidat startUpCommand
skript po nasazení. Tady je například startUpCommand
vlastnost v AzureWebApp@1 úkolu.
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
startUpCommand: 'python manage.py migrate'
Spouštění testů na agentu sestavení
V rámci procesu sestavení můžete chtít spouštět testy kódu aplikace. Testy běží na agentu sestavení, takže je potřeba nainstalovat závislosti do virtuálního prostředí na agenta sestavení. Po spuštění testů odstraňte virtuální prostředí před vytvořením souboru .zip pro nasazení. Tento proces ilustrují následující prvky skriptu. Umístěte je před ArchiveFiles@2
úkol do souboru azure-pipelines.yml . Další informace najdete v tématu Spouštění skriptů pro různé platformy.
# The | symbol is a continuation character, indicating a multi-line script.
# A single-line script can immediately follow "- script:".
- script: |
python -m venv .env
source .env/bin/activate
pip install setuptools
pip install -r requirements.txt
# The displayName shows in the pipeline UI when a build runs
displayName: 'Install dependencies on build agent'
- script: |
# Put commands to run tests here
displayName: 'Run tests'
- script: |
echo Deleting .env
deactivate
rm -rf .env
displayName: 'Remove .env before zip'
K publikování výsledků testu do kanálu můžete použít také úlohu, jako je PublishTestResults@2 . Další informace najdete v tématu Vytváření aplikací v Pythonu – Spouštění testů.
Vyčištění prostředků
Abyste se vyhnuli poplatkům za prostředky Azure vytvořené v tomto kurzu:
Odstraňte projekt, který jste vytvořili. Odstraněním projektu se odstraní připojení kanálu a služby.
Odstraňte skupinu prostředků Azure, která obsahuje službu App Service a plán služby App Service. Na webu Azure Portal přejděte do skupiny prostředků, vyberte Odstranit skupinu prostředků a postupujte podle pokynů.
Odstraňte účet úložiště, který udržuje systém souborů pro Cloud Shell. Zavřete Cloud Shell a přejděte do skupiny prostředků, která začíná cloud-shell-storage-, vyberte Odstranit skupinu prostředků a postupujte podle pokynů.