Bagikan melalui


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

Layanan Azure DevOps

Tutorial ini menunjukkan kepada Anda cara menggunakan 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 kode aplikasi Anda.

Di tutorial ini, Anda akan:

  • Buat aplikasi web Python dan unggah ke Azure App Service.
  • Sambungkan proyek Azure DevOps Anda ke Azure.
  • Buat alur build dan penyebaran khusus Azure Pipelines Python untuk aplikasi Anda.
  • Jalankan alur untuk membangun, menguji, dan menyebarkan ke aplikasi web Azure App Service Anda.
  • Atur pemicu untuk menjalankan alur setiap kali Anda berkomitmen ke repositori Anda.

Untuk memahami selengkapnya tentang konsep Azure Pipelines, tonton video berikut:

Prasyarat

Produk Persyaratan
Azure DevOps - Proyek Azure DevOps.
- Kemampuan untuk menjalankan pipeline pada agen yang di-host oleh Microsoft. Anda dapat membeli pekerjaan paralel atau Anda dapat meminta tingkat layanan gratis.
- Pengetahuan dasar tentang YAML dan Azure Pipelines. Untuk informasi selengkapnya, lihat Buat pipa pertama Anda.
- Izin:
     - Untuk membuat alur: Anda harus berada di grup Kontributor dan grup harus mengatur izin Buat alur build ke Izinkan. Anggota grup Administrator Proyek dapat mengelola alur.
    - Untuk membuat koneksi layanan: Anda harus memiliki peran Administrator atau Creator untuk koneksi layanan .
GitHub - Akun GitHub.
- Koneksi layanan GitHub untuk mengotorisasi Azure Pipelines.
Azure Sebuah langganan Azure.
Produk Persyaratan
Azure DevOps - Proyek Azure DevOps.
- Agen mandiri. Untuk membuatnya, lihat Agen yang di-host sendiri.
- Pengetahuan dasar tentang YAML dan Azure Pipelines. Untuk informasi selengkapnya, lihat Buat pipa pertama Anda.
- Izin:
    - Untuk membuat alur: Anda harus berada di grup Kontributor dan grup harus mengatur izin Buat alur build ke Izinkan. Anggota grup Administrator Proyek dapat mengelola alur.
    - Untuk membuat koneksi layanan: Anda harus memiliki peran Administrator atau Creator untuk koneksi layanan .
GitHub - Akun GitHub.
- Koneksi layanan GitHub untuk mengotorisasi Azure Pipelines.
Azure Sebuah langganan Azure.

Mengonfigurasi agen yang dihost sendiri

Mengunduh versi Python tidak didukung pada agen build yang dihost sendiri. Untuk menggunakan agen yang dihost sendiri, Anda perlu mengonfigurasi agen untuk menjalankan Python.

Untuk menghindari masalah kompatibilitas, cocokkan versi Python dengan versi runtime di aplikasi web Azure App Services Anda, 3.11 dalam hal ini. Anda harus menginstal versi Python sebelumnya. Gunakan alat penginstal lengkap untuk mendapatkan versi Python yang kompatibel dengan pip.

Versi Python yang diinginkan perlu ditambahkan ke cache alat pada agen yang dihost sendiri sehingga tugas alur dapat menggunakannya. Biasanya, cache alat terletak di bawah direktori _work/_tool agen. Atau, Anda dapat mengambil alih jalur dengan variabel AGENT_TOOLSDIRECTORYlingkungan . 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. {platform}.complete harus berupa sebuah file 0-byte yang terlihat seperti x86.complete atau x64.complete dan hanya menandakan bahwa alat telah diinstal dengan benar di cache.

Misalnya, untuk menggunakan Python 3.11 pada komputer Windows 64-bit, buat struktur direktori berikut:

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

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

Menyiapkan aplikasi sampel

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

  2. Kloning fork Anda ke komputer lokal Anda dengan menggunakan git clone <your-forked-repository-url>.git.

  3. Buka klon lokal Anda dengan menggunakan cd python-sample-vscode-flask-tutorial, dan buat dan jalankan aplikasi secara lokal untuk memastikannya berfungsi.

    python -m venv .env
    source .env/Scripts/activate
    pip install --upgrade pip
    pip install -r ./requirements.txt
    export FLASK_APP=hello_app.webapp
    flask run
    
  4. Untuk menguji aplikasi, buka http://localhost:5000 di jendela browser, dan verifikasi bahwa Anda melihat judul Tutorial Visual Studio Flask.

  5. Tutup jendela browser dan hentikan server Flask dengan menggunakan Ctrl+C.

Membuat dan menyebarkan aplikasi web App Service

Buat aplikasi web Azure App Service Anda dengan menggunakan Cloud Shell di portal Microsoft Azure. Untuk menggunakan Cloud Shell, masuk ke portal Microsoft Azure dan pilih tombol Cloud Shell pada toolbar.

Cuplikan layar tombol Azure Cloud Shell pada toolbar portal Azure.

Cloud Shell muncul di bagian bawah browser. Pastikan Bash dipilih sebagai lingkungan di menu dropdown. Anda dapat memaksimalkan jendela Cloud Shell untuk memberi diri Anda lebih banyak ruang.

Cuplikan layar Azure Cloud Shell.

Kiat

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

Membuat dan menyebarkan aplikasi web

  1. Di Cloud Shell, klon repositori fork Anda ke Azure dengan perintah berikut, mengganti <your-forked-repository-url> dengan URL repositori fork Anda.

    git clone <your-forked-repository-url>
    
  2. Ubah direktori ke folder repositori kloning.

    cd python-sample-vscode-flask-tutorial
    
  3. Jalankan perintah az webapp up untuk menyediakan aplikasi web App Service dan lakukan penyebaran pertama. --name <your-web-app-name> Gunakan parameter untuk menetapkan nama yang unik di seluruh Azure, seperti nama pribadi atau perusahaan bersama dengan pengidentifikasi aplikasi, seperti --name <your-name>-flaskpipelines. Berjalan az webapp up tanpa parameter menetapkan nama aplikasi web yang dihasilkan secara acak yang unik di Azure.

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

Perintah mengenali az webapp up aplikasi sebagai aplikasi Python, dan mengambil tindakan berikut:

  1. Membuat grup sumber daya default.
  2. Membuat paket App Service default.
  3. Membuat aplikasi web dengan nama yang ditetapkan. Aplikasi URL ini adalah <your-web-app-name>.azurewebsites.net.
  4. Menyebarkan semua file dari direktori kerja saat ini ke arsip ZIP, dengan otomatisasi build diaktifkan.
  5. Cache parameter secara lokal dalam file .azure/config sehingga Anda tidak perlu menentukannya lagi saat menyebarkan dari folder proyek dengan az webapp up atau perintah lainnya az webapp . Perintah menggunakan nilai yang di-cache secara otomatis secara default.

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

Perintah az webapp up menghasilkan output JSON berikut untuk contoh aplikasi web:

{
  "URL": <your-web-app-url>,
  "appserviceplan": <your-app-service-plan-name>,
  "location": <your-azure-region>,
  "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>
}

URLRekam nilai , resourcegroup, dan runtime_version untuk digunakan nanti dalam tutorial ini.

Mengatur perintah startup

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 dengan memasukkan perintah berikut, menggunakan grup sumber daya dan nama aplikasi web Anda.

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

Saat perintah selesai, output JSON menampilkan semua pengaturan konfigurasi untuk aplikasi web Anda.

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

Menyambungkan proyek Azure DevOps Anda ke langganan Azure Anda

Untuk menggunakan Azure Pipelines untuk menyebarkan ke aplikasi web Azure App Service, Anda perlu menyambungkan proyek Azure DevOps ke sumber daya Azure Anda.

Membuat prinsipal layanan

Perwakilan layanan adalah identitas yang dibuat untuk 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 di tingkat mana.

Untuk membuat perwakilan layanan, jalankan perintah berikut di Bash Cloud Shell. Ganti <service-principal-name> dengan nama untuk perwakilan layanan Anda, <your-subscription-id> dengan ID langganan Azure 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 berikut:

{
  "appId": "<client GUID>",
  "displayName": "<service-principal-name">,
  "password": "<password-string>",
  "tenant": "<tenant GUID>"
  ...
}

Catat appIdnilai , , passworddan tenantId yang akan digunakan untuk membuat koneksi layanan di bagian berikutnya.

Membuat koneksi layanan

Koneksi layanan 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 untuk aplikasi web Anda.

  1. Pada halaman proyek Azure DevOps Anda, pilih Pengaturan proyek.

  2. Dari Pengaturan Proyek, pilihKoneksi Layanan>.

  3. Pada halaman Koneksi layanan, pilih Koneksi layanan baru atau Buat koneksi layanan jika koneksi layanan ini adalah yang pertama dalam proyek.

    Cuplikan layar memilih koneksi Layanan Alur di Pengaturan Proyek.

  4. Pada layar Koneksi layanan baru , pilih Azure Resource Manager lalu pilih Berikutnya.

    Cuplikan layar pemilihan koneksi layanan Azure Resource Manager.

  5. Pada layar Koneksi layanan Azure Baru , pilih Jenis identitas Anda. Contoh ini menggunakan Pendaftaran aplikasi (otomatis), yang direkomendasikan. Untuk informasi selengkapnya tentang metode autentikasi, lihat Menyambungkan ke Azure dengan menggunakan koneksi layanan Azure Resource Manager.

  6. Untuk Kredensial, pilih Federasi identitas beban kerja (otomatis).

  7. Selesaikan bidang berikut:

    • Tingkat cakupan: Pilih Langganan.
    • Langganan: Pilih langganan Azure Anda.
    • Grup sumber daya: Pilih grup sumber daya yang berisi aplikasi web Anda.
    • Nama Koneksi Layanan: Masukkan nama deskriptif untuk koneksi.
    • Berikan izin akses ke semua alur: Pilih kotak centang ini untuk memberikan akses ke semua alur dalam proyek.
  8. Pilih Simpan.

    Cuplikan layar kotak dialog Koneksi layanan Azure Baru.

  1. Pada halaman proyek Azure DevOps Anda, pilih Pengaturan proyek.

  2. Dari Pengaturan Proyek, pilihKoneksi Layanan>.

  3. Pada halaman Koneksi layanan, pilih Koneksi layanan baru atau Buat koneksi layanan jika koneksi layanan ini adalah yang pertama dalam proyek.

    Cuplikan layar tombol pengaturan proyek di dasbor proyek.

  4. Pada layar Koneksi layanan baru , pilih Azure Resource Manager lalu pilih Berikutnya.

    Cuplikan layar yang memperlihatkan pilihan Azure Resource Manager.

  5. Pilih Perwakilan layanan (manual) lalu pilih Berikutnya.

    Cuplikan layar yang memperlihatkan pemilihan metode autentikasi manual untuk prinsip layanan.

  6. Pada layar Koneksi layanan Azure Baru , selesaikan bidang berikut ini:

    • Lingkungan: Pilih Azure Cloud.
    • Tingkat Cakupan: Pilih Langganan.
    • Id Langganan: Masukkan ID langganan Azure Anda.
    • Nama Langganan: Masukkan nama langganan Azure Anda.
  7. Di bagian Autentikasi , selesaikan bidang berikut ini:

    • Id Perwakilan Layanan: Masukkan nilai yang appId dikembalikan oleh az ad sp create-for-rbac perintah .
    • Kredensial: Pilih Kunci perwakilan layanan.
    • Kunci perwakilan layanan: Masukkan nilai yang password dikembalikan oleh az ad sp create-for-rbac perintah .
    • Id Penyewa: Masukkan nilai yang tenant dikembalikan oleh az ad sp create-for-rbac perintah .
    • Pilih Verifikasi untuk memverifikasi koneksi.
  8. Di bagian Detail , di bawah Nama Koneksi Layanan, masukkan nama untuk koneksi layanan.

  9. Pilih kotak centang untuk Memberikan izin akses ke semua alur.

  10. Pilih Verifikasi dan simpan.

    Cuplikan layar bagian atas layar koneksi layanan baru.

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

Buat alur

Buat alur untuk membangun dan menyebarkan aplikasi web Python Anda ke Azure App Service.

  1. Di menu navigasi kiri untuk proyek Anda, pilih Alur.

  2. Pada halaman Alur , pilih Alur baru, atau Buat alur jika alur ini adalah yang pertama dalam proyek.

    Cuplikan layar tombol alur baru pada daftar alur.

  3. Pada layar Di mana kode Anda , pilih GitHub. Anda mungkin diminta untuk masuk ke GitHub.

    Cuplikan layar memilih GitHub sebagai lokasi kode Anda.

  4. Pada layar Pilih sebuah repositori, pilih repositori sampel fork Anda. GitHub mungkin meminta Anda untuk memasukkan kata sandi GitHub Anda lagi, atau untuk menginstal aplikasi GitHub Azure Pipelines . Ikuti petunjuk di layar untuk menginstal aplikasi. Untuk informasi selengkapnya, lihat Autentikasi aplikasi GitHub.

    Cuplikan layar pemilihan repositori.

  5. Pada halaman Konfigurasikan alur Anda , pilih Python ke Linux Web App di Azure.

  6. Pada layar berikutnya, pilih langganan Azure Anda dan pilih Lanjutkan.

  7. Pada layar berikutnya, pilih aplikasi web Azure Anda dan pilih Validasi dan konfigurasikan.

Azure Pipelines membuat file azure-pipelines.yml dan menampilkannya di editor alur YAML.

  1. Di menu navigasi kiri untuk proyek Anda, pilih Alur.

  2. Pada halaman Alur , pilih Alur baru, atau Buat alur jika alur ini adalah yang pertama dalam proyek.

    Cuplikan layar tombol alur baru pada daftar alur.

  3. Pada halaman 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 Anda. GitHub mungkin meminta Anda untuk memasukkan kata sandi GitHub Anda lagi atau menginstal ekstensi atau aplikasi GitHub Azure Pipelines . Ikuti petunjuk di layar untuk menginstal aplikasi. Untuk informasi selengkapnya, lihat Akses ke repositori GitHub.

    Cuplikan layar pemilihan repositori.

  5. Pada halaman Konfigurasikan alur Anda , pilih Alur pemula.

  6. Pada halaman Tinjau YAML alur Anda , ganti konten file azure-pipelines.yml starter dengan file alur YAML berikut. Dalam file YAML:

    • <your-service-connection-name> Ganti tempat penampung dan <your-web-app-name> dengan nilai Anda sendiri.

    • Ganti <your-pool-name> dengan nama kumpulan agen yang ingin Anda gunakan, dan ganti <your-python-version> dengan versi Python yang berjalan di agen Anda. Versi ini harus cocok dengan runtime_version dari output JSON dari az webapp up perintah .

File alur YAML

Pada halaman Tinjau YAML alur Anda , lihat alur untuk melihat apa yang dilakukannya. Pastikan semua input default sesuai untuk kode Anda. Untuk mempelajari tentang skema file YAML alur, lihat referensi skema YAML.

Contoh lengkap file alur YAML berikut mendefinisikan alur CI/CD Anda sebagai serangkaian tahapan, pekerjaan, dan langkah-langkah, di mana setiap langkah berisi detail untuk tugas dan skrip yang berbeda. Kode YAML yang dihasilkan secara otomatis mengisi tempat penampung dengan nilai untuk aplikasi dan koneksi Anda.

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

Variabel

Bagian variables di awal file YAML menentukan variabel berikut:

Variabel Keterangan
azureServiceConnectionId ID koneksi layanan Azure Resource Manager.
webAppName Nama aplikasi web App Service.
vmImageName Nama sistem operasi yang akan digunakan untuk agen build.
environmentName Nama lingkungan yang akan disebarkan, yang secara otomatis dibuat saat pekerjaan penyebaran berjalan.
projectRoot Folder akar yang berisi kode aplikasi.
pythonVersion Versi Python yang digunakan pada agen build dan penyebaran.
Variabel Keterangan
azureServiceConnectionId ID koneksi layanan Azure Resource Manager.
webAppName Nama aplikasi web App Service.
environmentName Nama lingkungan yang akan disebarkan, yang secara otomatis dibuat saat pekerjaan penyebaran berjalan.
projectRoot Folder yang berisi kode aplikasi. Nilainya adalah variabel sistem otomatis.
pythonVersion Versi Python yang digunakan pada agen build dan penyebaran.

Tahap build dan deployment

Alur terdiri dari tahap build dan penyebaran.

Tahap pembangunan

Tahap build berisi satu pekerjaan yang berjalan pada sistem operasi yang ditentukan dalam vmImageName variabel, dalam hal ubuntu-latestini .

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

Tahap build berisi satu pekerjaan yang berjalan pada agen dalam yang pool diidentifikasi oleh name parameter .

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

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

Pekerjaan berisi beberapa langkah:

  1. Pertama, tugas UsePythonVersion memilih versi Python yang akan digunakan, seperti yang pythonVersion didefinisikan dalam variabel.

       - task: UsePythonVersion@0
          inputs:
            versionSpec: '$(pythonVersion)'
            displayName: 'Use Python $(pythonVersion)'
    
  2. Langkah berikutnya menggunakan skrip yang membuat lingkungan Python virtual dan menginstal dependensi aplikasi dari requirements.txt. Parameter workingDirectory menentukan lokasi kode aplikasi.

       - script: |
            python -m venv antenv
            source antenv/bin/activate
            python -m pip install --upgrade pip
            pip install setuptools
            pip install  -r ./requirements.txt
          workingDirectory: $(projectRoot)
          displayName: "Install requirements"
    
  3. Tugas ArchiveFiles membuat arsip ZIP yang berisi aplikasi web bawaan.

        - task: ArchiveFiles@2
          displayName: 'Archive files'
          inputs:
            rootFolderOrFile: '$(projectRoot)'
            includeRootFolder: false
            archiveType: zip
            archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
            replaceExistingArchive: true
    

    Parameter diatur sebagai berikut:

    Parameter Keterangan
    rootFolderOrFile Lokasi kode aplikasi.
    includeRootFolder Apakah akan menyertakan folder akar dalam file .zip . Atur ke false. Jika diatur ke true, konten file .zip dimasukkan ke dalam folder bernama s dan tugas 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.
  4. File .zip kemudian diunggah ke alur sebagai artefak bernama drop. Tahap penyebaran menggunakan file .zip untuk menyebarkan aplikasi.

        - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
          displayName: 'Upload package'
          artifact: drop
    
    • Parameter upload mengatur lokasi dan nama file .zip untuk diunggah.
    • Parameter artifact mengatur nama artefak yang dibuat ke drop.

Tahap penyebaran

Tahap penyebaran berjalan jika tahap build berhasil diselesaikan. Kata dependsOn kunci dan condition menentukan perilaku ini.

  dependsOn: Build
  condition: succeeded()

Tahap penyebaran berisi satu pekerjaan penyebaran yang dikonfigurasi sebagai berikut.

  - deployment: DeploymentJob
    pool:
      vmImage: $(vmImageName)
    environment: $(environmentName)
  • Kata deployment kunci menunjukkan bahwa pekerjaan adalah pekerjaan penyebaran yang menargetkan lingkungan untuk disebarkan. environment secara otomatis dibuat dalam proyek Anda saat pekerjaan dijalankan.

  • Parameter pool menentukan kumpulan agen penyebaran dan menggunakan kumpulan agen default jika name tidak ditentukan. Agen berjalan pada sistem operasi yang ditentukan dalam vmImageName variabel, dalam hal ubuntu-latestini .

  - deployment: DeploymentJob
    pool:
      name: <your-pool-name>
    environment: $(environmentName)
  • Kata deployment kunci menunjukkan bahwa pekerjaan adalah pekerjaan penyebaran yang menargetkan lingkungan untuk disebarkan. environment secara otomatis dibuat dalam proyek Anda saat pekerjaan dijalankan.

  • Parameter pool menentukan kumpulan agen penyebaran dan harus berisi agen dengan kemampuan untuk menjalankan versi Python yang ditentukan dalam alur.

Kata strategy kunci mendefinisikan strategi penyebaran.

  strategy:
    runOnce:
      deploy:
        steps:
  • Kata runOnce kunci menentukan bahwa pekerjaan penyebaran berjalan satu kali.
  • Kata deploy kunci menentukan steps untuk dijalankan dalam pekerjaan penyebaran.

Pada steps tahap ini, jalankan tugas-tugas berikut:

  1. UsePythonVersion@0 memilih versi Python yang akan digunakan, sama seperti pada tahap Build.
  2. AzureWebApp@1 menyebarkan aplikasi web dan drop artefak ZIP.
- 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 azureSubscription berisi azureServiceConnectionId yang ditentukan dalam variabel alur.
  • appName berisi nilai webAppName variabel.
  • package menentukan nama dan lokasi file .zip untuk disebarkan.

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

Menjalankan rangkaian proses

Anda sekarang siap untuk mencoba alur.

  1. Di editor alur, pilih Simpan dan jalankan.

  2. Pada layar Simpan dan jalankan , tambahkan pesan penerapan jika diinginkan lalu pilih Simpan dan jalankan.

    Anda dapat menonton eksekusi alur dengan memilih Tahapan atau Pekerjaan di halaman Ringkasan alur. Setiap pekerjaan dan tahap menampilkan tanda centang hijau saat berhasil diselesaikan. Jika terjadi kesalahan, kesalahan muncul di ringkasan atau di langkah-langkah pekerjaan.

    Cuplikan layar bagian ringkasan tahap alur.

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

    Cuplikan layar komentar dari alur pengeditan di laporan build.

  3. Dari pekerjaan penyebaran, pilih tugas Sebarkan Azure Web App untuk menampilkan outputnya.

    Cuplikan layar langkah-langkah tahap alur.

  4. Dari output, pilih URL setelah URL Aplikasi App Service. Aplikasi akan muncul sebagai berikut:

    Cuplikan layar tampilan aplikasi sampel yang berjalan di App Service.

Catatan

Jika penyebaran aplikasi gagal karena dependensi yang hilang, file requirements.txt tidak diproses selama penyebaran. Masalah ini dapat terjadi jika Anda membuat aplikasi web langsung di portal daripada menggunakan az webapp up perintah .

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.

Untuk mengatur tindakan ini:

  1. Pada halaman portal untuk aplikasi web Anda, pilih Konfigurasi dari menu navigasi kiri.
  2. Pada 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 pipeline lagi. Dependensi sekarang harus diinstal selama penyebaran.

Memicu eksekusi jalur pipa

Alur ini diatur untuk dijalankan setiap kali perubahan masuk ke repositori kode. Untuk memicu eksekusi alur, terapkan perubahan ke repositori. Misalnya, Anda dapat menambahkan fitur baru ke aplikasi, atau memperbarui dependensi aplikasi.

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

Menyebarkan aplikasi Django ke App Service

Anda dapat menggunakan Azure Pipelines untuk menyebarkan aplikasi Django ke 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 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, gunakan startUpCommand parameter di AzureWebApp@1 langkah file alur YAML Anda.

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 adalah properti startUpCommand 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 pengujian sebelum Anda membuat file .zip untuk penyebaran.

Elemen skrip berikut mengilustrasikan proses ini. Tempatkan mereka sebelum tugas ArchiveFiles@2 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 Menjalankan pengujian.

Membersihkan sumber daya

Jika Anda sudah selesai dengan sumber daya Azure yang Anda buat dalam tutorial ini, hapus sumber daya tersebut untuk menghindari dikenakan biaya lebih lanjut.

  • Hapus proyek Azure DevOps 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 Azure yang mempertahankan sistem file Cloud Shell. Tutup Cloud Shell, lalu temukan grup sumber daya yang dimulai dengan cloud-shell-storage-. Pilih Hapus grup sumber daya, dan ikuti perintah.