次の方法で共有


fabric-cicd を使用して Power BI プロジェクト (PBIP) をデプロイする

Important

Power BI Desktop プロジェクトは現在、プレビュー段階です。

fabric-cicd は、Microsoft が開発した Python ライブラリで、Fabric 開発者がコード定義形式 (PBIP ファイル形式を使用したセマンティック モデルやレポートなど) を使用して、Fabric アイテムをソース管理からワークスペースにデプロイするためのコード優先メソッドを提供します。

この記事では、次の方法について説明します。

  • ローカル コンピューターから PBIP ファイルを手動でデプロイする
  • 環境固有の構成用に PBIP ファイルをパラメーター化する
  • Azure DevOps または GitHub Actions を使用してブランチ ベースのワークスペース ターゲットを使用してデプロイを自動化する

Power BI Desktop プロジェクト (PBIP) の PBIP 形式と Fabric Git 統合の概要について説明します。

PBIP のデプロイに fabric-cicd を使用する理由は何ですか?

fabric-cicd は、ソース管理された Fabric 成果物をデプロイするために特別に設計されており、いくつかの利点があります。

  • Fabric ネイティブ REST API を使用 する - 公式の Microsoft Fabric API を基に構築され、互換性と長期的なサポートを保証します
  • Python ネイティブ - 最新の Python ベースの DevOps ワークフローとのシームレスな統合
  • パラメーター化: 環境固有の構成 (ワークスペース ID、データ ソース、接続文字列) の組み込みサポート
  • 開発者向け: ローカルまたは CI/CD パイプラインで実行できるシンプルな Python スクリプト
  • 柔軟な展開制御: 特定の項目の種類 (レポートのないセマンティック モデル、データ キャッシュの有無に関係なくセマンティック モデルなど) のみをデプロイし、手動介入なしで既定のページやパラメーターなどの一貫性のある構成を確保します
  • オーファンクリーンアップ: ソース管理に存在しなくなったアイテムをワークスペースから自動的に削除します
  • 信頼性の高い認証: 複数の認証オプションで Azure Identity SDK を使用する

完全なドキュメントについては、 fabric-cicd のドキュメントを参照してください

[前提条件]

開始する前に、次のことを確認します。

  • Python (バージョン 3.9 から 3.12)
  • PBIP 形式で保存された Power BI Desktop プロジェクト
  • 共同作成者ロールを持つ Microsoft Fabric ワークスペースへのアクセス

自動デプロイの場合は、次が必要です。

  • ターゲット Fabric ワークスペースにおいて少なくとも寄稿者ロールを持つサービス プリンシパル
  • Azure DevOps または GitHub Actions へのアクセス
  • ソース管理の PBIP ファイル (Git、Azure DevOps、または GitHub)

簡単スタート

このクイック スタートでは、ローカル コンピューターから Fabric ワークスペースに PBIP プロジェクトをデプロイする方法について説明します。

1. fabric-cicd をインストールする

ターミナルを開き、fabric-cicd をインストールします。

pip install fabric-cicd

2. PBIP プロジェクトを準備する

PBIP プロジェクトに必要なファイルが含まれていることを確認します。 一般的な PBIP プロジェクト構造:

my-powerbi-project/
├── SalesAnalytics.Report/
│   ├── definition.pbir
│   └── definition/
│       └── pages/
├── SalesAnalytics.SemanticModel/
│   ├── definition.pbism
│   └── definition/
│       ├── model.tmdl
│       ├── tables/
│       └── ...
└── SalesAnalytics.pbip

必要なファイルと形式の詳細については、「 Power BI Desktop プロジェクト レポート フォルダーPower BI Desktop プロジェクト セマンティック モデル フォルダー」を参照してください

ヒント

PBIP プロジェクトを作成するには、Power BI Desktop で PBIX ファイルを開き、ファイル > Power BI プロジェクト (.pbip) >名前を付けて保存します。 詳細については、 Power BI Desktop プロジェクト を参照してください。

3. デプロイ スクリプトを作成する

プロジェクト ディレクトリに deploy.py ファイルを作成します。

import argparse
import sys
from azure.identity import InteractiveBrowserCredential, AzureCliCredential
from fabric_cicd import FabricWorkspace, publish_all_items

parser = argparse.ArgumentParser(description="Deploy PBIP to Fabric")
parser.add_argument("--workspace_id", type=str, required=True, help="Target workspace ID")
parser.add_argument("--environment", type=str, default="dev", help="Environment name")
args = parser.parse_args()

# Use AzureCliCredential in CI/CD, fall back to InteractiveBrowserCredential for local
try:
    credential = AzureCliCredential()
except Exception:
    credential = InteractiveBrowserCredential()

workspace_params = {
    "workspace_id": args.workspace_id,
    "environment": args.environment,
    "repository_directory": ".",
    "item_type_in_scope": ["SemanticModel", "Report"],
    "token_credential": credential,
}

target_workspace = FabricWorkspace(**workspace_params)
publish_all_items(target_workspace)

4. 展開

ワークスペース ID を使用してデプロイ スクリプトを実行します。

python deploy.py --workspace_id "11111111-1111-1111-1111-111111111111"

認証用にブラウザーが開きます。 サインイン後、fabric-cicd は PBIP ファイルをターゲット ワークスペースにデプロイします。 次のような進行状況メッセージが表示されます。

[info] Publishing SemanticModel 'SalesAnalytics'
       Operation in progress. Checking again in 1 second (Attempt 1)...
       Published

[info] Publishing Report 'SalesAnalytics'
       Published

通常、デプロイにはセマンティック モデルのサイズに応じて 20 ~ 30 秒かかります。

データ ソースを使用してセマンティック モデルを初めてデプロイするときは、Fabric ポータルでデータ ソースの資格情報を手動で構成する必要があります。 ワークスペース > セマンティック モデル > 設定 > データ ソース資格情報に移動します。 後続のデプロイでは、保存された資格情報が再利用されます。

環境固有のパラメーター化

fabric-cicd の最も強力な機能の 1 つは、さまざまな環境で PBIP ファイルをパラメーター化する機能です。 これは、セマンティック モデルがワークスペース ID、lakehouse ID、接続文字列などの環境固有のリソースを参照する場合に不可欠です。

例: ワークスペース ID と lakehouse ID をパラメーター化する

プロジェクト ルートに parameter.yml ファイルを作成して、環境固有の値を定義します。

find_replace:
  # Replace workspace ID for DirectLake connection
  - find_value: "11111111-1111-1111-1111-111111111111"
    replace_value:
      dev: "11111111-1111-1111-1111-111111111111"  # Dev workspace
      prod: "22222222-2222-2222-2222-222222222222"  # Prod workspace

  # Replace lakehouse ID for DirectLake semantic model
  - find_value: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
    replace_value:
      dev: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"  # Dev lakehouse
      prod: "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"  # Prod lakehouse

python deploy.py --workspace_id "11111111-1111-1111-1111-111111111111" --environment devを実行すると、fabric-cicd が自動的に次のようになります。

  1. parameter.yml ファイルを読み取ります
  2. PBIP 定義ファイル内の find_value のすべてのインスタンスを検索します
  3. それらを対応する環境固有に置き換えます replace_value
  4. 変更された定義をターゲット ワークスペースにデプロイします

デプロイの自動化

PBIP デプロイを自動化して、コードがリポジトリ内の特定のブランチにマージされるたびに実行できます。 自動化は、次のロジックに従います。

  1. パイプラインまたはワークフローは、コードが構成されたブランチ ( devmainなど) にプッシュされたときにトリガーされます。
  2. ブランチ名によって、ターゲット環境とワークスペース ID が決まります
  3. デプロイ スクリプトは、適切なパラメーターを使用して自動的に実行されます
  4. PBIP アーティファクトは、その環境の適切なワークスペースにデプロイされます

このセクションでは、Azure DevOps と GitHub Actions の両方に共通するセットアップ手順と、プラットフォーム固有の構成手順について説明します。

セットアップ

CI/CD プラットフォームを構成する前に、次の一般的なセットアップ手順を完了してください。

1. サービス プリンシパルを作成する

Fabric ワークスペースで共同作成者または管理者ロールを持つサービス プリンシパルを Azure AD に作成します。

2. Fabric ワークスペースにサービス プリンシパルを追加する

  1. Fabric ポータルを開き、各ターゲット ワークスペース (dev、prod) に移動します
  2. [ワークスペースの設定] > [アクセスの管理] に移動する
  3. 共同作成者ロールまたは管理者ロールを持つサービス プリンシパルを追加する

Fabric API を使用するには、テナント レベルでサービス プリンシパルを有効にする必要があります。 詳細については、「 サービス プリンシパルが Fabric パブリック API を呼び出すことができる」を参照してください。

3. リポジトリ内のブランチを構成する

自動化に使用するブランチを作成します。 この記事の例を次に示します。

  1. 開発環境のデプロイ用の dev ブランチを作成する
  2. 運用環境のデプロイ用の main ブランチを作成する

YAML ファイル内のワークスペース マッピングを変更することで、ブランチ名をカスタマイズしたり、環境を追加したりできます。

Azure DevOps

Azure Pipelines を使用して PBIP デプロイを自動化する。 構成されたブランチにコードがプッシュされると、パイプラインは対応するワークスペースに自動的にデプロイされます。

リポジトリ ルートに azure-pipelines.yml を作成します。

trigger:
  branches:
    include:
      - dev
      - main

variables:
  - name: workspace_ids
    value: |
      {
        "dev": "11111111-1111-1111-1111-111111111111",
        "main": "22222222-2222-2222-2222-222222222222"
      }
  - name: environments
    value: |
      {
        "dev": "dev",
        "main": "prod"
      }

stages:
  - stage: Deploy
    jobs:
      - job: DeployPBIP
        pool:
          vmImage: 'windows-latest'
        steps:
          - checkout: self
          - task: UsePythonVersion@0
            inputs:
              versionSpec: '3.12'
              addToPath: true
          - task: AzureCLI@2
            displayName: 'Deploy PBIP to Fabric'
            inputs:
              azureSubscription: 'your-azure-service-connection'
              scriptType: 'ps'
              scriptLocation: 'inlineScript'
              inlineScript: |
                cd "$(Build.SourcesDirectory)"
                
                pip install fabric-cicd
                
                $branch_ref = $env:BUILD_SOURCEBRANCH
                $branch_name = $branch_ref -replace '^refs/heads/', ''
                
                $workspace_ids = '$(workspace_ids)' | ConvertFrom-Json
                $environments = '$(environments)' | ConvertFrom-Json
                
                $workspace_id = $workspace_ids.$branch_name
                $environment = $environments.$branch_name
                
                python -u deploy.py --workspace_id "$workspace_id" --environment "$environment"
                
                if ($LASTEXITCODE -ne 0) {
                    Write-Error "Deployment failed with exit code: $LASTEXITCODE"
                    exit $LASTEXITCODE
                }

Azure DevOps のコンフィギュレーション

  1. Azure DevOps プロジェクト設定で Azure サービス接続を作成します。
    • [プロジェクトの設定] > サービス接続に移動する
    • サービス プリンシパルの資格情報を使用して新しい Azure Resource Manager サービス接続を作成する
    • 詳細な手順については、Microsoft Azure への接続に関するページを参照してください。
    • サービス接続名と一致するように YAML の azureSubscription 値を更新します
  2. YAML でワークスペース ID を更新します。
    • azure-pipelines.ymlで workspace_ids 変数を編集する
    • 開発ワークスペース ID と prod ワークスペース ID を設定する
    • 変更をコミットしてリポジトリにプッシュする
  3. パイプラインを作成します
    • [パイプライン] > [新しいパイプライン] に移動する
    • リポジトリを選択し、[既存の Azure Pipelines YAML ファイル] を選択します
    • azure-pipelines.ymlを選択する
    • 詳細な手順については、最初のパイプラインの作成に関するページを参照してください。
    • パイプラインを保存して実行して PBIP を Fabric にデプロイする

GitHub Actions

GitHub Actions を使用して PBIP デプロイを自動化します。 構成されたブランチにコードがプッシュされると、ワークフローは対応するワークスペースに自動的にデプロイされます。

リポジトリに .github/workflows/deploy.yml を作成します。

name: Deploy PBIP to Fabric

on:
  push:
    branches: [dev, main]
  workflow_dispatch:

jobs:
  deploy:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3
      
      - uses: actions/setup-python@v4
        with:
          python-version: '3.12'
      
      - name: Set workspace variables
        id: workspace
        shell: pwsh
        run: |
          $branch_name = "${{ github.ref_name }}"
          
          $workspace_ids = @{
            "dev" = "11111111-1111-1111-1111-111111111111"
            "main" = "22222222-2222-2222-2222-222222222222"
          }
          
          $environments = @{
            "dev" = "dev"
            "main" = "prod"
          }
          
          $workspace_id = $workspace_ids[$branch_name]
          $environment = $environments[$branch_name]
          
          echo "workspace_id=$workspace_id" >> $env:GITHUB_OUTPUT
          echo "environment=$environment" >> $env:GITHUB_OUTPUT
      
      - name: Azure Login
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}
      
      - name: Deploy PBIP to Fabric
        shell: pwsh
        run: |
          pip install fabric-cicd
          
          python -u deploy.py --workspace_id "${{ steps.workspace.outputs.workspace_id }}" --environment "${{ steps.workspace.outputs.environment }}"
          
          if ($LASTEXITCODE -ne 0) {
              Write-Error "Deployment failed with exit code: $LASTEXITCODE"
              exit $LASTEXITCODE
          }

GitHub Actions の構成

  1. Azure 資格情報シークレットを作成します

    • サービス プリンシパルの資格情報を JSON 形式で取得します。
      {
        "clientId": "<service-principal-client-id>",
        "clientSecret": "<service-principal-secret>",
        "subscriptionId": "<azure-subscription-id>",
        "tenantId": "<azure-tenant-id>"
      }
      
    • GitHub リポジトリの [設定] > シークレットと変数 > Actions に移動します
    • 上記の JSON で AZURE_CREDENTIALS を追加する
  2. ワークフロー内のワークスペース ID を更新します。

    • の [ワークスペース変数の設定] ステップで、 workspace_ids ハッシュテーブルを編集します .github/workflows/deploy.yml
    • 開発ワークスペース ID と prod ワークスペース ID を設定する
    • ワークフロー YAML をコミットしてリポジトリにプッシュする