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.
Artikel ini menjelaskan cara menggunakan platform integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) di GitHub Actions untuk menyebarkan aplikasi web Python ke Azure App Service di Linux. Alur kerja GitHub Actions Anda secara otomatis membuat kode dan menyebarkannya ke instans App Service setiap kali ada penerapan ke repositori. Anda dapat menambahkan otomatisasi lain di alur kerja GitHub Actions, seperti skrip pengujian, pemeriksaan keamanan, dan penyebaran multistages.
Membuat repositori untuk kode aplikasi
Untuk menyelesaikan prosedur dalam artikel ini, Anda memerlukan aplikasi web Python yang berkomitmen untuk repositori GitHub.
Aplikasi yang ada: Untuk menggunakan aplikasi web Python yang ada, pastikan aplikasi berkomitmen untuk repositori GitHub.
Aplikasi baru: Jika Anda memerlukan aplikasi web Python baru, Anda dapat membuat fork dan mengkloning https://github.com/Microsoft/python-sample-vscode-flask-tutorial repositori GitHub. Kode sampel mendukung Flask dalam tutorial Visual Studio Code , dan menyediakan aplikasi Python yang berfungsi.
Nota
Jika aplikasi Anda menggunakan Django dan database SQLite , aplikasi tersebut tidak akan berfungsi untuk prosedur ini. SQLite tidak didukung di sebagian besar lingkungan yang dihosting cloud karena keterbatasan penyimpanan berbasis file lokalnya. Pertimbangkan untuk beralih ke database yang kompatibel dengan cloud seperti PostgreSQL atau Azure Cosmos DB. Untuk informasi selengkapnya, lihat Meninjau pertimbangan Django nanti di artikel ini.
Membuat instans target App Service
Cara tercepat untuk membuat instans App Service adalah dengan menggunakan antarmuka baris perintah ( CLI) Azure melalui Azure Cloud Shell interaktif. Cloud Shell menyertakan Git dan Azure CLI. Dalam prosedur berikut, Anda menggunakan perintah az webapp up untuk membuat instans App Service dan melakukan penyebaran awal aplikasi Anda.
Masuk ke portal Microsoft Azure di https://portal.azure.com.
Buka Azure CLI dengan memilih opsi Cloud Shell di toolbar portal:
Di Cloud Shell, pilih opsi Bash dari menu dropdown:
Di Cloud Shell, kloning repositori Anda dengan menggunakan perintah kloning git .
Petunjuk / Saran
Untuk menempelkan perintah atau teks ke Cloud Shell, gunakan pintasan keyboard Ctrl+Shift+V , atau klik kanan dan pilih Tempel dari menu konteks.
Untuk aplikasi sampel Flask, Anda dapat menggunakan perintah berikut.
<github-user>
Ganti bagian dengan nama akun GitHub tempat Anda membuat fork repositori:git clone https://github.com/<github-user>/python-sample-vscode-flask-tutorial.git
Jika aplikasi Anda berada di repositori yang berbeda, siapkan GitHub Actions untuk repositori tertentu. Ganti bagian
<github-user>
dengan nama akun GitHub tempat Anda membuat fork dari repositori, dan berikan nama repositori yang sebenarnya di tempat penampung<repo-name>
.git clone https://github.com/<github-user>/<repo-name>.git
Nota
Cloud Shell didukung oleh akun Azure Storage dalam grup sumber daya bernama cloud-shell-storage-your-region<>. Akun penyimpanan tersebut berisi gambar sistem file Cloud Shell, yang menyimpan repositori kloning. Ada biaya kecil untuk penyimpanan ini. Anda dapat menghapus akun penyimpanan setelah menyelesaikan artikel ini, bersama dengan sumber daya lain yang Anda buat.
Di Cloud Shell, ubah direktori ke folder repositori untuk aplikasi Python Anda, sehingga perintah az webapp up mengenali aplikasi sebagai Python. Untuk aplikasi sampel Flask, Anda menggunakan perintah berikut:
cd python-sample-vscode-flask-tutorial
Di Cloud Shell, gunakan perintah az webapp up untuk membuat instans App Service dan lakukan penyebaran awal untuk aplikasi Anda:
az webapp up --name <app-service-name> --runtime "PYTHON:3.9"
Untuk placeholder
<app-service-name>
, tentukan nama App Service yang unik di Azure. Panjang nama harus 3-60 karakter dan hanya boleh berisi huruf, angka, dan tanda hubung. Nama harus dimulai dengan huruf dan diakhiri dengan huruf atau angka.Untuk daftar runtime yang tersedia di sistem Anda, gunakan
az webapp list-runtimes
perintah .Saat Anda memasukkan nilai runtime dalam perintah, gunakan
PYTHON:X.Y
format , di manaX.Y
adalah versi utama dan minor Python.Anda juga dapat menentukan lokasi wilayah instans App Service dengan menggunakan
--location
parameter . Untuk daftar lokasi yang tersedia, gunakanaz account list-locations --output table
perintah .
Jika aplikasi Anda memiliki skrip startup kustom, gunakan perintah az webapp config untuk memulai skrip.
Jika aplikasi Anda tidak memiliki skrip startup kustom, lanjutkan ke langkah berikutnya.
Untuk aplikasi sampel Flask, Anda perlu mengakses skrip startup dalam file startup.txt dengan menjalankan perintah berikut:
az webapp config set \ --resource-group <resource-group-name> \ --name <app-service-name> \ --startup-file startup.txt
Berikan nama grup sumber daya dan nama instans App Service Anda di
<resource-group-name>
dan<app-service-name>
tempat penampung. Untuk menemukan nama grup sumber daya, periksa output dari perintah sebelumnyaaz webapp up
. Nama grup sumber daya menyertakan nama akun Azure diikuti dengan akhiran _rg , seperti dalam <azure-account-name>_rg_.
Untuk melihat aplikasi yang sedang berjalan, buka browser dan buka titik akhir penyebaran untuk instans App Service Anda. Pada URL berikut, ganti
<app-service-name>
placeholder dengan nama instans Layanan Aplikasi Anda.http://<app-service-name>.azurewebsites.net
Jika Anda melihat halaman generik, tunggu beberapa detik hingga instans App Service dimulai, dan refresh halaman.
- Jika Anda terus melihat halaman generik, konfirmasikan bahwa Anda menyebarkan dari folder yang benar.
- Untuk aplikasi sampel Flask, konfirmasikan bahwa Anda menyebarkan dari folder python-sample-vscode-flask-tutorial . Periksa juga apakah Anda mengatur perintah startup dengan benar.
Menyiapkan penyebaran berkelanjutan di App Service
Dalam prosedur berikutnya, Anda menyiapkan pengantaran berkelanjutan (CD), yang berarti penyebaran kode baru terjadi setiap kali alur kerja baru dipicu. Pemicu dalam contoh artikel adalah perubahan apa pun pada cabang utama repositori Anda, seperti dengan permintaan pull (PR).
Di Cloud Shell, konfirmasikan bahwa Anda berada di direktori akar untuk sistem Anda (
~
) dan bukan di subfolder aplikasi, seperti python-sample-vscode-flask-tutorial.Tambahkan GitHub Actions dengan perintah az webapp deployment github-actions add . Ganti placeholder apa pun dengan nilai spesifik Anda:
az webapp deployment github-actions add \ --repo "<github-user>/<github-repo>" \ --resource-group <resource-group-name> \ --branch <branch-name> \ --name <app-service-name> \ --login-with-github
Parameter
--login-with-github
menggunakan metode interaktif untuk mengambil token akses pribadi. Ikuti perintah dan selesaikan autentikasi.Jika sistem menemukan file alur kerja yang sudah ada dengan nama instans App Service yang sama, ikuti perintah untuk memilih apakah Anda ingin menimpa alur kerja tersebut. Anda dapat menggunakan
--force
parameter dengan perintah untuk menimpa alur kerja yang bertentangan secara otomatis.
Perintah
add
menyelesaikan tugas berikut:- Membuat file alur kerja baru di jalur .github/workflows/<workflow-name>.yml di repositori Anda. Nama file berisi nama instans App Service Anda.
- Mengambil profil publikasi dengan rahasia untuk instans App Service Anda dan menambahkannya sebagai rahasia tindakan GitHub. Nama rahasia dimulai dengan AZUREAPPSERVICE_PUBLISHPROFILE_. Rahasia ini direferensikan dalam file alur kerja.
Dapatkan detail konfigurasi penyebaran kontrol sumber dengan perintah az webapp deployment source show . Ganti parameter tempat penampung dengan nilai spesifik Anda:
az webapp deployment source show \ --name <app-service-name> \ --resource-group <resource-group-name>
Dalam output perintah, konfirmasikan nilai untuk properti
repoUrl
danbranch
. Nilai-nilai ini harus cocok dengan nilai yang Anda tentukan denganadd
perintah .
Memeriksa alur kerja dan tindakan GitHub
Definisi alur kerja ditentukan dalam file YAML (.yml) di jalur /.github/workflows/ di repositori Anda. File YAML ini berisi berbagai langkah dan parameter yang membentuk alur kerja, proses otomatis yang terkait dengan repositori GitHub. Anda dapat membuat, menguji, mengemas, merilis, dan menyebarkan proyek apa pun di GitHub dengan alur kerja.
Setiap alur kerja terdiri dari satu atau beberapa pekerjaan, dan setiap pekerjaan adalah serangkaian langkah. Setiap langkah adalah skrip Shell atau sebuah tindakan. Setiap pekerjaan memiliki bagian Tindakan dalam file alur kerja.
Dalam hal alur kerja yang disiapkan dengan kode Python Anda untuk penyebaran ke Azure App Service, alur kerja memiliki tindakan berikut:
Tindakan | Deskripsi |
---|---|
Checkout | Periksa repositori pada runner, agen GitHub Actions. |
setup-python | Instal Python pada runner. |
appservice-build | Buat aplikasi web. |
webapps-deploy | Sebarkan aplikasi web dengan menggunakan kredensial profil penerbitan untuk mengautentikasi di Azure. Kredensial disimpan dalam rahasia GitHub. |
Templat alur kerja yang digunakan untuk membuat alur kerja adalah Azure/actions-workflow-samples.
Alur kerja dipicu oleh push event ke cabang yang ditentukan. Peristiwa dan cabang ditentukan di awal file alur kerja. Misalnya, cuplikan kode berikut menunjukkan alur kerja dipicu pada peristiwa pendorongan ke cabang utama :
on:
push:
branches:
- main
Aplikasi yang diotorisasi oleh OAuth
Saat menyiapkan penyebaran berkelanjutan, Anda mengotorisasi Azure App Service sebagai Aplikasi OAuth resmi untuk akun GitHub Anda. App Service menggunakan akses resmi untuk membuat file YAML tindakan GitHub di jalur .github/workflows/<workflow-name>.yml di repositori Anda.
Untuk melihat aplikasi resmi Anda dan mencabut izin di bawah akun GitHub Anda, buka Pengaturan>Integrasi/Aplikasi:
Rahasia profil penerbitan alur kerja
Dalam file alur kerja .github/workflows/<workflow-name>.yml yang ditambahkan ke repositori Anda, terdapat placeholder untuk kredensial profil publikasi yang diperlukan untuk pekerjaan penyebaran alur kerja. Informasi profil penerbitan disimpan dienkripsi di repositori.
Untuk melihat rahasia, buka Pengaturan> RahasiaKeamanan> danTindakanvariabel>:
Dalam artikel ini, tindakan GitHub mengautentikasi dengan kredensial profil penerbitan. Ada cara lain untuk mengautentikasi, seperti dengan perwakilan layanan atau OpenID Connect. Untuk informasi selengkapnya, lihat Menyebarkan ke App Service menggunakan GitHub Actions.
Jalankan dan uji alur kerja
Langkah terakhir adalah menguji alur kerja dengan membuat perubahan pada repositori.
Di browser, buka fork repositori sampel Anda (atau repositori yang Anda gunakan), dan pilih cabang yang Anda tetapkan sebagai bagian dari pemicu:
Buat perubahan kecil pada aplikasi web Python Anda.
Untuk tutorial Flask, berikut adalah perubahan sederhana:
- Pergi ke file /hello-app/templates/home.html di cabang pemicu.
- Pilih Sunting (ikon pensil).
- Di Editor, temukan pernyataan cetak
<p>
, dan tambahkan teks "Disebarkan ulang!"
Terapkan perubahan langsung ke cabang tempat Anda bekerja.
- Di Editor, pilih Terapkan perubahan di kanan atas. Jendela Terapkan perubahan terbuka.
- Di jendela Terapkan perubahan , ubah pesan penerapan sesuai keinginan, dan pilih Terapkan perubahan.
Proses penerapan memicu alur kerja GitHub Actions.
Anda juga dapat memicu alur kerja secara manual:
Buka tab Tindakan dari repositori yang disiapkan untuk penyebaran berkelanjutan.
Pilih alur kerja dalam daftar alur kerja, lalu pilih Jalankan alur kerja.
Memecahkan masalah alur kerja yang gagal
Anda dapat memeriksa status alur kerja pada tab Tindakan untuk repositori aplikasi. Saat Anda memeriksa file alur kerja yang dibuat dalam artikel ini, Anda akan melihat dua pekerjaan: membangun dan menyebarkan. Sebagai pengingat, alur kerja didasarkan pada templat Azure/actions-workflow-samples .
Untuk pekerjaan yang gagal, lihat output tugas pekerjaan untuk indikasi kegagalan.
Berikut adalah beberapa masalah umum untuk diselidiki:
Jika aplikasi gagal karena dependensi yang hilang, file requirements.txt Anda tidak diproses saat penyebaran. Perilaku ini terjadi jika Anda membuat aplikasi web langsung di portal alih-alih menggunakan perintah seperti yang telah ditunjukkan dalam artikel ini.
Jika Anda menyediakan layanan aplikasi melalui portal, pengaturan tindakan build
SCM_DO_BUILD_DURING_DEPLOYMENT
mungkin belum disetel. Pengaturan ini harus diatur ketrue
. Perintahaz webapp up
mengatur tindakan build secara otomatis.Jika Anda melihat pesan kesalahan mengenai "Batas waktu jabat tangan TLS", jalankan alur kerja secara manual dengan memilih Picu penyebaran otomatis di bawah tab Tindakan repositori aplikasi. Anda dapat menentukan apakah batas waktu merupakan masalah sementara.
Jika Anda menyiapkan penyebaran berkelanjutan untuk aplikasi kontainer seperti yang ditunjukkan dalam artikel ini, file alur kerja awal .github/workflows/<workflow-name>.yml dibuat secara otomatis untuk Anda. Jika Anda memodifikasi file, hapus modifikasi untuk melihat apakah file tersebut menyebabkan kegagalan.
Menjalankan skrip pasca-penyebaran
Skrip pasca-penyebaran dapat menyelesaikan beberapa tugas, seperti menentukan variabel lingkungan yang diharapkan oleh kode aplikasi. Anda menambahkan skrip sebagai bagian dari kode aplikasi dan menjalankan skrip dengan menggunakan perintah startup.
Untuk menghindari nilai variabel yang di-hardcode dalam file YAML alur kerja Anda, pertimbangkan untuk mengonfigurasi variabel-variabel tersebut di GitHub dan menggunakan nama variabel dalam skrip. Anda dapat membuat rahasia terenkripsi untuk repositori atau untuk lingkungan (repositori akun). Untuk informasi selengkapnya, lihat Menggunakan rahasia di GitHub Actions.
Meninjau pertimbangan Django
Seperti disebutkan sebelumnya dalam artikel ini, Anda dapat menggunakan GitHub Actions 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 , yang mencegah pembacaan dan penulisan. Perilaku ini tidak memengaruhi database eksternal.
Artikel Mengonfigurasi aplikasi Python di App Service - Proses startup Kontainer menjelaskan bagaimana App Service secara otomatis mencari file wsgi.py dalam kode aplikasi Anda, yang biasanya berisi objek aplikasi. Saat Anda menggunakan webapp config set
perintah untuk mengatur perintah startup, Anda menggunakan --startup-file
parameter untuk menentukan file yang berisi objek aplikasi. Perintah webapp config set
tidak tersedia dalam tindakan webapps-deploy. Sebagai gantinya, Anda dapat menggunakan parameter startup-command
untuk menentukan perintah startup. Misalnya, kode berikut menunjukkan cara menentukan perintah startup dalam file alur kerja:
startup-command: startup.txt
Saat menggunakan Django, Anda biasanya ingin memigrasikan model data dengan menggunakan python manage.py migrate
perintah setelah Anda menyebarkan kode aplikasi. Anda dapat menjalankan perintah migrasi dalam skrip pasca-penyebaran.
Putuskan Sambungan GitHub Actions
Memutus GitHub Actions dari instans App Service memungkinkan Anda menjalankan konfigurasi ulang penyebaran aplikasi. Anda dapat memilih apa yang terjadi pada file alur kerja setelah Anda memutuskan sambungan, dan apakah akan menyimpan atau menghapus file.
Putuskan sambungan GitHub Actions dengan perintah Azure CLI az webapp deployment github-actions remove berikut. Ganti placeholder apa pun dengan nilai-nilai khusus Anda.
az webapp deployment github-actions remove \
--repo "<github-username>/<github-repo>" \
--resource-group <resource-group-name> \
--branch <branch-name> \
--name <app-service-name> \
--login-with-github
Membersihkan sumber daya
Untuk menghindari dikenakan biaya pada sumber daya Azure yang dibuat dalam artikel ini, hapus grup sumber daya yang berisi instans App Service dan Paket App Service.
Di mana saja Azure CLI diinstal, termasuk Azure Cloud Shell, Anda dapat menggunakan perintah az group delete untuk menghapus grup sumber daya:
az group delete --name <resource-group-name>
Menghapus akun penyimpanan
Untuk menghapus akun penyimpanan yang mempertahankan sistem file untuk Cloud Shell, yang dikenakan biaya bulanan kecil, hapus grup sumber daya yang dimulai dengan cloud-shell-storage-. Jika Anda satu-satunya pengguna grup, aman untuk menghapus grup sumber daya. Jika ada pengguna lain, Anda dapat menghapus akun penyimpanan di grup sumber daya.
Memperbarui akun gitHub dan repositori
Jika Anda menghapus grup sumber daya Azure, pertimbangkan untuk melakukan modifikasi berikut ke akun GitHub dan repositori yang tersambung untuk penyebaran berkelanjutan:
- Di repositori aplikasi, hapus file .github/workflows/<workflow-name>.yml .
- Di pengaturan repositori aplikasi, hapus kunci rahasia AZUREAPPSERVICE_PUBLISHPROFILE_ yang dibuat untuk alur kerja.
- Di pengaturan akun GitHub, hapus Azure App Service sebagai Aplikasi Oauth resmi untuk akun GitHub Anda.