Bagikan melalui


Menggunakan Azure Pipelines untuk membangun dan menyebarkan aplikasi web Python ke Azure App Service

Azure DevOps

Gunakan Azure Pipelines untuk integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) untuk membangun dan menyebarkan aplikasi web Python ke Azure App Service di Linux. Alur Anda secara otomatis membangun dan menyebarkan aplikasi web Python Anda ke App Service setiap kali ada penerapan ke repositori.

Dalam artikel ini, Anda akan mempelajari cara:

  • Buat aplikasi web di Azure App Service.
  • Buat proyek di Azure DevOps.
  • Sambungkan proyek DevOps Anda ke Azure.
  • Buat alur khusus Python.
  • Jalankan alur untuk membangun dan menyebarkan aplikasi Anda ke aplikasi web Anda di App Service.

Prasyarat

  • Langganan Azure. Jika Anda tidak memilikinya, buat akun gratis.
  • Akun GitHub. Jika Anda tidak memilikinya, buat secara gratis.
  • Server Azure DevOps.
  • Agen yang dihost sendiri. Jika Anda perlu membuat agen yang dihost sendiri, lihat Agen yang dihost sendiri.

Membuat repositori untuk kode aplikasi Anda

Fork repositori sampel ke https://github.com/Microsoft/python-sample-vscode-flask-tutorial akun GitHub Anda.

Di host lokal Anda, kloning repositori GitHub Anda. Gunakan perintah berikut, ganti <repository-url> dengan URL repositori fork Anda.

git clone <repository-url>

Menguji aplikasi Anda secara lokal

Buat dan jalankan aplikasi secara lokal untuk memastikan aplikasi berfungsi.

  1. Ubah ke folder repositori kloning.

    cd python-sample-vscode-flask-tutorial
    
  2. Buat dan jalankan aplikasi

    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. Untuk melihat aplikasi, buka jendela browser dan buka http://localhost:5000. Verifikasi bahwa Anda melihat judul Visual Studio Flask Tutorial.

  4. Setelah selesai, tutup jendela browser dan hentikan server Flask dengan Ctrl+C.

Buka Cloud Shell

  1. Masuk ke portal Microsoft Azure di https://portal.azure.com.

  2. Buka Azure CLI dengan memilih tombol Cloud Shell di toolbar portal.

    Cuplikan layar tombol Azure Cloud Shell pada toolbar portal Azure.

  3. Cloud Shell muncul di bagian bawah browser. Pilih Bash dari menu dropdown.

    Cuplikan layar Azure Cloud Shell.

  4. Untuk memberi Anda lebih banyak ruang untuk bekerja, pilih tombol maksimalkan.

Membuat aplikasi web Azure App Service

Buat aplikasi web Azure App Service Anda dari Cloud Shell di portal Azure.

Tip

Untuk menempelkan ke Cloud Shell, gunakan Ctrl+Shift+V atau klik kanan dan pilih Tempel dari menu konteks.

  1. Kloning repositori Anda dengan perintah berikut, ganti <repository-url> dengan URL repositori fork Anda.

    git clone <repository-url>
    
  2. Ubah direktori ke folder repositori kloning, sehingga az webapp up perintah mengenali aplikasi sebagai aplikasi Python.

    cd python-sample-vscode-flask-tutorial
    
  3. Gunakan perintah az webapp up untuk menyediakan App Service dan melakukan penyebaran pertama aplikasi Anda. Ganti <your-web-app-name> dengan nama yang unik di seluruh Azure. Biasanya, Anda menggunakan nama pribadi atau perusahaan bersama dengan pengidentifikasi aplikasi, seperti <your-name>-flaskpipelines. URL aplikasi menjadi your-appservice.azurewebsites.net>.<

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

    Output JSON dari az webapp up perintah menunjukkan:

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

    URL Perhatikan dan nilainyaruntime_version. Anda menggunakan runtime_version dalam file YAML alur. URL adalah URL aplikasi web Anda. Anda dapat menggunakannya untuk memverifikasi bahwa aplikasi sedang berjalan.

    Catatan

    Perintah az webapp up melakukan tindakan berikut:

    • Membuat grup sumber daya default.

    • Membuat paket App Service default.

    • Membuat aplikasi dengan nama yang ditentukan.

    • Zip menyebarkan semua file dari direktori kerja saat ini, dengan otomatisasi build diaktifkan.

    • Cache parameter secara lokal di file .azure/config sehingga Anda tidak perlu menentukannya lagi saat menerapkan nanti dengan perintah az webapp up atau az webapp lainnya dari folder proyek. Nilai cache digunakan secara otomatis secara default.

    Anda dapat mengambil alih tindakan default dengan nilai Anda sendiri menggunakan parameter perintah. Untuk informasi selengkapnya, lihat az webapp up.

  4. Aplikasi python-sample-vscode-flask-tutorial memiliki file startup.txt yang berisi perintah startup tertentu untuk aplikasi web. Atur properti konfigurasi aplikasi startup-file web ke startup.txt.

    1. Dari az webapp up output perintah, salin nilai .resourcegroup

    2. Masukkan perintah berikut, menggunakan grup sumber daya dan nama aplikasi Anda.

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

    Saat perintah selesai, perintah menunjukkan output JSON yang berisi semua pengaturan konfigurasi untuk aplikasi web Anda.

  5. Untuk melihat aplikasi yang sedang berjalan, buka browser dan buka yang URL ditampilkan dalam az webapp up output perintah. Jika Anda melihat halaman generik, tunggu beberapa detik hingga App Service dimulai, lalu refresh halaman. Verifikasi bahwa Anda melihat judul Visual Studio Flask Tutorial.

Membuat proyek Azure DevOps

Buat proyek Azure DevOps baru.

  1. Di browser, buka dev.azure.com dan masuk.
  2. Pilih organisasi Anda.
  3. Buat proyek baru dengan memilih Proyek baru atau Buat proyek jika membuat proyek pertama di organisasi.
  4. Masukkan Nama proyek.
  5. Pilih Visibilitas untuk proyek Anda.
  6. Pilih Buat.
  1. Di browser, buka Azure DevOps Server Anda.
  2. Pilih koleksi Anda.
  3. Buat proyek baru dengan memilih Proyek baru atau Buat proyek jika membuat proyek pertama dalam koleksi.
  4. Masukkan Nama proyek.
  5. Pilih Visibilitas untuk proyek Anda.
  6. Pilih Buat.

Membuat perwakilan layanan

Perwakilan layanan adalah identitas yang dibuat untuk digunakan dengan aplikasi, layanan yang dihosting, dan alat otomatis untuk mengakses sumber daya Azure. Akses ini dibatasi untuk peran yang ditetapkan ke perwakilan layanan, memberi Anda kontrol atas sumber daya mana yang dapat diakses dan di tingkat mana.

Untuk membuat perwakilan layanan, buka cloud shell (bash) dan jalankan perintah berikut. Ganti <service-principal-name> dengan nama untuk perwakilan layanan Anda, <your-subscription-id> dengan ID langganan Anda, dan <your-resource-group> dengan grup sumber daya untuk aplikasi web.

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

Perintah mengembalikan objek JSON yang mirip dengan contoh berikut:

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

Catat clientIdnilai , , clientSecretsubscriptionId, dan tenantId . Anda memerlukan nilai-nilai ini untuk membuat koneksi layanan di bagian berikutnya.

Membuat koneksi layanan

Koneksi layanan memungkinkan Anda membuat koneksi untuk menyediakan akses terautentikasi dari Azure Pipelines ke layanan eksternal dan jarak jauh. Untuk menyebarkan ke aplikasi web Azure App Service Anda, buat koneksi layanan ke grup sumber daya yang berisi aplikasi web.

  1. Pada halaman proyek, pilih Pengaturan proyek.

    Cuplikan layar tombol pengaturan proyek di dasbor proyek.

  2. Pilih Koneksi layanan di bagian Alur pada menu.

  3. Pilih Buat koneksi layanan.

  4. Pilih Azure Resource Manager dan pilih Berikutnya.

    Cuplikan layar pemilihan koneksi layanan Azure Resource Manager.

  5. Pilih metode autentikasi Anda dan pilih Berikutnya.

  6. Dalam dialog Koneksi layanan Azure Baru, masukkan informasi khusus untuk metode autentikasi yang dipilih. Untuk informasi selengkapnya tentang metode autentikasi, lihat Menyambungkan ke Azure dengan menggunakan koneksi layanan Azure Resource Manager.

    Misalnya, jika Anda menggunakan metode autentikasi Federasi Identitas Beban Kerja (otomatis) atau Perwakilan layanan (otomatis), masukkan informasi yang diperlukan.

    Cuplikan layar kotak dialog Koneksi layanan baru.

    Bidang Keterangan
    Tingkat cakupan Memilih Langganan.
    Langganan Nama langganan Azure Anda.
    Grup sumber daya Nama grup sumber daya yang berisi aplikasi web Anda.
    Nama koneksi layanan Nama deskriptif untuk koneksi.
    Memberikan izin akses ke semua alur Pilih opsi ini untuk memberikan akses ke semua alur.
  7. Pilih Simpan.

Koneksi baru muncul di daftar Koneksi layanan, dan siap digunakan di Azure Pipeline Anda.

  1. Pada halaman proyek, pilih Pengaturan proyek.

    Cuplikan layar tombol pengaturan proyek di dasbor proyek.

  2. Pilih Koneksi layanan di bagian Alur pada menu.

  3. Pilih Buat koneksi layanan.

  4. Pilih Azure Resource Manager dan pilih Berikutnya.

    Cuplikan layar pemilihan koneksi layanan Azure Resource Manager.

  5. Pada Koneksi layanan Azure Baru, pilih Perwakilan layanan (manual) dan pilih Berikutnya

  6. Pada dialog berikutnya, isi informasi yang diperlukan.

    Cuplikan layar kotak dialog koneksi layanan baru.

    Bidang Keterangan
    Lingkungan Pilih Azure Cloud.
    Tingkat cakupan Memilih Langganan.
    ID Langganan ID langganan Anda.
    Nama Langganan Nama langganan Azure Anda.
    Id Perwakilan Layanan Nilai appId dari objek JSON yang dikembalikan oleh az ad sp create-for-rbac perintah .
    Kunci perwakilan layanan Nilai password dari objek JSON yang dikembalikan oleh az ad sp create-for-rbac perintah .
    Id Penyewa Nilai tenant dari objek JSON yang dikembalikan oleh az ad sp create-for-rbac perintah .
  7. Pilih Verifikasi untuk memverifikasi koneksi.

  8. Masukkan nama koneksi Layanan.

  9. Pastikan Berikan izin akses ke semua alur dipilih.

  10. Pilih Verifikasi dan simpan.

Koneksi baru muncul di daftar Koneksi layanan, dan siap digunakan azure Pipelines dari proyek.

Mengonfigurasi agen yang dihost sendiri

Jika Anda menggunakan agen yang dihost sendiri, Anda perlu mengonfigurasi agen untuk menjalankan Python. Mengunduh versi Python tidak didukung pada agen yang dihost sendiri. Anda harus menginstal versi Python sebelumnya. Gunakan alat penginstal lengkap untuk mendapatkan versi Python yang kompatibel dengan pip.

Untuk menghindari masalah yang tidak kompatibel, Anda harus mencocokkan versi Python dengan versi runtime di aplikasi web Azure App Services Anda. Versi runtime ditampilkan dalam output JSON dari az webapp up perintah .

Versi Python yang diinginkan perlu ditambahkan ke cache alat pada agen yang dihost sendiri sehingga tugas dapat menggunakannya. Biasanya, cache alat terletak di bawah direktori _work/_tool agen; atau, jalur dapat ditimpa dengan variabel lingkungan AGENT_TOOLSDIRECTORY. Di bawah direktori alat, buat struktur direktori berikut berdasarkan versi Python Anda:

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

Nomor versi harus mengikuti format 1.2.3. Platform harus x86 atau x64. File alat harus berupa file versi Python yang tidak di-zip. harus {platform}.complete berupa file 0-byte yang terlihat seperti x86.complete atau x64.complete dan hanya menandakan alat diinstal dengan benar di cache.

Misalnya, jika Anda menggunakan Python 3.11 pada komputer Windows 64-bit, struktur direktori akan terlihat seperti ini:

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

Jika Anda sudah memiliki versi Python yang ingin Anda gunakan pada mesin yang menghosting agen Anda, Anda dapat menyalin file ke cache alat. Jika Anda tidak memiliki versi Python, Anda dapat mengunduhnya dari situs web Python.

Buat alur

Buat alur untuk membangun dan menyebarkan aplikasi web Python Anda ke Azure App Service. Untuk memahami konsep alur, tonton:

  1. Di menu navigasi kiri, pilih Alur.

    Cuplikan layar pemilihan Alur di dasbor proyek.

  2. Pilih Buat Saluran.

    Cuplikan layar tombol alur baru pada daftar alur.

  3. Dalam dialog Di mana kode Anda, pilih GitHub. Anda mungkin diminta untuk masuk ke GitHub.

    Cuplikan layar pilih GitHub sebagai lokasi kode Anda.

  4. Pada layar Pilih repositori, pilih repositori sampel fork.

    Cuplikan layar pemilihan repositori.

  5. Anda mungkin diminta untuk memasukkan kata sandi GitHub Anda lagi sebagai konfirmasi.

  6. Jika ekstensi Azure Pipelines tidak diinstal di GitHub, GitHub meminta Anda untuk menginstal ekstensi Azure Pipelines .

    Instal ekstensi Azure Pipelines di GitHub.

    Pada halaman ini, gulir ke bawah ke bagian Akses repositori , pilih apakah akan menginstal ekstensi pada semua repositori atau hanya yang dipilih, lalu pilih Setujui dan instal.

    Cuplikan layar Setujui dan Instal ekstensi Azure Pipelines di GitHub.

  7. Dalam dialog Konfigurasikan alur Anda, pilih Python ke Linux Web App di Azure.

  8. Pilih langganan Azure Anda dan pilih Lanjutkan.

  9. Jika Anda menggunakan nama pengguna dan kata sandi untuk mengautentikasi, browser akan terbuka bagi Anda untuk masuk ke akun Microsoft Anda.

  10. Pilih nama aplikasi web Anda dari daftar dropdown dan pilih Validasi dan konfigurasikan.

Azure Pipelines membuat file azure-pipelines.yml dan menampilkannya di editor alur YAML. File alur mendefinisikan alur CI/CD Anda sebagai serangkaian tahapan, Pekerjaan, dan langkah-langkah, di mana setiap langkah berisi detail untuk tugas dan skrip yang berbeda. Lihat alur untuk melihat hal yang dilakukannya. Pastikan semua input default sesuai untuk kode Anda.

  1. Pada menu navigasi, pilih Alur.

    Cuplikan layar pemilihan Alur di dasbor proyek.

  2. Pilih Buat Saluran.

    Cuplikan layar tombol Alur baru.

  3. Dalam dialog Di mana kode Anda, pilih GitHub Enterprise Server. Anda mungkin diminta untuk masuk ke GitHub.

    Cuplikan layar pilih GitHub sebagai lokasi kode Anda.

  4. Pada tab Pilih repositori , pilih repositori sampel fork.

    Cuplikan layar pemilihan repositori.

  5. Anda mungkin diminta untuk memasukkan kata sandi GitHub Anda lagi sebagai konfirmasi.

  6. Jika ekstensi Azure Pipelines tidak diinstal di GitHub, GitHub meminta Anda untuk menginstal ekstensi Azure Pipelines .

    Cuplikan layar ekstensi Azure Pipelines di GitHub.

    Pada halaman ini, gulir ke bawah ke bagian Akses repositori , pilih apakah akan menginstal ekstensi pada semua repositori atau hanya yang dipilih, lalu pilih Setujui dan instal.

    Cuplikan layar Setujui dan Instal ekstensi Azure Pipelines di GitHub.

  7. Dalam dialog Konfigurasikan alur Anda, pilih Alur pemula.

  8. Ganti konten file azure-pipelines.yml dengan kode berikut.

    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. Ganti tempat penampung berikut dengan nilai Anda sendiri:

    Placeholder Keterangan
    <your-service-connection-name> Nama koneksi layanan yang Anda buat.
    <your-web-app-name> Nama aplikasi web Azure App Service Anda.
    <your-pool-name> Nama kumpulan agen yang ingin Anda gunakan.
    <your-python-version> Versi Python yang berjalan di agen Anda. Ada baiknya untuk mencocokkan versi ini dengan versi Python yang berjalan di aplikasi web Anda. Versi aplikasi web ditampilkan dalam output JSON dari az webapp up perintah .

File alur YAML

Penjelasan berikut menjelaskan file alur YAML. Untuk mempelajari tentang skema file YAML alur, lihat Referensi skema YAML.

Contoh lengkap file YAML alur ditunjukkan di bawah ini:

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

Variabel

Bagian berisi variables variabel berikut:

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'

Variabel Keterangan
azureServiceConnectionId ID atau nama koneksi layanan Azure Resource Manager.
webAppName Nama aplikasi web Azure App Service.
vmImageName Nama sistem operasi yang akan digunakan untuk agen build.
environmentName Nama lingkungan yang digunakan dalam tahap penyebaran. Lingkungan secara otomatis dibuat ketika pekerjaan tahap dijalankan.
projectRoot Folder akar yang berisi kode aplikasi.
pythonVersion Versi Python untuk digunakan pada agen build dan penyebaran.

Bagian berisi variables variabel berikut:

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'
Variabel Keterangan
azureServiceConnectionId Nama koneksi layanan Azure Resource Manager.
webAppName Nama aplikasi web.
environmentName Nama lingkungan yang digunakan dalam tahap penyebaran.
projectRoot Folder yang berisi kode aplikasi. Nilainya adalah variabel sistem otomatis.
pythonVersion Versi Python untuk digunakan pada agen build dan penyebaran.

Membangun tahapan

Tahap build berisi satu pekerjaan yang berjalan pada sistem operasi yang ditentukan dalam variabel vmImageName.

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

Tahap build berisi satu pekerjaan yang berjalan pada agen di kumpulan yang diidentifikasi oleh parameter nama. Anda dapat menentukan kemampuan agen dengan demands kata kunci. Misalnya, demands: python menentukan bahwa agen harus menginstal Python. Untuk menentukan agen yang dihost sendiri berdasarkan nama, Anda dapat menggunakan demands: Agent.Name -equals <agent-name> kata kunci.

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

Pekerjaan berisi beberapa langkah:

  1. Tugas UsePythonVersion memilih versi Python yang akan digunakan. Versi didefinisikan dalam pythonVersion variabel .

       - task: UsePythonVersion@0
          inputs:
            versionSpec: '$(pythonVersion)'
            displayName: 'Use Python $(pythonVersion)'
    
  2. Langkah ini menggunakan skrip untuk membuat lingkungan Python virtual dan menginstal dependensi aplikasi yang terkandung dalam requirements.txt parameter Menentukan workingDirectory lokasi kode aplikasi.

      - 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. Tugas ArchiveFiles membuat arsip .zip yang berisi aplikasi web. File .zip diunggah ke alur sebagai artefak bernama drop. File .zip digunakan dalam tahap penyebaran untuk menyebarkan aplikasi ke aplikasi web.

       - 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
    
    Parameter Keterangan
    rootFolderOrFile Lokasi kode aplikasi.
    includeRootFolder Menunjukkan apakah akan menyertakan folder akar dalam file .zip . Atur parameter ini ke false sebaliknya, konten file .zip dimasukkan ke dalam folder bernama s dan App Service di kontainer Linux tidak dapat menemukan kode aplikasi.
    archiveType Jenis arsip yang akan dibuat. Atur ke zip.
    archiveFile Lokasi file .zip yang akan dibuat.
    replaceExistingArchive Menunjukkan apakah akan mengganti arsip yang ada jika file sudah ada. Atur ke true.
    upload Lokasi file .zip untuk diunggah.
    artifact Nama artefak untuk dibuat.

Tahap penyebaran

Tahap penyebaran dijalankan jika tahap build berhasil diselesaikan. Kata kunci berikut menentukan perilaku ini:

  dependsOn: Build
  condition: succeeded()

Tahap penyebaran berisi satu pekerjaan penyebaran yang dikonfigurasi dengan kata kunci berikut:

  - deployment: DeploymentJob
    pool:
      vmImage: $(vmImageName)
    environment: $(environmentName)
Kata kunci Keterangan
deployment Menunjukkan bahwa pekerjaan tersebut adalah pekerjaan penyebaran yang menargetkan lingkungan.
pool Menentukan kumpulan agen penyebaran. Kumpulan agen default jika nama tidak ditentukan. Kata vmImage kunci mengidentifikasi sistem operasi untuk gambar komputer virtual agen
environment Menentukan lingkungan yang akan disebarkan. Lingkungan secara otomatis dibuat dalam proyek Anda saat pekerjaan dijalankan.
  - deployment: DeploymentJob
    pool:
      name: <your-pool-name>
    environment: $(environmentName)
Kata kunci Keterangan
deployment Menunjukkan bahwa pekerjaan tersebut adalah pekerjaan penyebaran yang menargetkan lingkungan.
pool Menentukan kumpulan agen yang akan digunakan untuk penyebaran. Kumpulan ini harus berisi agen dengan kemampuan untuk menjalankan versi python yang ditentukan dalam alur.
environment Menentukan lingkungan yang akan disebarkan. Lingkungan secara otomatis dibuat dalam proyek Anda saat pekerjaan dijalankan.

Kata strategy kunci digunakan untuk menentukan strategi penyebaran. Kata runOnce kunci menentukan bahwa pekerjaan penyebaran berjalan sekali. Kata deploy kunci menentukan langkah-langkah untuk dijalankan dalam pekerjaan penyebaran.

  strategy:
    runOnce:
      deploy:
        steps:

Dalam steps alur adalah:

  1. Gunakan tugas UsePythonVersion untuk menentukan versi Python yang akan digunakan pada agen. Versi didefinisikan dalam pythonVersion variabel .

     - task: UsePythonVersion@0
       inputs:
         versionSpec: '$(pythonVersion)'
       displayName: 'Use Python version'
    
  2. Sebarkan aplikasi web menggunakan AzureWebApp@1. Tugas ini menyebarkan artefak drop alur ke aplikasi web Anda.

    - task: AzureWebApp@1
       displayName: 'Deploy Azure Web App : <your-web-app-name>'
       inputs:
          azureSubscription: $(azureServiceConnectionId)
          appName: $(webAppName)
          package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
    
    Parameter Keterangan
    azureSubscription ID atau nama koneksi layanan Azure Resource Manager yang akan digunakan.
    appName Nama aplikasi web.
    package Lokasi file .zip untuk disebarkan.

    Selain itu , karena repositori python-vscode-flask-tutorial berisi perintah startup yang sama dalam file bernama startup.txt, Anda dapat menentukan file tersebut dengan menambahkan parameter: startUpCommand: 'startup.txt'.

Dalam steps alur adalah:

  1. Gunakan tugas UsePythonVersion untuk menentukan versi Python yang akan digunakan pada agen. Versi didefinisikan dalam pythonVersion variabel .

     - task: UsePythonVersion@0
       inputs:
         versionSpec: '$(pythonVersion)'
       displayName: 'Use Python version'
    
  2. Sebarkan aplikasi web menggunakan AzureWebApp@1. Tugas ini menyebarkan artefak drop alur ke aplikasi web Anda.

    - task: AzureWebApp@1
       displayName: 'Deploy Azure Web App : <your-web-app-name>'
       inputs:
          azureSubscription: $(azureServiceConnectionId)
          appName: $(webAppName)
          package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
    
    Parameter Keterangan
    azureSubscription ID atau nama koneksi layanan Azure Resource Manager yang akan digunakan.
    appName Nama aplikasi web.
    package Lokasi file .zip untuk disebarkan.

    Selain itu , karena repositori python-vscode-flask-tutorial berisi perintah startup yang sama dalam file bernama startup.txt, Anda dapat menentukan file tersebut dengan menambahkan parameter: 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'
    
    Parameter Keterangan
    azureSubscription ID atau nama koneksi layanan Azure Resource Manager yang akan digunakan.
    appName Nama aplikasi web.
    package Lokasi file .zip untuk disebarkan.
    startUpCommand Perintah yang akan dijalankan setelah aplikasi disebarkan. Aplikasi sampel menggunakan startup.txt.

Menjalankan alur

Anda sekarang siap untuk mencobanya!

  1. Di editor, pilih Simpan dan jalankan.

  2. Dalam dialog Simpan dan jalankan, tambahkan pesan penerapan lalu pilih Simpan dan jalankan.

    Anda dapat menonton alur saat berjalan dengan memilih Tahapan atau Pekerjaan dalam ringkasan eksekusi alur.

    Cuplikan layar bagian tahap ringkasan eksekusi alur.

    Ada tanda centang hijau di samping setiap tahap dan pekerjaan saat berhasil diselesaikan. Jika terjadi kesalahan, kesalahan ditampilkan dalam ringkasan atau dalam langkah-langkah pekerjaan.

    Cuplikan layar langkah-langkah tahap alur.

    Anda dapat dengan cepat kembali ke editor YAML dengan memilih titik vertikal di kanan atas halaman Ringkasan dan memilih Edit alur:

    Cuplikan layar edit komentar alur dari laporan build.

  3. Dari pekerjaan penyebaran, pilih tugas Sebarkan Azure Web App untuk menampilkan outputnya. Untuk mengunjungi situs yang disebarkan, tahan Ctrl dan pilih URL setelah App Service Application URL.

    Jika Anda menggunakan aplikasi sampel, aplikasi akan muncul sebagai berikut:

    Cuplikan layar tampilan aplikasi sampel yang berjalan di App Service.

Penting

Jika aplikasi Anda gagal karena dependensi yang hilang, maka file requirements.txt Anda tidak diproses selama penyebaran. Perilaku ini terjadi jika Anda membuat aplikasi web langsung di portal daripada menggunakan perintah seperti yang az webapp up ditunjukkan dalam artikel ini.

Perintah az webapp up secara khusus mengatur tindakan SCM_DO_BUILD_DURING_DEPLOYMENT build ke true. Jika Anda menyediakan layanan aplikasi melalui portal, tindakan ini tidak diatur secara otomatis.

Langkah-langkah berikut mengatur tindakan:

  1. Buka portal Azure, pilih App Service Anda, lalu pilih Konfigurasi.
  2. Di bawah tab Pengaturan Aplikasi, pilih Pengaturan Aplikasi Baru.
  3. Di popup yang muncul, atur Nama ke SCM_DO_BUILD_DURING_DEPLOYMENT, atur Nilai ke true, dan pilih OK.
  4. Pilih Simpan di bagian atas halaman Konfigurasi .
  5. Jalankan alur lagi. Dependensi Anda harus diinstal selama penyebaran.

Memicu proses alur

Untuk memicu eksekusi alur, terapkan perubahan ke repositori. Misalnya, Anda dapat menambahkan fitur baru ke aplikasi, atau memperbarui dependensi aplikasi.

  1. Buka repositori GitHub Anda.
  2. Buat perubahan pada kode, seperti mengubah judul aplikasi.
  3. Terapkan perubahan ke repositori Anda.
  4. Buka alur Anda dan verifikasi bahwa eksekusi baru dibuat.
  5. Setelah proses selesai, verifikasi bahwa build baru disebarkan ke aplikasi web Anda.
    1. Di portal Microsoft Azure, buka aplikasi web Anda.
    2. Pilih Pusat Penyebaran dan pilih tab Log .
    3. Verifikasi bahwa penyebaran baru tercantum.

Pertimbangan untuk Django

Anda dapat menggunakan Azure Pipelines untuk menyebarkan aplikasi Django ke Azure App Service di Linux jika Anda menggunakan database terpisah. Anda tidak dapat menggunakan database SQLite, karena App Service mengunci file db.sqlite3 , mencegah pembacaan dan penulisan. Perilaku ini tidak memengaruhi database eksternal.

Seperti yang dijelaskan dalam Mengonfigurasi aplikasi Python di App Service - Proses startup kontainer, App Service secara otomatis mencari file wsgi.py dalam kode aplikasi Anda, yang biasanya berisi objek aplikasi. Jika Anda ingin menyesuaikan perintah startup dengan cara apa pun, gunakan startUpCommand parameter di AzureWebApp@1 langkah file alur YAML Anda, seperti yang dijelaskan di bagian sebelumnya.

Saat menggunakan Django, Anda biasanya ingin memigrasikan model data menggunakan manage.py migrate setelah menyebarkan kode aplikasi. Anda dapat menambahkan startUpCommand dengan skrip pasca-penyebaran untuk tujuan ini. Misalnya, berikut startUpCommand adalah properti dalam tugas AzureWebApp@1.

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

Menjalankan pengujian pada agen build

Sebagai bagian dari proses build, Anda mungkin ingin menjalankan pengujian pada kode aplikasi Anda. Pengujian berjalan pada agen build, jadi Anda perlu menginstal dependensi Anda ke lingkungan virtual pada agen build. Setelah pengujian berjalan, hapus lingkungan virtual sebelum Anda membuat file .zip untuk penyebaran. Elemen skrip berikut mengilustrasikan proses ini. Tempatkan sebelum ArchiveFiles@2 tugas dalam file azure-pipelines.yml . Untuk informasi selengkapnya, lihat Menjalankan skrip lintas platform.

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

Anda juga dapat menggunakan tugas seperti PublishTestResults@2 untuk menerbitkan hasil pengujian ke alur Anda. Untuk informasi selengkapnya, lihat Membangun aplikasi Python - Menjalankan pengujian.

Membersihkan sumber daya

Untuk menghindari timbulnya biaya pada sumber daya Azure yang dibuat dalam tutorial ini:

  • Hapus proyek yang Anda buat. Menghapus proyek akan menghapus alur dan koneksi layanan.

  • Hapus grup sumber daya Azure yang berisi App Service dan Paket App Service. Di portal Azure, buka grup sumber daya, pilih Hapus grup sumber daya, dan ikuti perintah.

  • Hapus akun penyimpanan yang mempertahankan sistem file untuk Cloud Shell. Tutup Cloud Shell lalu buka grup sumber daya yang dimulai dengan cloud-shell-storage-, pilih Hapus grup sumber daya, dan ikuti perintah.

Langkah berikutnya