Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
Fork repositori sampel di https://github.com/Microsoft/python-sample-vscode-flask-tutorial ke akun GitHub Anda.
Kloning fork Anda ke komputer lokal Anda dengan menggunakan
git clone <your-forked-repository-url>.git.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 runUntuk menguji aplikasi, buka http://localhost:5000 di jendela browser, dan verifikasi bahwa Anda melihat judul Tutorial Visual Studio Flask.
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.
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.
Kiat
Untuk menempelkan ke Cloud Shell, gunakan Ctrl+Shift+V atau klik kanan dan pilih Tempel dari menu konteks.
Membuat dan menyebarkan aplikasi web
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>Ubah direktori ke folder repositori kloning.
cd python-sample-vscode-flask-tutorialJalankan 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. Berjalanaz webapp uptanpa 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:
- Membuat grup sumber daya default.
- Membuat paket App Service default.
-
Membuat aplikasi web dengan nama yang ditetapkan. Aplikasi
URLini adalah<your-web-app-name>.azurewebsites.net. - Menyebarkan semua file dari direktori kerja saat ini ke arsip ZIP, dengan otomatisasi build diaktifkan.
- Cache parameter secara lokal dalam file .azure/config sehingga Anda tidak perlu menentukannya lagi saat menyebarkan dari folder proyek dengan
az webapp upatau perintah lainnyaaz 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.
Pada halaman proyek Azure DevOps Anda, pilih Pengaturan proyek.
Dari Pengaturan Proyek, pilihKoneksi Layanan>.
Pada halaman Koneksi layanan, pilih Koneksi layanan baru atau Buat koneksi layanan jika koneksi layanan ini adalah yang pertama dalam proyek.
Pada layar Koneksi layanan baru , pilih Azure Resource Manager lalu pilih Berikutnya.
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.
Untuk Kredensial, pilih Federasi identitas beban kerja (otomatis).
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.
Pilih Simpan.
Pada halaman proyek Azure DevOps Anda, pilih Pengaturan proyek.
Dari Pengaturan Proyek, pilihKoneksi Layanan>.
Pada halaman Koneksi layanan, pilih Koneksi layanan baru atau Buat koneksi layanan jika koneksi layanan ini adalah yang pertama dalam proyek.
Pada layar Koneksi layanan baru , pilih Azure Resource Manager lalu pilih Berikutnya.
Pilih Perwakilan layanan (manual) lalu pilih Berikutnya.
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.
Di bagian Autentikasi , selesaikan bidang berikut ini:
-
Id Perwakilan Layanan: Masukkan nilai yang
appIddikembalikan olehaz ad sp create-for-rbacperintah . - Kredensial: Pilih Kunci perwakilan layanan.
-
Kunci perwakilan layanan: Masukkan nilai yang
passworddikembalikan olehaz ad sp create-for-rbacperintah . -
Id Penyewa: Masukkan nilai yang
tenantdikembalikan olehaz ad sp create-for-rbacperintah . - Pilih Verifikasi untuk memverifikasi koneksi.
-
Id Perwakilan Layanan: Masukkan nilai yang
Di bagian Detail , di bawah Nama Koneksi Layanan, masukkan nama untuk koneksi layanan.
Pilih kotak centang untuk Memberikan izin akses ke semua alur.
Pilih Verifikasi dan simpan.
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.
Di menu navigasi kiri untuk proyek Anda, pilih Alur.
Pada halaman Alur , pilih Alur baru, atau Buat alur jika alur ini adalah yang pertama dalam proyek.
Pada layar Di mana kode Anda , pilih GitHub. Anda mungkin diminta untuk masuk ke GitHub.
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.
Pada halaman Konfigurasikan alur Anda , pilih Python ke Linux Web App di Azure.
Pada layar berikutnya, pilih langganan Azure Anda dan pilih Lanjutkan.
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.
Di menu navigasi kiri untuk proyek Anda, pilih Alur.
Pada halaman Alur , pilih Alur baru, atau Buat alur jika alur ini adalah yang pertama dalam proyek.
Pada halaman Di mana kode Anda , pilih GitHub Enterprise Server. Anda mungkin diminta untuk masuk ke GitHub.
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.
Pada halaman Konfigurasikan alur Anda , pilih Alur pemula.
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 denganruntime_versiondari output JSON dariaz webapp upperintah .
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:
Pertama, tugas UsePythonVersion memilih versi Python yang akan digunakan, seperti yang
pythonVersiondidefinisikan dalam variabel.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)'Langkah berikutnya menggunakan skrip yang membuat lingkungan Python virtual dan menginstal dependensi aplikasi dari
requirements.txt. ParameterworkingDirectorymenentukan 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"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: trueParameter diatur sebagai berikut:
Parameter Keterangan rootFolderOrFileLokasi kode aplikasi. includeRootFolderApakah akan menyertakan folder akar dalam file .zip . Atur ke false. Jika diatur ketrue, konten file .zip dimasukkan ke dalam folder bernama s dan tugas tidak dapat menemukan kode aplikasi.archiveTypeJenis arsip yang akan dibuat. Atur ke zip.archiveFileLokasi file .zip yang akan dibuat. replaceExistingArchiveMenunjukkan apakah akan mengganti arsip yang ada jika file sudah ada. Atur ke true.File
.zipkemudian diunggah ke alur sebagai artefak bernamadrop. Tahap penyebaran menggunakan file .zip untuk menyebarkan aplikasi.- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip displayName: 'Upload package' artifact: drop- Parameter
uploadmengatur lokasi dan nama file .zip untuk diunggah. - Parameter
artifactmengatur nama artefak yang dibuat kedrop.
- Parameter
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
deploymentkunci menunjukkan bahwa pekerjaan adalah pekerjaan penyebaran yang menargetkan lingkungan untuk disebarkan.environmentsecara otomatis dibuat dalam proyek Anda saat pekerjaan dijalankan.Parameter
poolmenentukan kumpulan agen penyebaran dan menggunakan kumpulan agen default jikanametidak ditentukan. Agen berjalan pada sistem operasi yang ditentukan dalamvmImageNamevariabel, dalam halubuntu-latestini .
- deployment: DeploymentJob
pool:
name: <your-pool-name>
environment: $(environmentName)
Kata
deploymentkunci menunjukkan bahwa pekerjaan adalah pekerjaan penyebaran yang menargetkan lingkungan untuk disebarkan.environmentsecara otomatis dibuat dalam proyek Anda saat pekerjaan dijalankan.Parameter
poolmenentukan 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
runOncekunci menentukan bahwa pekerjaan penyebaran berjalan satu kali. - Kata
deploykunci menentukanstepsuntuk dijalankan dalam pekerjaan penyebaran.
Pada steps tahap ini, jalankan tugas-tugas berikut:
- UsePythonVersion@0 memilih versi Python yang akan digunakan, sama seperti pada tahap Build.
-
AzureWebApp@1 menyebarkan aplikasi web dan
dropartefak 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
azureSubscriptionberisiazureServiceConnectionIdyang ditentukan dalam variabel alur. -
appNameberisi nilaiwebAppNamevariabel. -
packagemenentukan 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.
Di editor alur, pilih Simpan dan jalankan.
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.
Anda dapat dengan cepat kembali ke editor YAML dengan memilih titik vertikal di kanan atas pada halaman Ringkasan dan memilih Edit alur.
Dari pekerjaan penyebaran, pilih tugas Sebarkan Azure Web App untuk menampilkan outputnya.
Dari output, pilih URL setelah URL Aplikasi App Service. Aplikasi akan muncul sebagai berikut:
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:
- Pada halaman portal untuk aplikasi web Anda, pilih Konfigurasi dari menu navigasi kiri.
- Pada 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 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.
- Buka repositori GitHub untuk aplikasi Anda.
- Buat perubahan pada kode, seperti mengubah judul aplikasi.
- Terapkan perubahan.
- Buka alur Anda dan verifikasi bahwa eksekusi baru dibuat dan sedang berjalan.
- Setelah proses selesai, verifikasi bahwa perubahan disebarkan ke aplikasi web Anda.
- Di portal Microsoft Azure, buka aplikasi web Anda dan pilih Pusat Penyebaran dari menu navigasi kiri.
- 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.