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.
Halaman ini menjelaskan cara mengotomatiskan penyebaran aplikasi Databricks dari GitHub menggunakan GitHub Actions dan Declarative Automation Bundles. Ini mencakup federasi identitas beban kerja, YAML alur kerja, dan pemeriksaan kesehatan yang mengonfirmasi bahwa aplikasi melayani kode terbaru setelah setiap penyebaran.
Untuk panduan GitHub Actions generik untuk pekerjaan dan alur Azure Databricks, lihat GitHub Actions. Untuk menyiapkan federasi identitas workload, lihat Aktifkan federasi identitas workload untuk GitHub Actions.
Requirements
- Prinsipal layanan di akun Azure Databricks Anda yang memiliki aplikasi yang di-deploy. Lihat Menambahkan perwakilan layanan ke akun Anda.
- Konfigurasi bundel
databricks.ymldi akar repositori GitHub Anda yang mendeklarasikan aplikasi sebagai sumber daya. Lihat aplikasi. - Databricks CLI diinstal secara lokal untuk tugas penyiapan satu kali. Lihat Menginstal atau memperbarui Databricks CLI.
Langkah 1. Konfigurasikan federasi identitas beban kerja
Federasi identitas beban kerja memungkinkan runner GitHub Actions mengautentikasi dengan Azure Databricks menggunakan token OIDC berumur pendek alih-alih menyimpan kredensial di repositori Anda.
Ikuti langkah-langkah di Aktifkan federasi identitas beban kerja untuk GitHub Actions guna membuat kebijakan federasi GitHub Actions pada perwakilan layanan Anda. Perhatikan ID aplikasi perwakilan layanan (UUID) dan URL ruang kerja Anda. Anda memerlukan keduanya sebagai variabel dalam alur kerja.
Kemudian berikan prinsipal layanan CAN MANAGE izin pada aplikasi tersebut, atau izin ruang kerja untuk membuat aplikasi jika aplikasi tersebut belum ada. Lihat Mengonfigurasi izin untuk aplikasi Databricks.
Langkah 2. Konfigurasikan repositori GitHub
Di repositori GitHub Anda, buat lingkungan penyebaran untuk menyimpan variabel koneksi ruang kerja. Menggunakan lingkungan juga memungkinkan Anda memerlukan persetujuan manual sebelum penyebaran dijalankan.
- DiLingkungan>, buat lingkungan bernama
prod(atau nama apa pun referensi alur kerja Anda). - Untuk variabel Lingkungan, tambahkan yang berikut ini:
| Variabel | Value |
|---|---|
DATABRICKS_HOST |
URL ruang kerja Anda, misalnya https://my-workspace.cloud.databricks.com |
DATABRICKS_CLIENT_ID |
ID aplikasi prinsipal layanan dari Langkah 1 |
Kedua nilai tersebut bukan kredensial. Kebijakan federasi pada service principal menentukan siapa yang dapat melakukan autentikasi sebagai service principal tersebut, sehingga ID klien saja tidak otomatis memberikan akses. Anda tidak memerlukan rahasia klien.
Langkah 3. Mengonfigurasi bundel Anda untuk penyebaran produksi
Di databricks.yml, deklarasikan ruang host kerja eksplisit dan root_path pada target Anda prod . Ini memastikan bundel disebarkan ke lokasi yang sama pada setiap proses. Validasi mode produksi memerlukan kedua kolom kecuali run_as disetel ke service principal. Lihat Mode penyebaran Bundel Otomatisasi Deklaratif.
targets:
prod:
mode: production
workspace:
host: https://my-workspace.cloud.databricks.com
root_path: /Workspace/Users/<service-principal-or-owner>/.bundle/${bundle.name}/${bundle.target}
resources:
apps:
my_app:
name: my-app
source_code_path: ./app
Ganti <service-principal-or-owner> dengan pengguna ruang kerja yang memiliki artefak bundel, yang biasanya berupa ID aplikasi prinsipal layanan.
Ganti ./app dengan jalur ke kode sumber aplikasi Anda relatif terhadap databricks.yml. Bidang source_code_path diperlukan saat kode aplikasi berada di repositori yang sama dengan bundel. Jika kode aplikasi Anda berada di repositori terpisah, gunakan git_source sebagai gantinya. Lihat aplikasi.
Langkah 4. Menambahkan alur kerja penyebaran
Tambahkan .github/workflows/deploy.yml ke repositori Anda:
name: Deploy to Databricks Apps
on:
workflow_dispatch:
# Uncomment to deploy on every push to main once the workflow is validated.
# push:
# branches: [main]
permissions:
id-token: write # required for OIDC federation
contents: read
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: prod
env:
DATABRICKS_AUTH_TYPE: github-oidc
DATABRICKS_HOST: ${{ vars.DATABRICKS_HOST }}
DATABRICKS_CLIENT_ID: ${{ vars.DATABRICKS_CLIENT_ID }}
steps:
- uses: actions/checkout@v4
- name: Install Databricks CLI
uses: databricks/setup-cli@main
- name: Validate bundle
run: databricks bundle validate --target prod
- name: Deploy bundle
run: databricks bundle deploy --target prod
- name: Start or restart app
run: databricks bundle run my_app --target prod
Ganti my_app di langkah terakhir dengan kunci sumber daya yang Anda databricks.yml gunakan di bawah resources.apps.
Runner memerlukan izin id-token: write untuk meminta token OIDC. Tindakan databricks/setup-cli membaca DATABRICKS_AUTH_TYPE=github-oidc dan menangani autentikasi secara otomatis.
Warning
databricks bundle deploy mengunggah kode sumber dan memperbarui sumber daya, tetapi tidak memulai ulang proses aplikasi. Jika Anda melewati langkah terakhir databricks bundle run, proses deploy berhasil di CI sementara aplikasi tetap menjalankan kode versi sebelumnya. Selalu jalankan sumber daya bundel setelah menyebarkan.
Langkah 5. Tunggu hingga aplikasi sehat
Databricks merekomendasikan penambahan langkah untuk memeriksa status secara berkala setelah penyebaran.
databricks bundle run keluar segera setelah memberi sinyal aplikasi untuk memulai, tetapi aplikasi mungkin belum berjalan. Ini masih dapat gagal selama startup karena masalah seperti dependensi yang hilang, variabel lingkungan yang hilang, atau konflik port. Menambahkan langkah polling memastikan startup yang gagal juga gagal dalam alur kerja:
- name: Wait for app to be running
env:
APP_NAME: my-app
run: |
for i in $(seq 1 20); do
STATE=$(databricks apps get "$APP_NAME" --output json | jq -r '.app_status.state')
echo "Attempt $i/20: state=$STATE"
if [ "$STATE" = "RUNNING" ]; then
exit 0
fi
sleep 15
done
echo "App did not reach RUNNING state within 5 minutes" >&2
exit 1
Atur APP_NAME ke nilai yang Anda databricks.yml deklarasikan di bawah resources.apps.<key>.name, bukan kunci sumber daya bundel.
Menangani aplikasi yang sudah ada
Nama aplikasi harus unik di seluruh ruang kerja. Langkah bundle deploy gagal dengan An app with the same name already exists ketika bundel lain (atau aplikasi yang dibuat secara manual) sudah memiliki aplikasi dengan nama itu. Tautkan paket Anda ke aplikasi yang sudah ada alih-alih membuat ulang aplikasi tersebut.
Jalankan ini sekali secara lokal untuk melampirkan bundel ke aplikasi yang ada:
databricks bundle deployment bind my_app <existing-app-name> --target prod --auto-approve
Kemudian jalankan kembali alur kerja. Penerapan berikutnya menggunakan kembali kaitan tersebut.
Jika aplikasi yang ada memiliki konfigurasi sisi server (seperti budget_policy_id) yang tidak terdapat dalam databricks.yml Anda, salin konfigurasi tersebut ke file bundel sebelum men-deploy ulang. Ketidakcocokan muncul sebagai kesalahan Terraform "hasil yang tidak konsisten" selama langkah penyebaran bundel.
Memilih pemicu
Mulailah dengan workflow_dispatch sehingga penyebaran pertama adalah manual. Setelah beberapa eksekusi berhasil, tambahkan push: branches: [main] untuk menyebarkan pada setiap penggabungan.
Untuk lapisan pengamanan tambahan, konfigurasikan lingkungan prod dengan peninjau wajib di Settings>Environments>prod>Deployment protection rules. Setiap eksekusi alur kerja menunggu pemberi persetujuan sebelum pekerjaan penyebaran dimulai.
Langkah berikutnya
- Siapkan federasi identitas beban kerja untuk mengonfigurasi kebijakan federasi GitHub Actions pada perwakilan layanan Anda.
-
Nyatakan aplikasi sebagai sumber daya bundel untuk menambahkan aplikasi Anda ke
databricks.yml. - Konfigurasikan izin aplikasi untuk mengontrol siapa yang dapat mengelola atau menggunakan aplikasi yang disebarkan.
- Pelajari tentang Bundel Otomatisasi Deklaratif untuk informasi selengkapnya tentang siklus hidup bundel dan mode penyebaran.
- Gunakan GitHub Actions dengan Azure Databricks untuk panduan tentang pekerjaan dan alur di luar aplikasi.