Menyebarkan aplikasi Fabric dengan GitHub Actions

Mengotomatiskan penyebaran aplikasi Fabric dari repositori GitHub ke ruang kerja Fabric dengan menggunakan alur kerja GitHub Actions. Alur kerja masuk ke Fabric dengan perwakilan layanan, menginstal Rayfin CLI, dan menjalankan rayfin up untuk menerapkan kode, skema database, dan konten statis Anda ke ruang kerja target. Artikel ini memperlihatkan kepada Anda cara:

  • Siapkan perwakilan layanan dan ruang kerja Fabric untuk penyebaran otomatis.
  • Atur secret repositori GitHub yang diperlukan alur kerja.
  • Tambahkan file alur kerja penyebaran ke repositori Anda.
  • Picu deployment secara otomatis pada main dan secara manual dengan dukungan opsional untuk perubahan destruktif.
  • Gunakan kembali alur kerja yang sama untuk cabang fitur dan penerapan khusus lingkungan.

Prasyarat

  • Proyek aplikasi Fabric di repositori GitHub. Jika Anda belum memilikinya, lihat Buat proyek Fabric Apps pertama Anda dan dorong kode aplikasi Anda ke repositori.
  • Ruang kerja Fabric yang dapat menjadi target deployment oleh prinsipal layanan. Untuk pemisahan lingkungan, lihat Mengelola lingkungan dev dan prod.
  • Perwakilan layanan Microsoft Entra ID (pendaftaran aplikasi) dengan rahasia klien.
  • Izin untuk menambahkan secrets ke repositori GitHub.

Langkah 1: Buat prinsipal layanan untuk deployment

Alur kerja ini masuk secara non-interaktif, sehingga menggunakan service principal alih-alih akun pengguna interaktif.

  1. Di portal Azure, daftarkan aplikasi baru di bawah Microsoft Entra ID>Pendaftaran aplikasi.
  2. Rekam ID Aplikasi (klien) dan ID Direktori (penyewa).
  3. Di bawah Sertifikat & rahasia, buat rahasia klien baru dan salin nilainya. Simpan dengan aman: Anda tidak dapat melihatnya lagi nanti.
  4. Berikan perwakilan layanan Contributor atau izin yang lebih tinggi pada ruang kerja Fabric target sehingga dapat membuat dan memperbarui item aplikasi Fabric.

Important

Penerapan service principal memerlukan pengaturan tenant Fabric yang mengizinkan service principal menggunakan API Fabric. Konfirmasikan dengan administrator Fabric Anda bahwa ini diaktifkan.

Langkah 2: Menambahkan rahasia repositori

Di repositori GitHub Anda, buka Settings>Secret dan variabel>Actions dan tambahkan rahasia repositori berikut:

Nama rahasia Nilai
CLIENT_ID ID Aplikasi (klien) dari prinsipal layanan.
TENANT_ID ID Direktori (penyewa).
CLIENT_SECRET Nilai rahasia klien.
FABRIC_WORKSPACE_NAME Nama ruang kerja target Fabric (misalnya, my-app-prod).

Langkah 3: Tambahkan file alur kerja

Di repositori Anda, buat file .github/workflows/deploy-to-fabric.yml dengan konten berikut:

name: Deploy to Fabric

on:
  push:
    branches: [main]
  workflow_dispatch:
    inputs:
      force:
        description: 'Allow destructive schema changes that may result in data loss'
        required: false
        default: false
        type: boolean

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  deploy:
    name: Deploy to Fabric
    runs-on: ubuntu-latest
    env:
      CLIENT_ID: ${{ secrets.CLIENT_ID }}
      TENANT_ID: ${{ secrets.TENANT_ID }}
      CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
      FABRIC_WORKSPACE_NAME: ${{ secrets.FABRIC_WORKSPACE_NAME }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install Rayfin CLI
        run: npm install -g @microsoft/rayfin-cli

      - name: Login to Rayfin with service principal
        run: |
          rayfin login \
            --service-principal \
            -t $TENANT_ID
            -u $CLIENT_ID
            -p CLIENT_SECRET

      - name: Deploy to Fabric
        run: |
          EXTRA_ARGS=""

          if [[ "${{ inputs.force }}" == "true" ]]; then
            EXTRA_ARGS="$EXTRA_ARGS --force"
          fi

          rayfin up \
            --workspace "$FABRIC_WORKSPACE_NAME" \
            --yes \
            $EXTRA_ARGS

Apa yang dilakukan setiap bagian

  • on.push: Menjalankan alur kerja secara otomatis pada setiap pendorongan ke main.
  • on.workflow_dispatch: Menambahkan tombol Jalankan alur kerja di UI GitHub Actions dengan kotak centang force. Mengaktifkan force akan meneruskan --force ke rayfin up, sehingga perubahan skema yang destruktif (seperti menghapus kolom atau tabel) diizinkan. Biarkan tidak dicentang untuk penyebaran yang aman dan tidak merusak.
  • concurrency: Memastikan hanya satu penyebaran per cabang yang berjalan pada satu waktu. Jika ada push baru masuk saat proses deploy sebelumnya masih berjalan, proses yang lebih lama akan dibatalkan agar commit yang lebih baru diprioritaskan. Pengaturan ini mencegah dua rayfin up tugas berjalan secara bersamaan pada ruang kerja yang sama.
  • env: Meneruskan kredensial prinsipal layanan dan nama ruang kerja target ke tugas.
  • Install Rayfin CLI: Menginstal CLI secara global begitu juga rayfin di PATH.
  • Login to Fabric with service principal: Mengautentikasi menggunakan variabel lingkungan *.
  • Deploy to Fabric: Menjalankan rayfin up pada penyewa dan ruang kerja yang telah dikonfigurasi. --yes menerima perintah yang tidak merusak; --force ditambahkan hanya ketika eksekusi manual memintanya.

Langkah 4: Memicu penyebaran

Anda dapat memicu alur kerja dengan dua cara:

  • Otomatis: Push atau gabungkan komit ke cabang main.
  • Manually: Dalam GitHub, buka Actions>Deploy ke Fabric>Buat alur kerja. Pilih cabang untuk disebarkan dan secara opsional centang Izinkan perubahan skema destruktif yang dapat mengakibatkan kehilangan data sebelum memulai eksekusi.

Setelah alur kerja selesai, langkah Deploy ke Fabric dalam log eksekusi mencetak URL aplikasi Fabric dan ID penyebaran.

Pertimbangan dan keterbatasan

  • Konkurensi adalah per cabang. termasuk concurrency.groupgithub.ref, sehingga penyebaran ke cabang yang berbeda tidak membatalkan satu sama lain. Perilaku ini memang disengaja saat Anda memetakan cabang ke ruang kerja yang berbeda.
  • Perubahan destruktif diblokir secara default. rayfin up menolak operasi skema yang dapat kehilangan data kecuali --force diteruskan. Gunakan force hanya untuk eksekusi manual setelah Anda meninjau operasi yang direncanakan.
  • Ruang kerja harus ada. Alur kerja tidak membuat ruang kerja Fabric. Buat item tersebut di portal Fabric dan berikan akses kepada service principal terlebih dahulu.