Sdílet prostřednictvím


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.
  • 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.

  1. Přejděte do složky klonovaného úložiště.

    cd python-sample-vscode-flask-tutorial
    
  2. 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
    
  3. 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.

  4. Až budete hotovi, zavřete okno prohlížeče a zastavte server Flask pomocí ctrl+C.

Otevření Cloud Shellu

  1. Přihlaste se k webu Azure Portal na adrese https://portal.azure.com.

  2. Výběrem tlačítka Cloud Shell na panelu nástrojů portálu otevřete Azure CLI.

    Snímek obrazovky s tlačítkem Azure Cloud Shell na panelu nástrojů webu Azure Portal

  3. Cloud Shell se zobrazí v dolní části prohlížeče. V rozevírací nabídce vyberte Bash .

    Snímek obrazovky Azure Cloud Shellu

  4. 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.

  1. 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>
    
  2. 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
    
  3. 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 a runtime_version hodnoty. Použijete soubor runtime_version YAML kanálu. Adresa URL 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.

  4. 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 na startup.txthodnotu .

    1. Z výstupu az webapp up příkazu zkopírujte resourcegroup hodnotu.

    2. 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.

  5. 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ázev Visual Studio Flask Tutorial.

Vytvoření projektu Azure DevOps

Vytvořte nový projekt Azure DevOps.

  1. V prohlížeči přejděte na dev.azure.com a přihlaste se.
  2. Vyberte svoji organizaci.
  3. Pokud vytváříte první projekt v organizaci, vytvořte nový projekt výběrem možnosti Nový projekt nebo Vytvořit projekt .
  4. Zadejte název projektu.
  5. Vyberte viditelnost projektu.
  6. Vyberte Vytvořit.
  1. V prohlížeči přejděte na Azure DevOps Server.
  2. Vyberte kolekci.
  3. Vytvořte nový projekt výběrem možnosti Nový projekt nebo Vytvořit projekt , pokud vytváříte první projekt v kolekci.
  4. Zadejte název projektu.
  5. Vyberte viditelnost projektu.
  6. 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, subscriptionIda 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.

  1. Na stránce projektu vyberte Nastavení projektu.

    Snímek obrazovky s tlačítkem nastavení projektu na řídicím panelu projektu

  2. V části Kanály v nabídce vyberte připojení služby.

  3. Vyberte Vytvořit připojení služby.

  4. Vyberte Azure Resource Manager a vyberte Další.

    Snímek obrazovky s výběrem připojení ke službě Azure Resource Manager

  5. Vyberte metodu ověřování a vyberte Další.

  6. 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.

    Snímek obrazovky s dialogovým oknem Nové připojení služby

    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.
  7. 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.

  1. Na stránce projektu vyberte Nastavení projektu.

    Snímek obrazovky s tlačítkem nastavení projektu na řídicím panelu projektu

  2. V části Kanály v nabídce vyberte připojení služby.

  3. Vyberte Vytvořit připojení služby.

  4. Vyberte Azure Resource Manager a vyberte Další.

    Snímek obrazovky s výběrem připojení ke službě Azure Resource Manager

  5. V části Nové připojení služby Azure vyberte Instanční objekt (ruční) a vyberte Další.

  6. V dalším dialogovém okně vyplňte požadované informace.

    Snímek obrazovky s dialogovým oknem pro připojení k nové službě

    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.
  7. Výběrem možnosti Ověřit ověřte připojení.

  8. Zadejte název připojení služby.

  9. Ujistěte se, že je vybraná možnost Udělit přístupová oprávnění všem kanálům .

  10. 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:

  1. V levé navigační nabídce vyberte Kanály.

    Snímek obrazovky s výběrem kanálů na řídicím panelu projektu

  2. Vyberte Vytvořit kanál.

    Snímek obrazovky s tlačítkem nový kanál v seznamu kanálů

  3. V dialogovém okně Kde je váš kód , vyberte GitHub. Může se zobrazit výzva k přihlášení k GitHubu.

    Snímek obrazovky s výběrem GitHubu jako umístění kódu

  4. Na obrazovce Vybrat úložiště vyberte forkované ukázkové úložiště.

    Snímek obrazovky s výběrem úložiště

  5. Může se zobrazit výzva k opětovnému zadání hesla GitHubu jako potvrzení.

  6. Pokud rozšíření Azure Pipelines není nainstalované na GitHubu, GitHub vás vyzve k instalaci rozšíření Azure Pipelines .

    Nainstalujte rozšíření Azure Pipelines na GitHub.

    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.

    Snímek obrazovky s rozšířením Schválit a nainstalovat azure Pipelines na GitHubu

  7. V dialogovém okně Konfigurace kanálu vyberte Python do linuxové webové aplikace v Azure.

  8. Vyberte své předplatné Azure a vyberte Pokračovat.

  9. 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.

  10. 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.

  1. V navigační nabídce vyberte Kanály.

    Snímek obrazovky s výběrem kanálů na řídicím panelu projektu

  2. Vyberte Vytvořit kanál.

    Snímek obrazovky s tlačítkem Nový kanál

  3. 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.

    Snímek obrazovky s výběrem GitHubu jako umístění kódu

  4. Na kartě Vybrat úložiště vyberte forkované ukázkové úložiště.

    Snímek obrazovky s výběrem úložiště

  5. Může se zobrazit výzva k opětovnému zadání hesla GitHubu jako potvrzení.

  6. Pokud rozšíření Azure Pipelines není nainstalované na GitHubu, GitHub vás vyzve k instalaci rozšíření Azure Pipelines .

    Snímek obrazovky s rozšířením Azure Pipelines na GitHubu

    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.

    Snímek obrazovky s rozšířením Schválit a nainstalovat azure Pipelines na GitHubu

  7. V dialogovém okně Konfigurace kanálu vyberte Počáteční kanál.

  8. 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'
    
    
  9. 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ů:

  1. Ú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)'
    
  2. 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"
    
  3. Úloha ArchiveFiles vytvoří .zip archiv obsahující webovou aplikaci. Soubor .zip se nahraje do kanálu jako artefakt s názvem drop. 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í:

  1. 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'
    
  2. 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í:

  1. 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'
    
  2. 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!

  1. V editoru vyberte Uložit a spustit.

  2. 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.

    Snímek obrazovky s částí souhrnů 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.

    Snímek obrazovky s kroky fáze kanálu

    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:

    Snímek obrazovky s komentářem k úpravám kanálu ze sestavy sestavení

  3. 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:

    Snímek obrazovky s zobrazením ukázkové aplikace spuštěné ve službě App Service

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:

  1. Otevřete Azure Portal, vyberte svou službu App Service a pak vyberte Konfigurace.
  2. Na kartě Nastavení aplikace vyberte Nové nastavení aplikace.
  3. V místní nabídce, která se zobrazí, nastavte Název na , nastavte hodnotu na truea vyberte OK.SCM_DO_BUILD_DURING_DEPLOYMENT
  4. V horní části stránky Konfigurace vyberte Uložit.
  5. 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.

  1. Přejděte do úložiště GitHub.
  2. Změňte kód, například změňte název aplikace.
  3. Potvrďte změnu do úložiště.
  4. Přejděte do kanálu a ověřte, že se vytvoří nové spuštění.
  5. Po dokončení spuštění ověřte, že je nové sestavení nasazené do vaší webové aplikace.
    1. Na webu Azure Portal přejděte do své webové aplikace.
    2. Vyberte Deployment Center a vyberte kartu Protokoly .
    3. 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ů.

Další kroky