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.
- Organisasi Azure DevOps Services. Buat akun gratis.
- 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.
Ubah ke folder repositori kloning.
cd python-sample-vscode-flask-tutorial
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
Untuk melihat aplikasi, buka jendela browser dan buka http://localhost:5000. Verifikasi bahwa Anda melihat judul
Visual Studio Flask Tutorial
.Setelah selesai, tutup jendela browser dan hentikan server Flask dengan Ctrl+C.
Buka Cloud Shell
Masuk ke portal Microsoft Azure di https://portal.azure.com.
Buka Azure CLI dengan memilih tombol Cloud Shell di toolbar portal.
Cloud Shell muncul di bagian bawah browser. Pilih Bash dari menu dropdown.
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.
Kloning repositori Anda dengan perintah berikut, ganti
<repository-url>
dengan URL repositori fork Anda.git clone <repository-url>
Ubah direktori ke folder repositori kloning, sehingga
az webapp up
perintah mengenali aplikasi sebagai aplikasi Python.cd python-sample-vscode-flask-tutorial
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 menggunakanruntime_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
atauaz 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.
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 kestartup.txt
.Dari
az webapp up
output perintah, salin nilai .resourcegroup
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.
Untuk melihat aplikasi yang sedang berjalan, buka browser dan buka yang
URL
ditampilkan dalamaz webapp up
output perintah. Jika Anda melihat halaman generik, tunggu beberapa detik hingga App Service dimulai, lalu refresh halaman. Verifikasi bahwa Anda melihat judulVisual Studio Flask Tutorial
.
Membuat proyek Azure DevOps
Buat proyek Azure DevOps baru.
- Di browser, buka dev.azure.com dan masuk.
- Pilih organisasi Anda.
- Buat proyek baru dengan memilih Proyek baru atau Buat proyek jika membuat proyek pertama di organisasi.
- Masukkan Nama proyek.
- Pilih Visibilitas untuk proyek Anda.
- Pilih Buat.
- Di browser, buka Azure DevOps Server Anda.
- Pilih koleksi Anda.
- Buat proyek baru dengan memilih Proyek baru atau Buat proyek jika membuat proyek pertama dalam koleksi.
- Masukkan Nama proyek.
- Pilih Visibilitas untuk proyek Anda.
- 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 clientId
nilai , , clientSecret
subscriptionId
, 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.
Pada halaman proyek, pilih Pengaturan proyek.
Pilih Koneksi layanan di bagian Alur pada menu.
Pilih Buat koneksi layanan.
Pilih Azure Resource Manager dan pilih Berikutnya.
Pilih metode autentikasi Anda dan pilih Berikutnya.
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.
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. Pilih Simpan.
Koneksi baru muncul di daftar Koneksi layanan, dan siap digunakan di Azure Pipeline Anda.
Pada halaman proyek, pilih Pengaturan proyek.
Pilih Koneksi layanan di bagian Alur pada menu.
Pilih Buat koneksi layanan.
Pilih Azure Resource Manager dan pilih Berikutnya.
Pada Koneksi layanan Azure Baru, pilih Perwakilan layanan (manual) dan pilih Berikutnya
Pada dialog berikutnya, isi informasi yang diperlukan.
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 olehaz ad sp create-for-rbac
perintah .Kunci perwakilan layanan Nilai password
dari objek JSON yang dikembalikan olehaz ad sp create-for-rbac
perintah .Id Penyewa Nilai tenant
dari objek JSON yang dikembalikan olehaz ad sp create-for-rbac
perintah .Pilih Verifikasi untuk memverifikasi koneksi.
Masukkan nama koneksi Layanan.
Pastikan Berikan izin akses ke semua alur dipilih.
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:
Di menu navigasi kiri, pilih Alur.
Pilih Buat Saluran.
Dalam dialog Di mana kode Anda, pilih GitHub. Anda mungkin diminta untuk masuk ke GitHub.
Pada layar Pilih repositori, pilih repositori sampel fork.
Anda mungkin diminta untuk memasukkan kata sandi GitHub Anda lagi sebagai konfirmasi.
Jika ekstensi Azure Pipelines tidak diinstal di GitHub, GitHub meminta Anda untuk menginstal ekstensi Azure Pipelines .
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.
Dalam dialog Konfigurasikan alur Anda, pilih Python ke Linux Web App di Azure.
Pilih langganan Azure Anda dan pilih Lanjutkan.
Jika Anda menggunakan nama pengguna dan kata sandi untuk mengautentikasi, browser akan terbuka bagi Anda untuk masuk ke akun Microsoft Anda.
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.
Pada menu navigasi, pilih Alur.
Pilih Buat Saluran.
Dalam dialog Di mana kode Anda, pilih GitHub Enterprise Server. Anda mungkin diminta untuk masuk ke GitHub.
Pada tab Pilih repositori , pilih repositori sampel fork.
Anda mungkin diminta untuk memasukkan kata sandi GitHub Anda lagi sebagai konfirmasi.
Jika ekstensi Azure Pipelines tidak diinstal di GitHub, GitHub meminta Anda untuk menginstal ekstensi Azure Pipelines .
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.
Dalam dialog Konfigurasikan alur Anda, pilih Alur pemula.
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'
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:
Tugas UsePythonVersion memilih versi Python yang akan digunakan. Versi didefinisikan dalam
pythonVersion
variabel .- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)'
Langkah ini menggunakan skrip untuk membuat lingkungan Python virtual dan menginstal dependensi aplikasi yang terkandung dalam
requirements.txt
parameter MenentukanworkingDirectory
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"
Tugas ArchiveFiles membuat arsip .zip yang berisi aplikasi web. File
.zip
diunggah ke alur sebagai artefak bernamadrop
. 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:
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'
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:
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'
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!
Di editor, pilih Simpan dan jalankan.
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.
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.
Anda dapat dengan cepat kembali ke editor YAML dengan memilih titik vertikal di kanan atas halaman Ringkasan dan memilih Edit alur:
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:
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:
- Buka portal Azure, pilih App Service Anda, lalu pilih Konfigurasi.
- Di bawah tab Pengaturan Aplikasi, pilih Pengaturan Aplikasi Baru.
- Di popup yang muncul, atur Nama ke
SCM_DO_BUILD_DURING_DEPLOYMENT
, atur Nilai ketrue
, dan pilih OK. - Pilih Simpan di bagian atas halaman Konfigurasi .
- 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.
- Buka repositori GitHub Anda.
- Buat perubahan pada kode, seperti mengubah judul aplikasi.
- Terapkan perubahan ke repositori Anda.
- Buka alur Anda dan verifikasi bahwa eksekusi baru dibuat.
- Setelah proses selesai, verifikasi bahwa build baru disebarkan ke aplikasi web Anda.
- Di portal Microsoft Azure, buka aplikasi web Anda.
- Pilih Pusat Penyebaran dan pilih tab Log .
- 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.