GitHub Actions ワークフローを使用して、GitHub リポジトリからFabric ワークスペースへのFabric アプリのデプロイを自動化します。 ワークフローは、サービス プリンシパルを使用してFabricにサインインし、Rayfin CLI をインストールし、rayfin up を実行して、コード、データベース スキーマ、静的コンテンツをターゲット ワークスペースに適用します。
この記事では次の方法を紹介します:
- 自動デプロイ用のサービス プリンシパルとFabric ワークスペースを準備します。
- ワークフローに必要なGitHub リポジトリ シークレットを構成します。
- デプロイ ワークフロー ファイルをリポジトリに追加します。
-
mainで自動的にデプロイし、必要に応じて破壊的変更を伴う手動デプロイにも対応します。 - 機能ブランチと環境固有のデプロイに同じワークフローを再利用します。
前提条件
- GitHub リポジトリ内のFabric アプリ プロジェクト。 まだお持ちでない場合は、「初めてのFabric Apps プロジェクトを作成するアプリケーション コードをリポジトリにプッシュする方法に関するページを参照してください。
- サービス プリンシパルがデプロイできるFabric ワークスペース。 環境の分離については、「 開発環境と運用環境の管理」を参照してください。
- クライアント シークレットを持つ Microsoft Entra ID サービス プリンシパル (アプリ登録)。
- GitHub リポジトリに secrets を追加するアクセス許可。
手順 1: デプロイ用のサービス プリンシパルを作成する
ワークフローは非対話型でサインインするため、対話型ユーザー アカウントではなくサービス プリンシパルが使用されます。
- Azure portal で、新しいアプリケーションを Microsoft Entra ID>アプリの登録 に登録します。
- アプリケーション (クライアント) ID とディレクトリ (テナント) ID を記録します。
- [ 証明書とシークレット] で、新しい クライアント シークレット を作成し、値をコピーします。 安全に保存します。後でもう一度表示することはできません。
- ターゲット Fabric ワークスペースに対するサービス プリンシパル Contributor 以上のアクセス許可を付与して、Fabric アプリ項目を作成および更新できるようにします。
Important
サービス プリンシパルのデプロイには、サービス プリンシパルによる Fabric API の使用を許可する Fabric のテナント設定が必要です。 これが有効になっていることをFabric管理者に確認します。
手順 2: リポジトリ シークレットを追加する
GitHub リポジトリで、Settings>Secrets and variables>Actions に移動し、次のリポジトリ シークレットを追加します。
| シークレット名 | Value |
|---|---|
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へのプッシュごとにワークフローを自動的に実行します。 -
on.workflow_dispatch: ワークフローの実行 ボタンを force チェックボックスを使用してGitHub Actions UI に追加します。 force を有効にすると、--forceがrayfin upに渡されるため、破壊的なスキーマ変更(列やテーブルの削除など)が許可されます。 安全で非破壊的なデプロイの場合は、オフのままにします。 -
concurrency: ブランチごとに一度に 1 つのデプロイのみが実行されるようにします。 以前のデプロイの実行中に新しいプッシュが発生した場合、新しいコミットを優先して古い実行が取り消されます。 この設定により、2 つのrayfin upジョブが同じワークスペースでレースできなくなります。 -
env: サービス プリンシパルの資格情報とターゲット ワークスペース名をジョブに渡します。 -
Install Rayfin CLI:rayfinが PATH に含まれるように、CLI をグローバルにインストールします。 -
Login to Fabric with service principal:*環境変数を使用して認証します。 -
Deploy to Fabric: 構成されたテナントとワークスペースに対してrayfin upを実行します。--yes非破壊的プロンプトを受け入れます。--forceは、手動実行によって要求された場合にのみ追加されます。
手順 4: デプロイをトリガーする
ワークフローは、次の 2 つの方法でトリガーできます。
-
自動: コミットを
mainブランチにプッシュまたはマージします。 - Manually: GitHubで、Actions>Deploy to Fabric>Run workflow に移動します。 デプロイするブランチを選択し、必要に応じて [実行を開始する前に データが失われる可能性がある破壊的スキーマ変更を許可 する] チェック ボックスをオンにします。
ワークフローが完了すると、実行ログの Deploy to Fabric ステップによって、Fabric アプリの URL とデプロイ ID が出力されます。
考慮事項と制限事項
- 同時実行数はブランチごとです。
concurrency.groupにはgithub.refが含まれているため、異なるブランチにデプロイしても、互いに取り消されることはありません。 この動作は、ブランチを別のワークスペースにマップするときに意図的に行われます。 - 破壊的変更は既定でブロックされます。
rayfin upは、--forceが渡されない限り、データを失う可能性があるスキーマ操作を拒否します。 計画された操作を確認した場合にのみ、手動実行の 強制 を有効にします。 - ワークスペースが存在する必要があります。 ワークフローでは、ワークスペースFabric作成されません。 Fabric ポータルで作成し、サービス プリンシパルへのアクセス権を最初に付与します。