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 が自動的に次のようになります。
- parameter.yml ファイルを読み取ります
- PBIP 定義ファイル内の
find_valueのすべてのインスタンスを検索します - それらを対応する環境固有に置き換えます
replace_value - 変更された定義をターゲット ワークスペースにデプロイします
デプロイの自動化
PBIP デプロイを自動化して、コードがリポジトリ内の特定のブランチにマージされるたびに実行できます。 自動化は、次のロジックに従います。
- パイプラインまたはワークフローは、コードが構成されたブランチ (
devやmainなど) にプッシュされたときにトリガーされます。 - ブランチ名によって、ターゲット環境とワークスペース ID が決まります
- デプロイ スクリプトは、適切なパラメーターを使用して自動的に実行されます
- PBIP アーティファクトは、その環境の適切なワークスペースにデプロイされます
このセクションでは、Azure DevOps と GitHub Actions の両方に共通するセットアップ手順と、プラットフォーム固有の構成手順について説明します。
セットアップ
CI/CD プラットフォームを構成する前に、次の一般的なセットアップ手順を完了してください。
1. サービス プリンシパルを作成する
Fabric ワークスペースで共同作成者または管理者ロールを持つサービス プリンシパルを Azure AD に作成します。
2. Fabric ワークスペースにサービス プリンシパルを追加する
- Fabric ポータルを開き、各ターゲット ワークスペース (dev、prod) に移動します
- [ワークスペースの設定] > [アクセスの管理] に移動する
- 共同作成者ロールまたは管理者ロールを持つサービス プリンシパルを追加する
注
Fabric API を使用するには、テナント レベルでサービス プリンシパルを有効にする必要があります。 詳細については、「 サービス プリンシパルが Fabric パブリック API を呼び出すことができる」を参照してください。
3. リポジトリ内のブランチを構成する
自動化に使用するブランチを作成します。 この記事の例を次に示します。
- 開発環境のデプロイ用の
devブランチを作成する - 運用環境のデプロイ用の
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 のコンフィギュレーション
- Azure DevOps プロジェクト設定で Azure サービス接続を作成します。
- [プロジェクトの設定] > サービス接続に移動する
- サービス プリンシパルの資格情報を使用して新しい Azure Resource Manager サービス接続を作成する
- 詳細な手順については、Microsoft Azure への接続に関するページを参照してください。
- サービス接続名と一致するように YAML の
azureSubscription値を更新します
-
YAML でワークスペース ID を更新します。
- azure-pipelines.ymlで
workspace_ids変数を編集する - 開発ワークスペース ID と prod ワークスペース ID を設定する
- 変更をコミットしてリポジトリにプッシュする
- azure-pipelines.ymlで
-
パイプラインを作成します。
- [パイプライン] > [新しいパイプライン] に移動する
- リポジトリを選択し、[既存の 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 の構成
Azure 資格情報シークレットを作成します。
- サービス プリンシパルの資格情報を JSON 形式で取得します。
{ "clientId": "<service-principal-client-id>", "clientSecret": "<service-principal-secret>", "subscriptionId": "<azure-subscription-id>", "tenantId": "<azure-tenant-id>" } - GitHub リポジトリの [設定] > シークレットと変数 > Actions に移動します
- 上記の JSON で
AZURE_CREDENTIALSを追加する
- サービス プリンシパルの資格情報を JSON 形式で取得します。
ワークフロー内のワークスペース ID を更新します。
- の [ワークスペース変数の設定] ステップで、
workspace_idsハッシュテーブルを編集します.github/workflows/deploy.yml - 開発ワークスペース ID と prod ワークスペース ID を設定する
- ワークフロー YAML をコミットしてリポジトリにプッシュする
- の [ワークスペース変数の設定] ステップで、