Freigeben über


Automatisieren der Git-Integration mithilfe von APIs

Mit dem Microsoft Fabric-Tool zur Git-Integration können Teams zusammenarbeiten, um mit Hilfe von Quellcodeverwaltung einen effizienten und wiederverwendbaren Releaseprozess für ihre Fabric-Inhalte zu erstellen.

Mit der Microsoft Fabric-REST-API können Sie Fabric-Vorgehensweisen und -Prozesse automatisieren, um Aufgaben schneller und mit weniger Fehlern zu erledigen. Dieses effiziente Verfahren führt zu Kosteneinsparungen und Produktivitätssteigerungen.

In diesem Artikel wird beschrieben, wie Sie die die Git-Integration in Microsoft Fabric mit Hilfe der Git-Integrations-REST-API automatisieren.

Voraussetzungen

Um mit Fabric-Git-APIs zu arbeiten, benötigen Sie:

Sie können die REST-API ohne PowerShell verwenden; die Skripts in diesem Artikel nutzen aber PowerShell. Um die Skripts ausführen zu können, müssen Sie folgende Schritte unternehmen:

API-Funktionen zur Git-Integration

Die GIT-Integrations-REST-API können Ihnen dabei helfen, Ihre Inhalte kontinuierlich zu integrieren und bereitzustellen (Continuous Integration und Continuous Delivery; CI/CD). Im Folgenden finden Sie einige Beispiele dafür, was mithilfe der API möglich ist:

Beispiele

Verwenden Sie die folgenden PowerShell-Skripts, um herauszufinden, wie mehrere geläufige Automatisierungsprozesse ausgeführt werden. Verwenden Sie die Links in diesem Abschnitt, um den Text in einem PowerShell-Beispiel anzuzeigen oder zu kopieren. Sie können alle Beispiele auch im GitHub-Repositorys der Fabric Git-Integrationsbeispiele sehen.

Verbinden und aktualisieren

Dieser Abschnitt erklärt, welche Schritte erforderlich sind, um einen Arbeitsbereich mit Git zu verbinden und zu aktualisieren.

Sie finden das vollständige Skript unter Mit Git verbinden und von dort aktualisieren.

  1. Melden Sie sich an und erhalten Sie Zugriffstoken – Melden Sie sich als Benutzer in Fabric an (kein Dienstprinzipal). Führen Sie zum Anmelden den Befehl Connect-AzAccount aus. Verwenden Sie den Befehl Get-AzAccessToken, um ein Zugriffstoken zu erhalten.

    Ihr Code sollte in etwa wie folgt aussehen:

    $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. Rufen Sie die Connect-API auf, um den Arbeitsbereich mit einem Git-Repository und einer Verzweigung zu verbinden.

    
    # 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. Rufen Sie die Initialize-Connection-API auf, um die Verbindung zwischen dem Arbeitsbereich und der Git-Repository-Verzweigung zu initialisieren.

     # 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. Rufen Sie je nach Antwort der Initialize Connection-API die Update from Git-API auf, um die Synchronisierung abzuschließen, oder führen Sie keine Aktion aus, wenn keine erforderlich ist.

    Das folgende Skript aktualisiert und überwacht den Fortschritt:

    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"))
    }
    

Aus Git aktualisieren

In diesem Abschnitt beschreiben wir die Schritte, die zur Aktualisierung eines Arbeitsbereichs mit den Änderungen aus Git erforderlich sind. In diesem Skript aktualisieren wir die Arbeitsbereichselemente mit Änderungen aus Git, lassen das Git-Repository dabei aber unverändert.

Das vollständige Skript finden Sie unter Aktualisieren des Arbeitsbereichs aus Git.

  1. Melden Sie sich bei Git an und rufen Sie die Authentifizierung ab.
  2. Rufen Sie die Get-Status-API auf, um das Update aus dem Git-Anforderungstext zu erstellen.
  3. Rufen Sie die Update-From-Git-API auf, um den Arbeitsbereich mit Commits zu aktualisieren, die an die verbundene Verzweigung gepushed werden.

Commit für alle

Dieser Abschnitt enthält eine schrittweise Beschreibung, wie sämtliche Änderungen vom Arbeitsbereich programmgesteuert auf Git committet werden.

Das vollständige Skript finden Sie unter Alle Änderungen an Git committen.

  1. Melden Sie sich bei Git an und rufen Sie die Authentifizierung ab.
  2. Stellen Sie eine Verbindung zum Arbeitsbereich her
  3. Rufen Sie die Commit to Git-REST-API auf.
  4. Nutzen Sie die Long Running OperationId, um den Status des Vorgangs abzurufen.

Selektive Commits

In diesem Abschnitt werden die Schritte erläutert, mit denen Sie nur bestimmte Änderungen vom Arbeitsbereich in Git committen können.

Das vollständige Skript finden Sie unter Ausgewählte Änderungen an Git committen.

  1. Melden Sie sich bei Git an und rufen Sie die Authentifizierung ab.
  2. Stellen Sie eine Verbindung zum Arbeitsbereich her
  3. Rufen Sie die Get-Status-API auf, um zu sehen, welche Elemente im Arbeitsbereich geändert wurden.
  4. Wählen Sie nur jene Elemente aus, die Sie committen möchten.
  5. Rufen Sie die Commit to Git-API auf, um die ausgewählten Änderungen vom Arbeitsbereich in die verbundene Remoteverzweigung zu committen.

Überwachen Sie den Verlauf zeitintensiver Vorgänge

Ein vollständiges Skript finden Sie unter Abruf einer lang laufenden Operation.

  1. Rufen Sie die operationId aus dem einem der Skripts Update from Git oder Commit to Git ab.
  2. Rufen Sie die Get LRO Status-API in festgelegten Intervallen auf, und drucken Sie den Status.

Überlegungen und Einschränkungen

  • Die Git-Integration mit Hilfe von API unterliegt den gleichen Einschränkungen wie die Git-Integrations-Benutzeroberfläche.
  • Dienstprinzipale werden nicht unterstützt.
  • Das Aktualisieren eines semantischen Modells mit der erweiterten Aktualisierungs-API führt nach jeder Aktualisierung zu einem Git-diff.