Sdílet prostřednictvím


Automatizace integrace Gitu pomocí rozhraní API

Nástroj pro integraci Git v Microsoft Fabric umožňuje týmům spolupracovat pomocí správy zdrojového kódu k vytvoření efektivního a znovu použitelného vydávacího procesu pro jejich obsah ve Fabricu.

Pomocí rozhraní REST API Microsoft Fabric můžete automatizovat postupy a procesy infrastruktury, abyste mohli provádět úkoly rychleji a s menším počtem chyb. Tato efektivita vede k úsporám nákladů a vyšší produktivitě.

Tento článek popisuje, jak pomocí rozhraní REST API integrace Gitu automatizovat integraci Gitu v Microsoft Fabric.

Prerequisites

Pokud chcete pracovat s rozhraními API Gitu pro Fabric, potřebujete:

Rozhraní REST API můžete použít bez PowerShellu, ale skripty v tomto článku používají PowerShell. Pokud chcete skripty spustit, proveďte následující kroky:

Funkce rozhraní API pro integraci Gitu

Rozhraní REST API pro integraci Gitu vám mohou pomoci dosáhnout kontinuální integrace a doručování (CI/CD) vašeho obsahu. Tady je několik příkladů toho, co je možné provést pomocí rozhraní API:

Examples

Následující skripty PowerShellu vám pomohou pochopit, jak provádět několik běžných procesů automatizace. Pokud chcete zobrazit nebo zkopírovat text v ukázce PowerShellu, použijte odkazy v této části. Můžete se také podívat na všechny příklady v úložišti GitHub s ukázkami integrace Fabric Git.

Připojení a aktualizace

Tato část popisuje kroky spojené s připojením a aktualizací pracovního prostoru pomocí Gitu.

Úplný skript najdete v tématu Připojení a aktualizace z Gitu. (Kompatibilita skriptů je PowerShell 5.1)

  1. Připojte se k účtu Azure a získejte přístupový token – Přihlaste se k Fabric jako uživatel nebo instanční objekt. K připojení použijte příkaz Connect-AzAccount . Pokud chcete získat přístupový token, použijte příkaz Get-AzAccessToken a převeďte token zabezpečeného řetězce na prostý text.

    Váš kód by měl vypadat přibližně takto:

     $global:resourceUrl = "https://api.fabric.microsoft.com"
    
     $global:fabricHeaders = @{}
    
     function SetFabricHeaders() {
    
        #Login to Azure
        Connect-AzAccount | Out-Null
    
        # Get authentication
        $secureFabricToken = (Get-AzAccessToken -AsSecureString -ResourceUrl $global:resourceUrl).Token
    
        # Convert secure string to plain test
        $ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureFabricToken)
        try {
            $fabricToken = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
        } finally {
            [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
       }
    
      $global:fabricHeaders = @{
         'Content-Type' = "application/json"
         'Authorization' = "Bearer {0}" -f $fabricToken
     }
    }
    
  2. Voláním rozhraní CONNECT API připojte pracovní prostor k úložišti a větvi Gitu. (možná budete muset nejprve vytvořit připojení )

    Informace o tom, jak získat podrobnosti o připojení (ID, název), najdete v části Získání nebo vytvoření připojení k přihlašovacím údajům poskytovatele Git.

    $global:baseUrl = "https://api.fabric.microsoft.com/v1"
    $workspaceName = "<WORKSPACE NAME>"
    $getWorkspacesUrl = "{0}/workspaces" -f $global:baseUrl
    $workspaces = (Invoke-RestMethod -Headers $global:fabricHeaders -Uri $getWorkspacesUrl -Method GET).value
    
    # Find the workspace by display name
    $workspace = $workspaces | Where-Object {$_.DisplayName -eq $workspaceName}
    
    # 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 = @{}
    #Leave only one of the following two (delete the other one):
    #-----------------------------------------------------------------------------------------------
    # 1. Automatic (SSO)
    $connectToGitBody = @{
        gitProviderDetails = $gitProviderDetails
    } | ConvertTo-Json
    #-----------------------------------------------------------------------------------------------
    # 2. ConfiguredConnection (User or service principal)
    # Get workspaces
    $connectionName = "<CONNECTION Name>"
    $getConnectionsUrl = "{0}/connections" -f $global:baseUrl
    $connections = (Invoke-RestMethod -Headers $global:fabricHeaders -Uri $getConnectionsUrl -Method GET).value
    
    # Find the connection by display name
    $connection = $connections | Where-Object {$_.DisplayName -eq $connectionName}
    $connectToGitBody = @{
        gitProviderDetails = $azureDevOpsDetails
        myGitCredentials = @{
            source = "ConfiguredConnection"
            connectionId = $connection.id
            }
        } | ConvertTo-Json
    #-----------------------------------------------------------------------------------------------
    
    Invoke-RestMethod -Headers $global:fabricHeaders -Uri $connectUrl -Method POST -Body $connectToGitBody
    
  3. Voláním rozhraní API pro inicializaci připojení inicializujete připojení mezi pracovním prostorem a úložištěm nebo větví Gitu.

    # 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. Na základě odpovědi z rozhraní API pro inicializaci připojení zavolejte buď API Aktualizovat z Gitu pro dokončení aktualizace, nebo neprovádějte žádnou akci, pokud není vyžadována.

    Následující skript aktualizuje a sleduje průběh:

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

Aktualizace z Gitu

V této části popisujeme kroky, které se týkají aktualizace pracovního prostoru pomocí změn z Gitu. V tomto skriptu aktualizujeme položky pracovního prostoru změnami z Gitu, ale úložiště Git ponecháme beze změny.

Úplný skript najdete v tématu Aktualizace pracovního prostoru z Gitu.

  1. Přihlaste se k Gitu a získejte ověřování.
  2. Voláním API 'Get Status' se sestaví aktualizace z těla požadavku z Gitu.
  3. Voláním rozhraní API Update From Git aktualizujte pracovní prostor potvrzeními nahranými do připojené větve.

Potvrdit vše

Tato část obsahuje podrobný popis toho, jak programově potvrdit všechny změny z pracovního prostoru na Git.

Úplný skript najdete v tématu Potvrzení všech změn do Gitu.

  1. Přihlaste se k Gitu a získejte ověřování.
  2. Připojte se k pracovnímu prostoru.
  3. Zavolejte REST API Commit to Git.
  4. Získejte ID operace Long Running pro dotazování stavu operace.

Selektivní komit

Tato část popisuje kroky, které se týkají potvrzení pouze konkrétních změn z pracovního prostoru do Gitu.

Úplný skript najdete v tématu Potvrzení změn v Gitu.

  1. Přihlaste se k Gitu a získejte ověřování.
  2. Připojte se k pracovnímu prostoru.
  3. Zavolejte rozhraní API pro získání stavu, abyste zjistili, které položky ve workspace byly změněny.
  4. Vyberte konkrétní položky, které chcete potvrdit.
  5. Voláním příkazu Commit to Git API potvrďte vybrané změny z pracovního prostoru do připojené vzdálené větve.

Monitorování průběhu dlouhotrvajících operací

Úplný skript najdete v tématu Průzkum běžící operace.

  1. Načtěte operationId ze skriptu Aktualizace z Git nebo Závazek ke Git.
  2. Zavolejte rozhraní API pro získání stavu LRO v zadaných intervalech (v sekundách) a vytiskněte stav.

Získání nebo vytvoření připojení k systému pro správu Git pomocí přihlašovacích údajů

Pokud se chcete připojit k úložišti Git nebo aktualizovat přihlašovací údaje Gitu , musíte zadat ID připojení. ID připojení může pocházet z nového připojení, které vytvoříte, nebo z existujícího připojení.

Vytvoření nového připojení, které ukládá vaše přihlašovací údaje Gitu

Následující fragment kódu ukazuje ukázkový text požadavku pro vytvoření připojení, které ukládá vaše přihlašovací údaje Azure DevOps. Úplný příklad najdete v repozitáři ukázek Fabric.

# Connection with ServicePrincipal details for AzureDevOpsSourceControl
$adoSPConnection = @{
    connectivityType = "ShareableCloud"
    displayName = "<CONNECTION NAME>"
    connectionDetails = @{
        type = "AzureDevOpsSourceControl"
        creationMethod = "AzureDevOpsSourceControl.Contents"
        parameters = @(
            @{
                dataType = "Text"
                name = "url"
                value = "<Repo url in Azure DevOps>"
            }
        )
    }
    credentialDetails = @{
        credentials = @{
            credentialType = "ServicePrincipal"
            tenantId = "<SP tenant (directory) id (Guid)>"
            servicePrincipalClientId = "<SP APP (client) id (Guid)>"
            servicePrincipalSecret = "<SP Secret>"
        }
    }
}

#Note: AzureDevOps for UserPrincipal is not supported (since it requires interactive OAuth2)

Ukázkový požadavek

POST https://api.fabric.microsoft.com/v1/connections

{
  "displayName": "<CONNECTION NAME>",
  "connectivityType": "ShareableCloud",
  "connectionDetails": {
    "creationMethod": "AzureDevOpsSourceControl.Contents",
    "type": "AzureDevOpsSourceControl",
    "parameters": [
     {
      "dataType": "Text",
      "name": "url",
      "value": "<Repo url in Azure DevOps>”
     }
    ]
  },
  "credentialDetails": {
    "credentials": {
      "credentialType": "ServicePrincipal",
      "tenantId": “<SP tenant (directory) id (Guid)>”,
      "servicePrincipalClientId": “<SP APP (client) id (Guid)>”,
      "servicePrincipalSecret": “<SP Secret>”
    }
  }
}
 

Ukázková odpověď:

{
  "allowConnectionUsageInGateway": false,
  "id": "********-****-****-****-c13b543982ac",
  "displayName": "<CONNECTION NAME>",
  "connectivityType": "ShareableCloud",
  "connectionDetails": {
    "path": "<Repo url in Azure DevOps>",
    "type": "AzureDevOpsSourceControl"
  },
  "privacyLevel": "Organizational",
  "credentialDetails": {
    "credentialType": "ServicePrincipal",
    "singleSignOnType": "None",
    "connectionEncryption": "NotEncrypted",
    "skipTestConnection": false
  }
}

Získání seznamu existujících připojení

Pomocí rozhraní API seznam připojení získejte seznam existujících připojení, ke kterým máte oprávnění, a jejich vlastnosti.

Ukázkový požadavek

GET https://api.fabric.microsoft.com/v1/connections

Ukázková odpověď

{
 "value": [
  {
   "id": "e3607d15-6b41-4d11-b8f4-57cdcb19ffc8",
   "displayName": "MyGitHubPAT1",
   "gatewayId": null,
   "connectivityType": "ShareableCloud",
   "connectionDetails": {
    "path": "https://github.com",
    "type": "GitHubSourceControl"
   },
   "privacyLevel": "Organizational",
   "credentialDetails": {
    "credentialType": "Key",
    "singleSignOnType": "None",
    "connectionEncryption": "NotEncrypted",
    "skipTestConnection": false
   }
  },
  {
   "id": "3aba8f7f-d1ba-42b1-bb41-980029d5a1c1",
   "displayName": "MyGitHubPAT2",
   "gatewayId": null,
   "connectivityType": "ShareableCloud",
   "connectionDetails": {
    "path": "https://github.com/OrganizationName/RepositoryName",
    "type": "GitHubSourceControl"
   },
   "privacyLevel": "Organizational",
   "credentialDetails": {
    "credentialType": "Key",
    "singleSignOnType": "None",
    "connectionEncryption": "NotEncrypted",
    "skipTestConnection": false
   }
  }
 ]
}

Zkopírujte ID požadovaného připojení a použijte ho v Gitu – Připojit nebo Git – Aktualizujte moje rozhraní API pro přihlašovací údaje Gitu .

Úvahy a omezení