Aracılığıyla paylaş


API'leri kullanarak Git tümleştirmeyi otomatikleştirme

Microsoft Fabric Git tümleştirme aracı, ekiplerin, Fabric içeriği için verimli ve yeniden kullanılabilir bir yayın süreci oluşturmak amacıyla kaynak denetimini kullanarak birlikte çalışmalarını sağlar.

Microsoft Fabric REST API'leriyle, görevleri daha hızlı ve daha az hatayla tamamlamak için Doku yordamlarını ve işlemlerini otomatikleştirebilirsiniz. Bu verimlilik, maliyet tasarrufuna ve üretkenliğin artırılmasına yol açar.

Bu makalede, Microsoft Fabric'te Git tümleştirmesini otomatikleştirmek için Git tümleştirme REST API'lerinin nasıl kullanılacağı açıklanmaktadır.

Prerequisites

Doku Git API'leriyle çalışmak için şunları yapmanız gerekir:

REST API'lerini PowerShell olmadan kullanabilirsiniz, ancak bu makaledeki betikler PowerShell'i kullanır. Betikleri çalıştırmak için aşağıdaki adımları izleyin:

Git tümleştirme API'si işlevleri

Git tümleştirme REST API'leri, içeriğinizin sürekli tümleştirmesini ve sürekli teslimini (CI/CD) gerçekleştirmenize yardımcı olabilir. API'leri kullanarak neler yapabileceğinize ilişkin birkaç örnek aşağıda verilmiştir:

Examples

Çeşitli yaygın otomasyon işlemlerinin nasıl gerçekleştirileceklerini anlamak için aşağıdaki PowerShell betiklerini kullanın. PowerShell örneğindeki metni görüntülemek veya kopyalamak için bu bölümdeki bağlantıları kullanın. Fabric Git tümleştirme örnekleri GitHub deposunda tüm örnekleri de görebilirsiniz.

Bağlanma ve güncelleştirme

Bu bölümde, git ile bir çalışma alanını bağlama ve güncelleştirme adımlarını açıklanmaktadır.

Betiğin tamamı için bkz . Git'ten bağlanma ve güncelleştirme. (Betik uyumluluğu PowerShell 5.1'dir)

  1. Azure hesabına bağlanın ve erişim belirteci alın - Doku'da kullanıcı veya hizmet sorumlusu olarak oturum açın. Bağlanmak için Connect-AzAccount komutunu kullanın. Erişim belirteci almak için Get-AzAccessToken komutunu kullanın ve güvenli dize belirtecini düz metne dönüştürün

    Kodunuz şuna benzer olmalıdır:

     $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. Çalışma alanını bir Git deposuna ve dala bağlamak için Connect API'sini çağırın. (önce bir bağlantı oluşturmanız gerekebilir)

    Bağlantı ayrıntılarını (Kimlik, Ad) edinme hakkında bilgi için Git sağlayıcısı kimlik bilgileri bağlantısını alma veya oluşturma bölümüne bakın.

    $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. Çalışma alanı ile Git deposu/dalı arasındaki bağlantıyı başlatmak için Bağlantı Başlatma API'sini çağırın.

    # 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. Bağlantı Başlatma API'sinden gelen yanıta bağlı olarak, güncelleştirmeyi tamamlamak için Git'ten Güncelleştirme API'sini çağırın veya herhangi bir eyleme gerek yoksa hiçbir şey yapma.

    Aşağıdaki betik ilerleme durumunu güncelleştirir ve izler:

    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'ten güncelleştirme

Bu bölümde, çalışma alanını Git'ten yapılan değişikliklerle güncelleştirme adımlarını açıklayacağız. Bu betikte çalışma alanı öğelerini Git'ten gelen değişikliklerle güncelleştiriyoruz, ancak Git deposunu değiştirmeden bırakıyoruz.

Betiğin tamamı için bkz Git'ten çalışma alanını güncelleştirme.

  1. Git'de oturum açın ve kimlik doğrulaması alın.
  2. Git istek gövdesinden güncelleştirmeyi derlemek için Get Status API'sini çağırın.
  3. Çalışma alanını bağlı dala gönderilen işlemelerle güncelleştirmek için Git'ten Güncelleştirme API'sini çağırın.

Hepsini taahhüt et

Bu bölümde, çalışma alanındaki tüm değişikliklerin Git'e programatik olarak nasıl iletileceğine dair adım adım bir açıklama sunulur.

Betiğin tamamı için bkz . Tüm değişiklikleri Git'e işleme.

  1. Git'de oturum açın ve kimlik doğrulaması alın.
  2. Çalışma alanına bağlanın.
  3. Git'e Commit REST API'sini çağırın.
  4. İşlemin durumunu sorgulamak için uzun süredir çalışan OperationId değerini alın.

Seçmeli Taahhüt

Bu bölümde, çalışma alanından Git'e yalnızca belirli değişikliklerin işlenmesiyle ilgili adımlar açıklanmaktadır.

Betiğin tamamı için bkz . Git'e seçme değişikliklerini işleme.

  1. Git'de oturum açın ve kimlik doğrulaması alın.
  2. Çalışma alanına bağlanın.
  3. Çalışma alanının hangi öğelerin değiştirildiğini görmek için Get status API'sini çağırın.
  4. Onaylamak için belirli öğeleri seçin.
  5. Seçilen değişiklikleri çalışma alanından bağlı uzak dala aktarmak için "Commit to Git" API'sini çağırın.

Uzun süre çalışan işlemlerin ilerleme durumunu izleme

Betiğin tamamı için Uzun Süre Çalışan Bir İşlemi Yoklama'ya bakın.

  1. Git'ten Güncelleştir veya Git'e Yükle betiğinden operationId değerini alın.
  2. Belirtilen aralıklarla (saniye) LRO Durum API'sini alma çağrısı yapın ve durumu yazdırın.

Git sağlayıcısı kimlik bilgileri bağlantısını alma veya oluşturma

Git deposuna bağlanmak veya Git kimlik bilgilerinizi güncelleştirmek için bir connectionId sağlamanız gerekir. connectionId, oluşturduğunuz yeni bir bağlantıdan veya mevcut bir bağlantıdan gelebilir.

Git kimlik bilgilerinizi depolayan yeni bir bağlantı oluşturma

Aşağıdaki kod parçacığı, Azure DevOps kimlik bilgilerinizi depolayan bir bağlantı oluşturmak için örnek istek gövdesini gösterir. Tam örnek Doku örnekleri deposunda bulunabilir.

# 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)

Örnek isteği

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>”
    }
  }
}
 

Örnek yanıt:

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

Mevcut bağlantıların listesini alma

İzinleriniz olan mevcut bağlantıların ve bunların özelliklerinin listesini almak için Bağlantıları listele API'sini kullanın.

Numune isteği

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

Örnek yanıt

{
 "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
   }
  }
 ]
}

İstediğiniz bağlantının kimliğini kopyalayın ve Git - Bağlan veya Git - Git Kimlik Bilgilerimi Güncelleştir API'sinde kullanın.

Dikkat edilecekler ve sınırlamalar

  • API'leri kullanarak Git tümleştirmesi, Git tümleştirme kullanıcı arabirimiyle aynı sınırlamalara tabidir.
  • Gelişmiş yenileme API'sini kullanarak bir anlam modelini yenilemek, her yenilemeden sonra Git farkına neden olur.