透過使用 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:建立部署服務主體
工作流程以非互動方式登入,因此使用服務主體而非互動式使用者帳號。
- 在Azure入口網站,請以Microsoft Entra ID>應用程式註冊註冊新申請。
- 記錄 應用程式(用戶端)ID 與 目錄(租戶)ID。
- 在 「憑證與秘密」中,建立一個新的 客戶端秘密 並複製該值。 請妥善保存:之後無法再查看。
- 在目標 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 入口網站建立它們,並先授權服務主體存取權限。