使用 GitHub Actions 部署 Fabric 應用程式

透過使用 GitHub Actions 工作流程,自動化將 GitHub 應用程式從 GitHub 倉庫部署到 Fabric 工作區。 工作流程會登入 Fabric 服務主體,安裝 Rayfin CLI,並執行 rayfin up 將你的程式碼、資料庫結構和靜態內容套用到目標工作區。 本文將教你如何:

  • 準備一個服務主體和一個 Fabric 工作空間以進行自動化部署。
  • 設定工作流程所需的 GitHub 存放庫密鑰。
  • 將部署工作流程檔案加入你的儲存庫。
  • main 上自動觸發部署,並可手動觸發,且支援可選的破壞性變更。
  • 重複使用相同的工作流程來執行功能分支和環境特定部署。

先決條件

  • 一個位於 GitHub 倉庫中的 Fabric 應用程式專案。 如果你還沒有,請參考 Create your first Fabric Apps project,然後把你的應用程式碼推送到倉庫。
  • 一個服務主體可以部署到的 Fabric 工作空間。 關於環境分離,請參見 管理開發與生產環境
  • 具有用戶端密碼的 Microsoft Entra ID 服務主體(應用程式註冊)。
  • 允許在GitHub倉庫中新增secrets

步驟 1:建立部署服務主體

工作流程以非互動方式登入,因此使用服務主體而非互動式使用者帳號。

  1. Azure入口網站,請以Microsoft Entra ID>應用程式註冊註冊新申請。
  2. 記錄 應用程式(用戶端)ID目錄(租戶)ID
  3. 「憑證與秘密」中,建立一個新的 客戶端秘密 並複製該值。 請妥善保存:之後無法再查看。
  4. 在目標 Fabric 工作區上授予服務主體 Contributor 或更高權限,使其能夠建立及更新 Fabric 應用程式項目。

Important

服務主體部署需要 Fabric 租戶設定,允許服務主體使用 Fabric API。 請向你的 Fabric 管理員確認這個功能是否已啟用。

步驟 2:新增儲存庫秘密

在你的GitHub儲存庫中,前往 Settings>Secrets and variables>Actions 並新增以下儲存庫祕密:

秘密名稱 價值
CLIENT_ID 服務主體的應用程式(用戶端)ID。
TENANT_ID 名錄(租戶)ID。
CLIENT_SECRET 用戶端密碼值。
FABRIC_WORKSPACE_NAME 目標 Fabric 工作區的名稱(例如,my-app-prod)。

步驟 3:新增工作流程檔案

在您的儲存庫中,建立以下內容的檔案 .github/workflows/deploy-to-fabric.yml

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

每個區塊的功能

  • on.push:每次推送到 main 時,都會自動執行工作流程。
  • :在 GitHub Actions 介面中新增一個 Run workflow 按鈕,以及一個 force 核取方塊。 啟用 force 會將 --force 傳遞給 rayfin up,因此會允許破壞性的結構描述變更(例如刪除欄位或資料表)。 為了安全且非破壞性的部署,請保持未勾選。
  • concurrency確保每個分支一次僅執行一次部署。 如果在前一次部署仍在執行時有新的推送進來,較早的執行作業會被取消,改以較新的提交為準。 此設定可防止兩個 rayfin up 作業同時在同一工作區上執行而互相衝突。
  • env: 將服務主體憑證與目標工作區名稱傳遞到工作中。
  • Install Rayfin CLI: 全域安裝 CLI 也就是 rayfin 在 PATH 上。
  • Login to Fabric with service principal:使用 * 環境變數進行驗證。
  • Deploy to Fabric:對已設定的租戶和工作空間執行 rayfin up--yes 接受非破壞性提示; --force 只有在手動運行要求時才會加入。

步驟四:觸發部署

你可以用兩種方式觸發工作流程:

  • 自動:將提交內容推送至或合併到 main 分支。
  • 手動:在 GitHub 中,前往 Actions>部署至 Fabric>執行工作流程。 選擇要部署的分支,並可視需要在開始執行前勾選 允許可能導致資料遺失的破壞性結構描述變更

工作流程結束後,執行日誌中的 Deploy to Fabric 步驟會印出 Fabric 應用程式的 URL 和部署 ID。

考慮事項與限制條件

  • 並行數是以每個分支為單位計算。 concurrency.group 包含 github.ref,因此對不同分支的部署不會互相取消。 當你將分支映射到不同工作區時,這種行為是刻意的。
  • 破壞性變更預設會被阻擋。 rayfin up 會拒絕可能造成資料遺失的結構描述作業,除非傳入 --force。 只有在你已檢視過已規劃的作業後,才針對手動執行啟用 force
  • 工作空間必須存在。 工作流程不會建立 Fabric 工作區。 在 Fabric 入口網站建立它們,並先授權服務主體存取權限。