APIを使用してGit統合を自動化する
Microsoft Fabric のGit 統合 ツールを使うと、チームが共同作業をするためにソース管理を使用して、Fabric コンテンツのための効率的で再利用可能なリリース プロセスを構築できます。
Microsoft Fabric REST API を使用すると、Fabric の手順とプロセスを自動化して、タスクをより迅速かつ、より少ないエラーで完了できます。 この効率は、コスト削減と生産性の向上につながります。
この記事では、Git integration REST API を使用して Microsoft Fabric での Git 統合を自動化する方法について説明します。
前提条件
Fabric Git API を使用するには、以下が必要です:
UI で Git 統合を使用するための前提条件と同じです。
Fabric サービス用の Microsoft Entra トークン。 API 呼び出しの承認ヘッダーでそのトークンを使用します。 トークンを取得する方法については、「Fabric API のクイック スタート」を参照してください。
PowerShell なしで REST API を使用できますが、この記事のScriptでは PowerShell を使用します。 スクリプトを実行するには、次の手順を行う必要があります:
- PowerShell をインストールします。
- Azure PowerShell Az モジュールをインストールします。
Git 統合 API 関数
Git integration REST API は、コンテンツの継続的インテグレーションと継続的デリバリー (CI/CD) を実現するのに役立ちます。 API を使用して実行できることの例をいくつか次に示します。
受信した変更がある項目と、Git Status API を使用してまだ Git にコミットされていない変更がある項目を確認します。
指定されたワークスペースの接続の詳細を取得します。
Git 資格情報を更新して、Git 資格情報の構成の詳細を更新します。
Git 資格情報を取得して、Git 資格情報の構成の詳細を取得します。
Git に接続されているワークスペースの 接続を初期化 します。
ワークスペースで行われた変更を、接続されたリモート ブランチにコミットします。
接続されたブランチにプッシュされたコミットでワークスペースを更新します。
例
以下の PowerShell Scriptを使って、いくつかの共通の自動化プロセスを実行する方法を理解します。 PowerShell サンプルのテキストを表示またはコピーするには、このセクションのリンクを使用します。 Fabric Git 統合サンプル GitHub リポジトリですべての例を確認することもできます。
接続して更新する
このセクションでは、Git でワークスペースに接続して更新するときの手順について説明します。
完全なスクリプトについては、Git からの接続と更新に関するページをご覧ください。
サインインしてアクセス トークンを取得する - (サービス プリンシパルではなく) ユーザーとして Fabric にサインインします。 サインインするには、接続-AzAccount コマンドを使用します。 アクセス トークンを取得するには、Get-AzAccessToken コマンドを使用します。
コードは次のようになります。
$global:resourceUrl = "https://api.fabric.microsoft.com" $global:fabricHeaders = @{} function SetFabricHeaders() { #Login to Azure Connect-AzAccount | Out-Null # Get authentication $fabricToken = (Get-AzAccessToken -ResourceUrl $global:resourceUrl).Token $global:fabricHeaders = @{ 'Content-Type' = "application/json" 'Authorization' = "Bearer {0}" -f $fabricToken } }
接続 API を呼び出して、ワークスペースを Git リポジトリとブランチに接続します。
# Connect to Git Write-Host "Connecting the workspace '$workspaceName' to Git." $connectUrl = "{0}/workspaces/{1}/git/connect" -f $global:baseUrl, $workspace.Id # AzureDevOps details $azureDevOpsDetails = @{ gitProviderType = "AzureDevOps" organizationName = "<ORGANIZATION NAME>" projectName = "<PROJECT NAME>" repositoryName = "<REPOSITORY NAME>" branchName = "<BRANCH NAME>" directoryName = "<DIRECTORY NAME>" } $connectToGitBody = @{ gitProviderDetails =$azureDevOpsDetails } | ConvertTo-Json Invoke-RestMethod -Headers $global:fabricHeaders -Uri $connectUrl -Method POST -Body $connectToGitBody
Initialize 接続ion API を呼び出して、ワークスペースと Git リポジトリ/ブランチの間の接続を初期化します。
# Initialize Connection Write-Host "Initializing Git connection for workspace '$workspaceName'." $initializeConnectionUrl = "{0}/workspaces/{1}/git/initializeConnection" -f $global:baseUrl, $workspace.Id $initializeConnectionResponse = Invoke-RestMethod -Headers $global:fabricHeaders -Uri $initializeConnectionUrl -Method POST -Body "{}"
Initialize Connection API からの応答に基づいて、Update From Git API を呼び出して更新を完了するか、アクションが必要ない場合は何も行いません。
次のスクリプトは、更新を行って進行状況を監視します。
if ($initializeConnectionResponse.RequiredAction -eq "UpdateFromGit") { # Update from Git Write-Host "Updating the workspace '$workspaceName' from Git." $updateFromGitUrl = "{0}/workspaces/{1}/git/updateFromGit" -f $global:baseUrl, $workspace.Id $updateFromGitBody = @{ remoteCommitHash = $initializeConnectionResponse.RemoteCommitHash workspaceHead = $initializeConnectionResponse.WorkspaceHead } | ConvertTo-Json $updateFromGitResponse = Invoke-WebRequest -Headers $global:fabricHeaders -Uri $updateFromGitUrl -Method POST -Body $updateFromGitBody $operationId = $updateFromGitResponse.Headers['x-ms-operation-id'] $retryAfter = $updateFromGitResponse.Headers['Retry-After'] Write-Host "Long Running Operation ID: '$operationId' has been scheduled for updating the workspace '$workspaceName' from Git with a retry-after time of '$retryAfter' seconds." -ForegroundColor Green # Poll Long Running Operation $getOperationState = "{0}/operations/{1}" -f $global:baseUrl, $operationId do { $operationState = Invoke-RestMethod -Headers $global:fabricHeaders -Uri $getOperationState -Method GET Write-Host "Update from Git operation status: $($operationState.Status)" if ($operationState.Status -in @("NotStarted", "Running")) { Start-Sleep -Seconds $retryAfter } } while($operationState.Status -in @("NotStarted", "Running")) }
Git から更新する
このセクションでは、Git からの変更を使用してワークスペースを更新する手順について説明します。 このScriptでは、Git からの変更でワークスペース項目を更新しますが、Git リポジトリは変更されません。
完全なスクリプトについては、「Git からワークスペースを更新する」を参照してください。
- Git にログインして認証を取得します。
- Get Status API を呼び出して、Git 要求本文から更新をビルドします。
- Update From Git API を呼び出して、接続されたブランチにプッシュされたコミットでワークスペースを更新します。
すべてコミットする
このセクションでは、ワークスペースから Git にすべての変更をプログラムでコミットする方法について詳しく説明します。
完全なスクリプトについては、「すべての変更を Git にコミットする」を参照してください。
- Git にログインして認証を取得します。
- ワークスペースへ接続します。
- Commit to Git REST API を呼び出します。
- 操作の状態をポーリングするための長期間実行する OperationId を取得します。
選択的コミット
このセクションでは、ワークスペースから Git に特定の変更のみをコミットする手順について説明します。
完全なスクリプトは、「Git への変更のコミット選択」を参照してください。
- Git にログインして認証を取得します。
- ワークスペースへ接続します。
- Get status API を呼び出して、変更された項目ワークスペースを確認します。
- コミットする特定の項目を選択します。
- Commit to Git API を呼び出して、選択した変更をワークスペースから接続されたリモート ブランチにコミットします。
長期間実行する操作の進行状況を監視する
完全なスクリプトについては、「長期操作をポーリングする」を参照してください。
- Update From Git または Commit to Git スクリプトから operationId を取得します。
- 指定された間隔 (秒単位) で Get LRO Status API を呼び出して、状態を出力します。
考慮事項と制限事項
- API を使用した Git 統合には、Git 統合ユーザー インターフェイスと同じ制限があります。
- サービス プリンシパルはサポートされていません。
- 拡張更新 API を使ってセマンティック モデルを更新すると、更新のたびに Git diff が行われます。