Share via


Python-webalkalmazás létrehozása és üzembe helyezése az Azure Pipelines használatával Azure-alkalmazás Szolgáltatásban

Azure DevOps Services

Az Azure Pipelines használatával folyamatos integrációt és folyamatos teljesítést (CI/CD) használhat Python-webalkalmazások létrehozásához és üzembe helyezéséhez a Linux Azure-alkalmazás szolgáltatásban. A folyamat automatikusan létrehozza és üzembe helyezi a Python-webalkalmazást az App Service-ben, amikor véglegesítés van az adattárban.

Ebben a cikkben az alábbiakkal ismerkedhet meg:

  • Webalkalmazás létrehozása az Azure App Service használatával.
  • Projekt létrehozása az Azure DevOpsban.
  • Csatlakozás a DevOps-projektet az Azure-ba.
  • Hozzon létre egy Python-specifikus folyamatot.
  • Futtassa a folyamatot az alkalmazás webalkalmazásban való létrehozásához és üzembe helyezéséhez az App Service-ben.

Előfeltételek

Adattár létrehozása az alkalmazáskódhoz

A mintaadattárat https://github.com/Microsoft/python-sample-vscode-flask-tutorial elágaztathatja a GitHub-fiókjába.

A helyi gazdagépen klónozza a GitHub-adattárat. Használja az alábbi parancsot az elágazott adattár URL-címére cserélve <repository-url> .

git clone <repository-url>

Alkalmazás helyi tesztelése

Hozza létre és futtassa az alkalmazást helyileg, hogy biztosan működjön.

  1. Váltson a klónozott adattár mappára.

    cd python-sample-vscode-flask-tutorial
    
  2. Készítsen buildet és futtassa az alkalmazást

    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. Az alkalmazás megtekintéséhez nyisson meg egy böngészőablakot, és nyissa meg a következőt http://localhost:5000: . Ellenőrizze, hogy megjelenik-e a cím Visual Studio Flask Tutorial.

  4. Ha végzett, zárja be a böngészőablakot, és állítsa le a Flask-kiszolgálót a Ctrl C billentyűkombinációval.+

A Cloud Shell megnyitása

  1. Jelentkezzen be az Azure Portalra a https://portal.azure.com webhelyen.

  2. Nyissa meg az Azure CLI-t a Cloud Shell gombra kattintva a portál eszköztárán.

    Képernyőkép az Azure Cloud Shell-gombról az Azure Portal eszköztárán.

  3. A Cloud Shell a böngésző alján jelenik meg. Válassza a Bash lehetőséget a legördülő menüből.

    Képernyőkép az Azure Cloud Shellről.

  4. Ha több helyet szeretne biztosítani a munkához, válassza a teljes méret gombot.

Azure-alkalmazás Service-webalkalmazás létrehozása

Hozza létre a Azure-alkalmazás Service-webalkalmazást a Cloud Shellből az Azure Portalon.

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 lehetőséget a helyi menüből.

  1. Klónozza az adattárat a következő paranccsal, és cserélje le <repository-url> az elágazott adattár URL-címére.

    git clone <repository-url>
    
  2. Módosítsa a könyvtárat a klónozott adattár mappára, így a az webapp up parancs Python-alkalmazásként ismeri fel az alkalmazást.

    cd python-sample-vscode-flask-tutorial
    
  3. Az az webapp up paranccsal kiépítheti az App Service-t, és elvégezheti az alkalmazás első üzembe helyezését. Cserélje le <your-web-app-name> az Azure-ban egyedi nevet. Általában egy személyes vagy cégnevet használ egy alkalmazásazonosítóval együtt, például <your-name>-flaskpipelines. Az alkalmazás URL-címe a your-appservice.azurewebsites.net> lesz<.

    az webapp up --name <your-web-app-name>
    

    A parancs JSON-kimenete a az webapp up következőt mutatja:

    {
      "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>
    }
    

    Jegyezze fel az URL értékeket és az runtime_version értékeket. A folyamat YAML-fájljában használja runtime_version . A URL webalkalmazás URL-címe. Ezzel ellenőrizheti, hogy az alkalmazás fut-e.

    Feljegyzés

    Az az webapp up parancs a következő műveleteket hajtja végre:

    • Hozzon létre egy alapértelmezett erőforráscsoportot.

    • Hozzon létre egy alapértelmezett App Service-csomagot.

    • Hozzon létre egy alkalmazást a megadott névvel.

    • A Zip üzembe helyezi az összes fájlt az aktuális munkakönyvtárból, és engedélyezve van a buildautomatizálás.

    • Gyorsítótárazza a paramétereket helyileg az .azure/config fájlban, hogy ne kelljen újból megadnia őket, amikor később a projektmappából vagy más az webapp parancsokkal az webapp up telepíti őket. A gyorsítótárazott értékek alapértelmezés szerint automatikusan használatosak.

    A parancsparaméterekkel felülbírálhatja az alapértelmezett műveletet a saját értékeivel. További információ: az webapp up.

  4. A python-sample-vscode-flask-tutorial alkalmazás rendelkezik egy startup.txt fájllal, amely tartalmazza a webalkalmazás adott indítási parancsát. A webalkalmazás startup-file konfigurációs tulajdonságának beállítása a következőre startup.txt: .

    1. Másolja ki az értéket a az webapp up parancs kimenetéből resourcegroup .

    2. Adja meg a következő parancsot az erőforráscsoport és az alkalmazásnév használatával.

    az webapp config set --resource-group <your-resource-group> --name <your-web-app-name> --startup-file startup.txt
    

    Amikor a parancs befejeződik, jSON-kimenet jelenik meg, amely tartalmazza a webalkalmazás összes konfigurációs beállítását.

  5. A futó alkalmazás megtekintéséhez nyisson meg egy böngészőt, és lépjen a URLaz webapp up parancs kimenetében láthatóra. Ha általános lapot lát, várjon néhány másodpercet, amíg az App Service elindul, majd frissítse a lapot. Ellenőrizze, hogy megjelenik-e a cím Visual Studio Flask Tutorial.

Azure DevOps-projekt létrehozása

Hozzon létre egy új Azure DevOps-projektet.

  1. Egy böngészőben nyissa meg a dev.azure.com , és jelentkezzen be.
  2. Válassza ki a szervezetet.
  3. Hozzon létre egy új projektet az Új projekt vagy a Projekt létrehozása lehetőség kiválasztásával, ha az első projektet hozza létre a szervezetben.
  4. Adjon meg egy projektnevet.
  5. Válassza ki a projekt láthatóságát .
  6. Válassza a Létrehozás lehetőséget.
  1. Egy böngészőben nyissa meg az Azure DevOps Servert.
  2. Válassza ki a gyűjteményt.
  3. Új projekt létrehozásához válassza az Új projekt vagy a Projekt létrehozása lehetőséget, ha az első projektet hozza létre a gyűjteményben.
  4. Adjon meg egy projektnevet.
  5. Válassza ki a projekt láthatóságát .
  6. Válassza a Létrehozás lehetőséget.

Egyszerű szolgáltatás létrehozása

A szolgáltatásnevek arra a célra létrehozott identitások, hogy az alkalmazások, üzemeltetett szolgáltatások és automatizált eszközök Azure-erőforrásokhoz férhessenek hozzá. Ez a hozzáférés a szolgáltatásnévhez rendelt szerepkörökre korlátozódik, így szabályozhatja, hogy mely erőforrások érhetők el, és mely szinten.

Szolgáltatásnév létrehozásához nyissa meg a Cloud Shellt (bash), és futtassa a következő parancsot. Cserélje le <service-principal-name> a szolgáltatásnév nevét, <your-subscription-id> az előfizetés azonosítóját és <your-resource-group> a webalkalmazás erőforráscsoportját.

az ad sp create-for-rbac --display-name <service-principal-name> --role contributor --scopes /subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>

A parancs az alábbi példához hasonló JSON-objektumot ad vissza:

{
  "clientId": "<client GUID>",
  "clientSecret": "<string-value>",
  "subscriptionId": "<subscription GUID>",
  "tenantId": "<tenant GUID>",
  ...
}

Jegyezze fel a clientId, clientSecret, subscriptionIdés tenantId az értékeket. Ezekre az értékekre szüksége van egy szolgáltatáskapcsolat létrehozásához a következő szakaszban.

Szolgáltatáskapcsolat létrehozása

A szolgáltatáskapcsolatokkal létrehozhat egy kapcsolatot, amely hitelesített hozzáférést biztosít az Azure Pipelinesból a külső és távoli szolgáltatásokhoz. A Azure-alkalmazás Service-webalkalmazásban való üzembe helyezéshez hozzon létre egy szolgáltatáskapcsolatot a webalkalmazást tartalmazó erőforráscsoporthoz.

  1. A Projekt lapon válassza a Projektbeállítások lehetőséget.

    Képernyőkép a Projektbeállítások gombról a projekt irányítópultján.

  2. Válassza ki a szolgáltatáskapcsolatokat a menü Folyamatok szakaszában.

  3. Válassza a Szolgáltatáskapcsolat létrehozása lehetőséget.

  4. Válassza az Azure Resource Managert , és válassza a Tovább lehetőséget.

    Képernyőkép az Azure Resource Manager szolgáltatás kapcsolatának kiválasztásáról.

  5. Válassza ki a hitelesítési módszert, és válassza a Tovább gombot.

  6. Az Új Azure-szolgáltatáskapcsolat párbeszédpanelen adja meg a kiválasztott hitelesítési módszerre vonatkozó információkat. A hitelesítési módszerekkel kapcsolatos további információkért tekintse meg az Azure-ba irányuló Csatlakozás Azure Resource Manager-szolgáltatáskapcsolat használatával.

    Ha például számítási feladat identitás-összevonási (automatikus) vagy egyszerű (automatikus) hitelesítési módszert használ, adja meg a szükséges információkat.

    Képernyőkép az Új szolgáltatáskapcsolat párbeszédpanelről.

    Mező Leírás
    Hatókör szintje Válasszon ki egy Előfizetést.
    Előfizetés Az Azure-előfizetés neve.
    Erőforráscsoport A webalkalmazást tartalmazó erőforráscsoport neve.
    Szolgáltatáskapcsolat neve A kapcsolat leíró neve.
    Hozzáférési engedélyek megadása az összes folyamathoz Ezzel a beállítással hozzáférést adhat az összes folyamathoz.
  7. Válassza a Mentés lehetőséget.

Az új kapcsolat megjelenik a Szolgáltatáskapcsolatok listában, és készen áll az Azure Pipeline-ban való használatra.

  1. A Projekt lapon válassza a Projektbeállítások lehetőséget.

    Képernyőkép a Projektbeállítások gombról a projekt irányítópultján.

  2. Válassza ki a szolgáltatáskapcsolatokat a menü Folyamatok szakaszában.

  3. Válassza a Szolgáltatáskapcsolat létrehozása lehetőséget.

  4. Válassza az Azure Resource Managert , és válassza a Tovább lehetőséget.

    Képernyőkép az Azure Resource Manager szolgáltatás kapcsolatának kiválasztásáról.

  5. Új Azure-szolgáltatáskapcsolat esetén válassza a Szolgáltatásnév (manuális) lehetőséget, majd a Tovább gombot

  6. A következő párbeszédpanelen adja meg a szükséges információkat.

    Képernyőkép az új szolgáltatáskapcsolat párbeszédpanelről.

    Mező Leírás
    Environment Válassza ki Azure Cloud.
    Hatókör szintje Válasszon ki egy Előfizetést.
    Előfizetés azonosítója Az előfizetés azonosítója.
    Előfizetés neve Az Azure-előfizetés neve.
    Szolgáltatásnév azonosítója A appId parancs által visszaadott az ad sp create-for-rbac JSON-objektum értéke.
    Szolgáltatásnév kulcsa A password parancs által visszaadott az ad sp create-for-rbac JSON-objektum értéke.
    Bérlőazonosító A tenant parancs által visszaadott az ad sp create-for-rbac JSON-objektum értéke.
  7. Válassza az Ellenőrzés lehetőséget a kapcsolat ellenőrzéséhez.

  8. Adjon meg egy szolgáltatáskapcsolatnevet.

  9. Győződjön meg arról, hogy minden folyamathoz hozzáférési engedélyeket ad meg.

  10. Válassza az Ellenőrzés és mentés lehetőséget.

Az új kapcsolat megjelenik a Szolgáltatáskapcsolatok listában, és készen áll arra, hogy az Azure Pipelines a projektből használja.

Saját üzemeltetésű ügynök konfigurálása

Ha saját, saját üzemeltetésű ügynököt használ, konfigurálnia kell az ügynököt a Python futtatására. A Python-verziók letöltése nem támogatott a saját üzemeltetésű ügynökök esetében. Előzetesen el kell végeznie a Python-verziót. A teljes telepítővel beszerezheti a Python pipkompatibilis verzióját.

Az inkompatibilis problémák elkerülése érdekében egyeznie kell a Python-verzióval a Azure-alkalmazás Services-webalkalmazás futtatókörnyezeti verziójával. A futtatókörnyezet verziója megjelenik a parancs JSON-kimenetében az webapp up .

A kívánt Python-verziót hozzá kell adni az eszköz gyorsítótárához a saját üzemeltetésű ügynökön, hogy a feladat használni tudja. Az eszközgyorsítótár általában az ügynök _work/_tool könyvtárában található; vagy felül lehet bírálni az elérési utat a AGENT_TOOLSDIRECTORY környezeti változóval. Az eszközök könyvtárában hozza létre a következő könyvtárstruktúrát a Python-verzió alapján:

$AGENT_TOOLSDIRECTORY/
    Python/
        {version number}/
            {platform}/
                {tool files}
            {platform}.complete

A verziószámnak az 1.2.3 formátumot kell követnie. A platformnak x86-nak vagy x64-nek kell lennie. Az eszközfájloknak a nem tömörített Python-verziófájloknak kell lenniük. A {platform}.complete fájlnak egy 0 bájtos fájlnak kell lennie, amely úgy x86.complete néz ki, vagy x64.complete csak azt jelzi, hogy az eszköz megfelelően van telepítve a gyorsítótárban.

Ha például Python 3.11-et használ egy 64 bites Windows-gépen, a címtárstruktúra a következőképpen nézne ki:

$AGENT_TOOLSDIRECTORY/
    Python/
        3.11.4/
            x64/
                {python files}
            x64.complete

Ha már rendelkezik az ügynököt üzemeltető gépen használni kívánt Python-verzióval, átmásolhatja a fájlokat az eszköz gyorsítótárba. Ha nem rendelkezik a Python-verzióval, letöltheti a Python webhelyéről.

Folyamat létrehozása

Hozzon létre egy folyamatot a Python-webalkalmazás Azure-alkalmazás Szolgáltatásban való létrehozásához és üzembe helyezéséhez. A folyamatfogalmak megismeréséhez tekintse meg az alábbiakat:

  1. A bal oldali navigációs menüben válassza a Folyamatok lehetőséget.

    Képernyőkép a folyamatok kiválasztásáról a projekt irányítópultján.

  2. Válassza a Folyamat létrehozása lehetőséget.

    Képernyőkép a folyamatlista új folyamat gombjáról.

  3. A Hol van a kód párbeszédpanelen válassza a GitHubot. Előfordulhat, hogy a rendszer arra kéri, hogy jelentkezzen be a GitHubra.

    Képernyőkép a GitHub kiválasztásáról a kód helyeként.

  4. Az Adattár kiválasztása képernyőn válassza ki az elágazott mintaadattárat.

    Képernyőkép az adattár kiválasztásáról.

  5. Előfordulhat, hogy a rendszer megerősítésként ismét kérni fogja a GitHub-jelszó megadását.

  6. Ha az Azure Pipelines-bővítmény nincs telepítve a GitHubon, a GitHub megkéri, hogy telepítse az Azure Pipelines bővítményt .

    Telepítse az Azure Pipelines bővítményt a GitHubon.

    Ezen a lapon görgessen le az Adattár hozzáférési szakaszához, válassza ki, hogy az összes adattárra vagy csak a kijelölt tárházakra telepíti-e a bővítményt, majd válassza a Jóváhagyás és telepítés lehetőséget.

    Képernyőkép az Azure Pipelines bővítmény jóváhagyásáról és telepítéséről a GitHubon.

  7. A Folyamat konfigurálása párbeszédpanelen válassza a Pythont linuxos webalkalmazásba az Azure-ban.

  8. Válassza ki az Azure-előfizetését, és válassza a Folytatás lehetőséget.

  9. Ha a felhasználónevét és a jelszavát használja a hitelesítéshez, megnyílik egy böngésző, amelyben bejelentkezhet a Microsoft-fiókjába.

  10. Válassza ki a webalkalmazás nevét a legördülő listából, és válassza az Ellenőrzés és konfigurálás lehetőséget.

Az Azure Pipelines létrehoz egy azure-pipelines.yml fájlt, és megjeleníti azt a YAML-folyamatok szerkesztőjében. A folyamatfájl fázisok, feladatok és lépések sorozataként határozza meg a CI/CD-folyamatot, ahol minden lépés tartalmazza a különböző tevékenységek és szkriptek részleteit. Tekintse meg a folyamatot, és nézze meg, mit csinál. Győződjön meg arról, hogy az összes alapértelmezett bemenet megfelelő a kódhoz.

  1. A navigációs menüben válassza a Folyamatok lehetőséget.

    Képernyőkép a folyamatok kiválasztásáról a projekt irányítópultján.

  2. Válassza a Folyamat létrehozása lehetőséget.

    ::image type="content" source="media/create-first-pipeline.png" alt-text="Screenshot of New pipeline button.":::

  3. A Hol található a kód párbeszédpanelen válassza a GitHub Enterprise Server lehetőséget. Előfordulhat, hogy a rendszer arra kéri, hogy jelentkezzen be a GitHubra.

    Képernyőkép a GitHub kiválasztásáról a kód helyeként.

  4. Az Adattár kiválasztása lapon válassza ki az elágazott mintaadattárat.

    Képernyőkép az adattár kiválasztásáról.

  5. Előfordulhat, hogy a rendszer megerősítésként ismét kérni fogja a GitHub-jelszó megadását.

  6. Ha az Azure Pipelines-bővítmény nincs telepítve a GitHubon, a GitHub megkéri, hogy telepítse az Azure Pipelines bővítményt .

    Képernyőkép az Azure Pipelines bővítményről a GitHubon.

    Ezen a lapon görgessen le az Adattár hozzáférési szakaszához, válassza ki, hogy az összes adattárra vagy csak a kijelölt tárházakra telepíti-e a bővítményt, majd válassza a Jóváhagyás és telepítés lehetőséget.

    Képernyőkép az Azure Pipelines bővítmény jóváhagyásáról és telepítéséről a GitHubon.

  7. A Folyamat konfigurálása párbeszédpanelen válassza a Starter-folyamatot.

  8. Cserélje le a azure-pipelines.yml fájl tartalmát a következő kódra.

    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. Cserélje le a következő helyőrzőket a saját értékeire:

    Helyőrző Leírás
    <your-service-connection-name> A létrehozott szolgáltatáskapcsolat neve.
    <your-web-app-name> A Azure-alkalmazás Service-webalkalmazás neve.
    <your-pool-name> A használni kívánt ügynökkészlet neve.
    <your-python-version> Az ügynökén futó Python-verzió. Érdemes ezt a verziót a webalkalmazásban futó Python-verzióval egyeztetni. A webalkalmazás verziója megjelenik a parancs JSON-kimenetében az webapp up .

YAML-folyamatfájl

Az alábbi magyarázat a YAML-folyamatfájlt ismerteti. A folyamat YAML-fájlséma megismeréséhez tekintse meg a YAML-sémahivatkozást.

Változók

A variables szakasz a következő változókat tartalmazza:

variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'

# Web app name
webAppName: '<your-web-app-name>'

# Agent VM image name
vmImageName: 'ubuntu-latest'

# Environment name
environmentName: '<your-web-app-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'

Változó Leírás
azureServiceConnectionId Az Azure Resource Manager szolgáltatáskapcsolat azonosítója vagy neve.
webAppName A Azure-alkalmazás Service-webalkalmazás neve.
vmImageName A buildügynökhöz használandó operációs rendszer neve.
environmentName Az üzembe helyezési szakaszban használt környezet neve. A környezet automatikusan létrejön a szakaszfeladat futtatásakor.
projectRoot Az alkalmazáskódot tartalmazó gyökérmappa.
pythonVersion A Python buildelési és üzembe helyezési ügynökökön használható verziója.

A variables szakasz a következő változókat tartalmazza:

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: 3.11. Change this to the version that is running on your agent and web app.
pythonVersion: '3.11'
Változó Leírás
azureServiceConnectionId Az Azure Resource Manager szolgáltatáskapcsolat neve.
webAppName A webalkalmazás neve.
environmentName Az üzembe helyezési szakaszban használt környezet neve.
projectRoot Az alkalmazáskódot tartalmazó mappa. Az érték egy automatikus rendszerváltozó.
pythonVersion A Python buildelési és üzembe helyezési ügynökökön használható verziója.

Buildelési szakasz

A buildelési fázis egyetlen feladatot tartalmaz, amely a vmImageName változóban meghatározott operációs rendszeren fut.

  - job: BuildJob
    pool:
      vmImage: $(vmImageName)

A buildelési szakasz egyetlen feladatot tartalmaz, amely a névparaméter által azonosított készletben lévő ügynökön fut. A kulcsszóval demands megadhatja az ügynök képességeit. Például azt határozza meg, demands: python hogy az ügynöknek telepítve kell lennie a Pythonnal. A saját üzemeltetésű ügynök név szerinti megadásához használhatja a kulcsszót demands: Agent.Name -equals <agent-name> .

  - job: BuildJob
    pool:
      name: <your-pool-name>
      demands: python

A feladat több lépést tartalmaz:

  1. A UsePythonVersion feladat kiválasztja a Használni kívánt Python-verziót. A verzió a változóban pythonVersion van definiálva.

       - task: UsePythonVersion@0
          inputs:
            versionSpec: '$(pythonVersion)'
            displayName: 'Use Python $(pythonVersion)'
    
  2. Ez a lépés egy szkript használatával hoz létre egy virtuális Python-környezetet, és telepíti a fájlban requirements.txt található alkalmazás függőségeit. A --target paraméter megadja a függőségek telepítésének helyét. A workingDirectory paraméter megadja az alkalmazáskód helyét.

      - script: |
           python -m venv antenv
           source antenv/bin/activate
           python -m pip install --upgrade pip
           pip install setup
           pip install --target="./.python_packages/lib/site-packages" -r ./requirements.txt
         workingDirectory: $(projectRoot)
         displayName: "Install requirements"
    
  3. Az ArchiveFiles feladat létrehozza a webalkalmazást tartalmazó .zip archívumot. A .zip rendszer a fájlt a rendszer a névvel ellátott dropösszetevőként tölti fel a folyamatba. A .zip fájl az üzembe helyezési szakaszban használatos az alkalmazás webalkalmazásban való üzembe helyezéséhez.

       - 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
    
    Paraméter Leírás
    rootFolderOrFile Az alkalmazáskód helye.
    includeRootFolder Azt jelzi, hogy a gyökérmappa szerepel-e a .zip fájlban. Ha ezt a paramétert másként false állítja be, a .zip fájl tartalma egy s nevű mappába kerül, és a Linux-tárolón futó App Service nem találja az alkalmazáskódot.
    archiveType A létrehozandó archívum típusa. Állítsa zip értékre.
    archiveFile A létrehozandó .zip fájl helye.
    replaceExistingArchive Azt jelzi, hogy lecserél-e egy meglévő archívumot, ha a fájl már létezik. Állítsa true értékre.
    upload A feltöltendő .zip fájl helye.
    artifact A létrehozandó összetevő neve.

Üzembe helyezési szakasz

Az üzembe helyezési szakasz akkor fut, ha a buildelési szakasz sikeresen befejeződött. A következő kulcsszavak határozzák meg ezt a viselkedést:

  dependsOn: Build
  condition: succeeded()

Az üzembe helyezési szakasz egyetlen üzembehelyezési feladatot tartalmaz, amely a következő kulcsszavakkal van konfigurálva:

  - deployment: DeploymentJob
    pool:
      vmImage: $(vmImageName)
    environment: $(environmentName)
Kulcsszó Leírás
deployment Azt jelzi, hogy a feladat egy környezetet célzó üzembehelyezési feladat.
pool Az üzembehelyezési ügynökkészletet adja meg. Az alapértelmezett ügynökkészlet, ha a név nincs megadva. A vmImage kulcsszó azonosítja az ügynök virtuálisgép-lemezképének operációs rendszerét
environment Meghatározza, hogy a környezet mely környezetben legyen üzembe helyezve. A környezet automatikusan létrejön a projektben a feladat futtatásakor.
  - deployment: DeploymentJob
    pool:
      name: <your-pool-name>
    environment: $(environmentName)
Kulcsszó Leírás
deployment Azt jelzi, hogy a feladat egy környezetet célzó üzembehelyezési feladat.
pool Megadja az üzembe helyezéshez használni kívánt ügynökkészletet. Ennek a készletnek tartalmaznia kell egy ügynököt, amely képes futtatni a folyamatban megadott Python-verziót.
environment Meghatározza, hogy a környezet mely környezetben legyen üzembe helyezve. A környezet automatikusan létrejön a projektben a feladat futtatásakor.

A strategy kulcsszó az üzembehelyezési stratégia meghatározására szolgál. A runOnce kulcsszó azt határozza meg, hogy az üzembehelyezési feladat egyszer fusson. A deploy kulcsszó megadja az üzembe helyezési feladatban futtatandó lépéseket.

  strategy:
    runOnce:
      deploy:
        steps:

A steps folyamat a következő:

  1. A UsePythonVersion feladattal adja meg az ügynökön használni kívánt Python-verziót. A verzió a változóban pythonVersion van definiálva.

     - task: UsePythonVersion@0
       inputs:
         versionSpec: '$(pythonVersion)'
       displayName: 'Use Python version'
    
  2. A webalkalmazás üzembe helyezése a AzureWebApp@1 használatával. Ez a feladat üzembe helyezi a folyamat összetevőt drop a webalkalmazásban.

    - task: AzureWebApp@1
       displayName: 'Deploy Azure Web App : <your-web-app-name>'
       inputs:
          azureSubscription: $(azureServiceConnectionId)
          appName: $(webAppName)
          package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
    
    Paraméter Leírás
    azureSubscription A használni kívánt Azure Resource Manager-szolgáltatás kapcsolatazonosítója vagy neve.
    appName A webalkalmazás neve.
    package Az üzembe helyezendő .zip fájl helye.

    Mivel a python-vscode-flask-tutorial adattár ugyanazt az indítási parancsot tartalmazza egy startup.txt nevű fájlban, a következő paraméter hozzáadásával adhatja meg a fájlt: 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'
    
    Paraméter Leírás
    azureSubscription A használni kívánt Azure Resource Manager-szolgáltatás kapcsolatazonosítója vagy neve.
    appName A webalkalmazás neve.
    package Az üzembe helyezendő .zip fájl helye.
    startUpCommand Az alkalmazás üzembe helyezése után futtatandó parancs. A mintaalkalmazás a következőt használja startup.txt: .

A folyamat futtatása

Most már készen áll a kipróbálásra!

  1. A szerkesztőben válassza a Mentés és futtatás lehetőséget.

  2. A Mentés és futtatás párbeszédpanelen adjon hozzá egy véglegesítési üzenetet, majd válassza a Mentés és futtatás lehetőséget.

    A folyamat futásának megtekintéséhez válassza ki a fázisokat vagy feladatokat a folyamatfuttatás összegzésében.

    Képernyőkép a folyamatfuttatás összefoglaló szakaszáról.

    Az egyes fázisok és feladatok mellett zöld pipák jelennek meg, miközben sikeresen befejeződik. Ha hibák történnek, azok megjelennek az összegzésben vagy a feladat lépéseiben.

    Képernyőkép a folyamatszakasz lépéseiről.

    Gyorsan visszatérhet a YAML-szerkesztőhöz az Összefoglalás oldal jobb felső sarkában lévő függőleges pontokkal, és válassza a Folyamat szerkesztése lehetőséget:

    Képernyőkép a folyamat megjegyzésének szerkesztéséről egy buildjelentésből.

  3. Az üzembe helyezési feladatban válassza az Azure Web App üzembe helyezése feladatot a kimenet megjelenítéséhez. Az üzembe helyezett webhely megtekintéséhez tartsa lenyomva a Ctrl billentyűt, és válassza ki az URL-címet.App Service Application URL

    Ha a mintaalkalmazást használja, az alkalmazásnak a következőképpen kell megjelennie:

    Képernyőkép az App Service-ben futó mintaalkalmazás nézetéről.

Fontos

Ha az alkalmazás egy hiányzó függőség miatt meghiúsul, akkor a requirements.txt fájl feldolgozása nem történt meg 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.

A az webapp up parancs kifejezetten a buildelési műveletet SCM_DO_BUILD_DURING_DEPLOYMENT állítja be a következőre true: . Ha az app service-t a portálon keresztül létesítette, a művelet nem lesz automatikusan beállítva.

A következő lépésekkel állíthatja be a műveletet:

  1. Nyissa meg az Azure Portalt, válassza ki az App Service-t, majd válassza a Konfiguráció lehetőséget.
  2. Az Alkalmazás Gépház lapon válassza az Új alkalmazásbeállítás lehetőséget.
  3. A megjelenő előugró ablakban állítsa be a NévSCM_DO_BUILD_DURING_DEPLOYMENTbeállítást, állítsa az Érték értékét az értékretrue, és válassza az OK gombot.
  4. Válassza a Konfiguráció lap tetején található Mentés lehetőséget.
  5. A folyamat újbóli futtatása. A függőségeket telepíteni kell az üzembe helyezés során.

Folyamat futtatásának aktiválása

Folyamatfuttatás indításához véglegesítsen egy módosítást az adattárban. Hozzáadhat például egy új funkciót az alkalmazáshoz, vagy frissítheti az alkalmazás függőségeit.

  1. Nyissa meg a GitHub-adattárat.
  2. Módosítsa a kódot, például módosítsa az alkalmazás címét.
  3. Véglegesítse a módosítást az adattárban.
  4. Lépjen a folyamatra, és ellenőrizze, hogy létrejön-e egy új futtatás.
  5. Ha a futtatás befejeződött, ellenőrizze, hogy az új build telepítve van-e a webalkalmazásban.
    1. Az Azure Portalon nyissa meg a webalkalmazást.
    2. Válassza az Üzembehelyezési központ lehetőséget , és válassza a Naplók lapot.
    3. Ellenőrizze, hogy az új üzembe helyezés szerepel-e a listában.

A Django szempontjai

Ha külön adatbázist használ, az Azure Pipelines használatával django-alkalmazásokat helyezhet üzembe Azure-alkalmazás Linuxon futó szolgáltatásban. 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 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. Ha bármilyen módon testre szeretné szabni az indítási parancsot, használja a startUpCommandAzureWebApp@1 YAML-folyamatfájl lépésének paraméterét az előző szakaszban leírtak szerint.

A Django használatakor általában az alkalmazáskód üzembe helyezése után szeretné migrálni az adatmodelleket manage.py migrate . Ehhez hozzáadhat startUpCommand egy üzembe helyezés utáni szkriptet. Itt látható például a startUpCommand AzureWebApp@1 feladat tulajdonsága.

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

Tesztek futtatása a buildügynökön

A buildelési folyamat részeként érdemes lehet teszteket futtatni az alkalmazás kódján. A tesztek a buildügynökön futnak, ezért a függőségeket egy virtuális környezetbe kell telepítenie a buildügynökön. A tesztek futtatása után törölje a virtuális környezetet, mielőtt létrehozza a .zip fájlt az üzembe helyezéshez. A következő szkriptelemek ezt a folyamatot szemléltetik. Helyezze őket a ArchiveFiles@2 feladat elé a azure-pipelines.yml fájlban. További információ: Platformfüggetlen szkriptek futtatása.

# 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'

Olyan feladatokat is használhat, mint a PublishTestResults@2 a teszteredmények a folyamaton való közzétételéhez. További információ: Python-alkalmazások létrehozása – Tesztek futtatása.

Az erőforrások eltávolítása

Az oktatóanyagban létrehozott Azure-erőforrások költségeinek elkerülése érdekében:

  • Törölje a létrehozott projektet. A projekt törlése törli a folyamatot és a szolgáltatáskapcsolatot.

  • Törölje az App Service-t és az App Service-csomagot tartalmazó Azure-erőforráscsoportot. Az Azure Portalon lépjen az erőforráscsoportra, válassza az Erőforráscsoport törlése lehetőséget, és kövesse az utasításokat.

  • Törölje a Cloud Shell fájlrendszerét karbantartó tárfiókot. Zárja be a Cloud Shellt, majd lépjen a Cloud-Shell-Storage-val kezdődő erőforráscsoportra, válassza az Erőforráscsoport törlése lehetőséget, és kövesse az utasításokat.

Következő lépések