Bagikan melalui


Menyebarkan aplikasi web Python ke App Service dengan menggunakan GitHub Actions (Linux)

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.

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.

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

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

    Cuplikan layar yang memperlihatkan cara membuka Azure Cloud Shell dengan menggunakan tindakan ikon di toolbar portal Microsoft Azure.

  3. Di Cloud Shell, pilih opsi Bash dari menu dropdown:

    Cuplikan layar yang memperlihatkan cara memilih opsi Bash di Cloud Shell.

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

  5. 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
    
  6. 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 mana X.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, gunakan az account list-locations --output table perintah .

  7. 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 sebelumnya az webapp up . Nama grup sumber daya menyertakan nama akun Azure diikuti dengan akhiran _rg , seperti dalam <azure-account-name>_rg_.

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

  1. Di Cloud Shell, konfirmasikan bahwa Anda berada di direktori akar untuk sistem Anda (~) dan bukan di subfolder aplikasi, seperti python-sample-vscode-flask-tutorial.

  2. 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.
  3. 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>
    
  4. Dalam output perintah, konfirmasikan nilai untuk properti repoUrl dan branch. Nilai-nilai ini harus cocok dengan nilai yang Anda tentukan dengan add 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:

Cuplikan layar yang memperlihatkan cara menampilkan Aplikasi OAuth resmi untuk akun GitHub.

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

Cuplikan layar yang memperlihatkan cara melihat rahasia tindakan untuk repositori di GitHub.

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.

  1. Di browser, buka fork repositori sampel Anda (atau repositori yang Anda gunakan), dan pilih cabang yang Anda tetapkan sebagai bagian dari pemicu:

    Cuplikan layar yang memperlihatkan cara membuka repositori dan cabang tempat alur kerja GitHub Actions ditentukan.

  2. Buat perubahan kecil pada aplikasi web Python Anda.

    Untuk tutorial Flask, berikut adalah perubahan sederhana:

    1. Pergi ke file /hello-app/templates/home.html di cabang pemicu.
    2. Pilih Sunting (ikon pensil).
    3. Di Editor, temukan pernyataan cetak <p> , dan tambahkan teks "Disebarkan ulang!"
  3. Terapkan perubahan langsung ke cabang tempat Anda bekerja.

    1. Di Editor, pilih Terapkan perubahan di kanan atas. Jendela Terapkan perubahan terbuka.
    2. 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:

  1. Buka tab Tindakan dari repositori yang disiapkan untuk penyebaran berkelanjutan.

  2. 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 ke true. Perintah az 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.