Αυτοματοποίηση ενοποίησης Git με χρήση API

Το εργαλείο ενοποίησης Microsoft Fabric Git επιτρέπει στις ομάδες να συνεργάζονται χρησιμοποιώντας τον έλεγχο προέλευσης για να δημιουργήσουν μια αποτελεσματική και επαναχρησιμοποιήσιμη διαδικασία κυκλοφορίας για το περιεχόμενό τους Fabric.

Με τα API REST του Microsoft Fabric, μπορείτε να αυτοματοποιήσετε διαδικασίες Fabric και να ολοκληρώσετε εργασίες ταχύτερα και με λιγότερα σφάλματα. Αυτή η αποδοτικότητα οδηγεί σε εξοικονόμηση κόστους και βελτιωμένη παραγωγικότητα.

Αυτό το άρθρο περιγράφει τον τρόπο χρήσης των API REST ενοποίησης Git για την αυτοματοποίηση της ενοποίησης Git στο Microsoft Fabric.

Prerequisites

Για να εργαστείτε με τα API Του Fabric Git, χρειάζεστε:

Μπορείτε να χρησιμοποιήσετε τα API REST χωρίς PowerShell, αλλά οι δέσμες ενεργειών σε αυτό το άρθρο χρησιμοποιούν PowerShell. Για να εκτελέσετε τις δέσμες ενεργειών, ακολουθήστε τα παρακάτω βήματα:

Συναρτήσεις API ενοποίησης Git

Τα API REST ενοποίησης Git μπορούν να σας βοηθήσουν να επιτύχετε συνεχή ενοποίηση και συνεχή παράδοση (CI/CD) του περιεχομένου σας. Ακολουθούν μερικά παραδείγματα σχετικά με το τι μπορεί να γίνει χρησιμοποιώντας τα API:

Examples

Χρησιμοποιήστε τις ακόλουθες δέσμες ενεργειών PowerShell για να κατανοήσετε τον τρόπο εκτέλεσης πολλών συνήθων διαδικασιών αυτοματισμού. Για να προβάλετε ή να αντιγράψετε το κείμενο σε ένα δείγμα PowerShell, χρησιμοποιήστε τις συνδέσεις σε αυτήν την ενότητα. Μπορείτε επίσης να δείτε όλα τα παραδείγματα στο αποθετήριο δεδομένων ενοποίησης Fabric Git δείγματα GitHub.

Σύνδεση και ενημέρωση

Αυτή η ενότητα περιγράφει τα βήματα που εμπλέκονται στη σύνδεση και την ενημέρωση ενός χώρου εργασίας με το Git.

Για την πλήρη δέσμη ενεργειών, ανατρέξτε στο θέμα Σύνδεση και ενημέρωση από το Git. (Η συμβατότητα δέσμης ενεργειών είναι PowerShell 5.1)

  1. Σύνδεση στον λογαριασμό Azure και λήψη διακριτικού πρόσβασης - Εισέλθετε στο 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
        $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. Καλέστε το API σύνδεσης για να συνδέσετε τον χώρο εργασίας σε ένα αποθετήριο και έναν κλάδο Git. (ίσως χρειαστεί πρώτα να δημιουργήσετε μια σύνδεση )

    Για πληροφορίες σχετικά με τον τρόπο απόκτησης των λεπτομερειών σύνδεσης (αναγνωριστικό, όνομα), ανατρέξτε στην ενότητα Λήψη ή δημιουργία σύνδεσης διαπιστευτηρίων υπηρεσίας παροχής 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. Καλέστε το 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. Καλέστε το API Λήψη κατάστασης για να δημιουργήσετε την ενημέρωση από το σώμα αίτησης Git.
  3. Καλέστε την Ενημέρωση από το Git API για να ενημερώσετε τον χώρο εργασίας με δεσμεύσεις που προωθούνται στη συνδεδεμένη διακλάδωση.

Δέσμευση όλων

Αυτή η ενότητα παρέχει μια αναλυτική περιγραφή του τρόπου δέσμευσης όλων των αλλαγών μέσω προγραμματισμού από τον χώρο εργασίας στο Git.

Για την πλήρη δέσμη ενεργειών, ανατρέξτε στο θέμα Δέσμευση όλων των αλλαγών στο Git.

  1. Συνδεθείτε στο Git και λάβετε έλεγχο ταυτότητας.
  2. Σύνδεση στον χώρο εργασίας.
  3. Καλέστε το API REST Δέσμευση στο Git .
  4. Λάβετε το OperationId μεγάλης διάρκειας για ανίχνευση της κατάστασης της λειτουργίας.

Επιλεκτική δέσμευση

Αυτή η ενότητα περιγράφει τα βήματα που εμπλέκονται στη δέσμευση μόνο συγκεκριμένων αλλαγών από τον χώρο εργασίας στο Git.

Για την πλήρη δέσμη ενεργειών, ανατρέξτε στο θέμα Δέσμευση αλλαγών στο Git.

  1. Συνδεθείτε στο Git και λάβετε έλεγχο ταυτότητας.
  2. Σύνδεση στον χώρο εργασίας.
  3. Καλέστε το API κατάστασης λήψης για να δείτε ποιος χώρος εργασίας στοιχείων άλλαξε.
  4. Επιλέξτε τα συγκεκριμένα στοιχεία για δέσμευση.
  5. Καλέστε την Δέσμευση στο Git API για να πραγματοποιήσετε τις επιλεγμένες αλλαγές από τον χώρο εργασίας στη συνδεδεμένη απομακρυσμένη διακλάδωση.

Παρακολούθηση της προόδου των λειτουργιών μεγάλης διάρκειας

Για την πλήρη δέσμη ενεργειών, ανατρέξτε στο θέμα Δημοσκόπηση μιας λειτουργίας μεγάλης διάρκειας.

  1. Ανακτήστε το operationId από την ενημέρωση από το Git ή τη δέσμη ενεργειών Δέσμευση στο Git .
  2. Καλέστε το API Λήψη κατάστασης LRO σε καθορισμένα διαστήματα (σε δευτερόλεπτα) και εκτυπώστε την κατάσταση.

Λήψη ή δημιουργία σύνδεσης διαπιστευτηρίων υπηρεσίας παροχής Git

Για να συνδεθείτε σε ένα αποθετήριο Git ή να ενημερώσετε τα διαπιστευτήριά σας στο Git , πρέπει να δώσετε ένα connectionId. Το connectionId μπορεί να προέρχεται είτε από μια νέα σύνδεση που δημιουργείτε είτε από μια υπάρχουσα σύνδεση.

Δημιουργήστε μια νέα σύνδεση που αποθηκεύει τα διαπιστευτήριά σας Git

Το παρακάτω τμήμα κώδικα εμφανίζει ένα δείγμα σώματος αίτησης για τη δημιουργία μιας σύνδεσης που αποθηκεύει τα διαπιστευτήριά σας Azure DevOps. Το πλήρες παράδειγμα μπορεί να βρεθεί στο αποθετήριο δειγμάτων 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)

Δείγμα αιτήματος

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

Δείγμα απόκρισης:

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

Λήψη λίστας υπαρχουσών συνδέσεων

Χρησιμοποιήστε το API συνδέσεων λίστας για να λάβετε μια λίστα με τις υπάρχουσες συνδέσεις για τις οποίες έχετε δικαιώματα και τις ιδιότητές τους.

Δείγμα αίτησης

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

Δείγμα απόκρισης

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

Αντιγράψτε το αναγνωριστικό της σύνδεσης που θέλετε και χρησιμοποιήστε το στο API Git - Σύνδεση ή Git - Ενημέρωση του API διαπιστευτηρίων μου Git .

Ζητήματα προς εξέταση και περιορισμοί

  • Η ενσωμάτωση του Git με χρήση API υπόκειται στους ίδιους περιορισμούς με τη διεπαφή χρήστη ενσωμάτωσης Git.
  • Η ανανέωση ενός σημασιολογικού μοντέλου με χρήση του API Βελτιωμένης ανανέωσης προκαλεί μια διαφορά Git μετά από κάθε ανανέωση.
  • Σφάλμα: 'Εντοπίστηκαν στοιχεία με λογικά αναγνωριστικά σε διένεξη' - οι χρήστες που εκτελούν το InitializeGitConnection API, ενδέχεται να αντιμετωπίσουν μια κατάσταση όπου εντοπίζεται μια διένεξη μεταξύ λογικών αναγνωριστικών στον χώρο εργασίας και το αποθετήριο git, για να μάθετε περισσότερα σχετικά με αυτήν την κατάσταση, ακολουθήστε τις διενέξεις λογικών αναγνωριστικών στο Microsoft Fabric. Για να επιλύσει αυτό το ζήτημα, ο χρήστης μπορεί είτε να μετονομάσει το όνομα του στοιχείου σε διένεξη είτε να αλλάξει το λογικό αναγνωριστικό στο απομακρυσμένο Git ώστε να ταιριάζει με αυτό στον χώρο εργασίας με βάση τις πληροφορίες που δίνονται στην απόκριση σφάλματος.