共用方式為


使用 API 自動化 Git 整合

Microsoft Fabric Git 整合工具可讓團隊使用原始檔控制共同合作,為其 Fabric 內容建置有效率並可再使用的釋出程序。

有了 Microsoft Fabric REST API,您可以將 Fabric 程序和程序自動化,以更快完成工作,同時減少錯誤。 此效率可節省成本並提升生產力。

本文說明如何使用 Git 整合 REST API,將 Microsoft Fabric 中的 Git 整合自動化。

必要條件

若要使用 Fabric Git API,您需要:

您可以使用不含 PowerShell 的 REST API,但本文中的指令碼會使用 PowerShell。 若要執行指令碼,您必須採取下列步驟:

Git 整合 API 函数

Git 整合 REST API 有助於您達成內容的持續整合與持續傳遞 (CI/CD)。 以下是一些使用 API 可以完成的範例:

範例

使用下列 PowerShell 指令碼來了解如何執行數個常見的自動化程序。 若要檢視或複製 PowerShell 範例中的文字,請使用本節中的連結。 您也可以在 Fabric Git 整合範例 GitHub 存放庫中查看所有範例。

線上和更新

本節說明使用 Git 連線和更新工作區所涉及的步驟。

如需完整的腳本,請參閱 從 Git 連線和更新。

  1. 登入並取得存取權仗 - 以使用者的身分登入 Fabric (而非服務主體)。 請使用 Connect-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
        }
    }
    
  2. 呼叫 Connect 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
    
  3. 呼叫 Initialize Connection 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 "{}"
    
  4. 根據初始化連線 API 的回應,呼叫 從 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 的變更來更新工作區所涉及的步驟。 在此指令碼中,我們會使用 Git 的變更來更新工作區項目,但我們會保持 Git 存放庫不變。

如需完整的指令碼,請參閱<更新 Git 的工作區>。

  1. 登入 Git 並取得驗證。
  2. 呼叫 Get Status API,以從 Git 要求本文建置更新。
  3. 呼叫 Update From Git API ,以使用推送至連線分支的認可更新工作區。

全部認可

本節提供如何以程式設計方式將工作區的所有變更認可至 Git 的逐步說明。

如需完整的指令碼,請參閱<將所有變更認可至 Git>。

  1. 登入 Git 並取得驗證。
  2. 連線到工作區。
  3. 呼叫認可至 Git REST API。
  4. 取得長時間執行的 OperationId,以輪詢作業的狀態。

選擇性認可

本節說明僅將工作區中的特定變更認可至 Git 所涉及的步驟。

如需完整的指令碼,請參閱<將選取的變更認可至 Git>。

  1. 登入 Git 並取得驗證。
  2. 連線到工作區。
  3. 呼叫 Get status API 以查看哪些項目工作區已變更。
  4. 選取要認可的特定項目。
  5. 呼叫認可 至 Git API,將選取的變更從工作區認可到連線的遠端分支。

監視長時間執行作業的進度

如需完整的指令碼,請參閱<輪詢長時間執行的作業>。

  1. Git 更新或認可至 Git 腳本擷取 operationId。
  2. 以指定的間隔呼叫取得 LRO 狀態 API(以秒為單位),並列印狀態。

考量與限制

  • 使用 API 的 Git 整合與 Git 整合使用者介面同樣受限於相同的限制
  • 不支援服務主體。
  • 若使用增強式重新整理 API 重新整理語意模型,系統會在每次重新整理之後產生 Git 差異