GitHub Actionsを使用してFabric アプリをデプロイする

GitHub Actions ワークフローを使用して、GitHub リポジトリからFabric ワークスペースへのFabric アプリのデプロイを自動化します。 ワークフローは、サービス プリンシパルを使用してFabricにサインインし、Rayfin CLI をインストールし、rayfin up を実行して、コード、データベース スキーマ、静的コンテンツをターゲット ワークスペースに適用します。 この記事では次の方法を紹介します:

  • 自動デプロイ用のサービス プリンシパルとFabric ワークスペースを準備します。
  • ワークフローに必要なGitHub リポジトリ シークレットを構成します。
  • デプロイ ワークフロー ファイルをリポジトリに追加します。
  • mainで自動的にデプロイし、必要に応じて破壊的変更を伴う手動デプロイにも対応します。
  • 機能ブランチと環境固有のデプロイに同じワークフローを再利用します。

前提条件

  • GitHub リポジトリ内のFabric アプリ プロジェクト。 まだお持ちでない場合は、「初めてのFabric Apps プロジェクトを作成するアプリケーション コードをリポジトリにプッシュする方法に関するページを参照してください。
  • サービス プリンシパルがデプロイできるFabric ワークスペース。 環境の分離については、「 開発環境と運用環境の管理」を参照してください。
  • クライアント シークレットを持つ Microsoft Entra ID サービス プリンシパル (アプリ登録)。
  • GitHub リポジトリに secrets を追加するアクセス許可。

手順 1: デプロイ用のサービス プリンシパルを作成する

ワークフローは非対話型でサインインするため、対話型ユーザー アカウントではなくサービス プリンシパルが使用されます。

  1. Azure portal で、新しいアプリケーションを Microsoft Entra ID>アプリの登録 に登録します。
  2. アプリケーション (クライアント) ID とディレクトリ (テナント) ID を記録します。
  3. [ 証明書とシークレット] で、新しい クライアント シークレット を作成し、値をコピーします。 安全に保存します。後でもう一度表示することはできません。
  4. ターゲット 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 ポータルで作成し、サービス プリンシパルへのアクセス権を最初に付与します。