Partager via


Automatisation de l’intégration de Git à l’aide d’API

L’outil d’intégration Git de Microsoft Fabric permet aux équipes de travailler ensemble en utilisant le contrôle de code source pour créer un processus de publication efficace et réutilisable pour leur contenu Fabric.

Avec les API REST de Microsoft Fabric, vous pouvez automatiser les procédures et les processus Fabric afin d’accomplir les tâches plus rapidement et avec moins d’erreurs. Cette efficacité permet de réduire les coûts et d’améliorer la productivité.

Cet article explique comment utiliser les API REST d’intégration Git pour automatiser l’intégration Git dans Microsoft Fabric.

Prérequis

Pour travailler avec les API Git Fabric, vous avez besoin de :

Vous pouvez utiliser les API REST sans PowerShell, mais les scripts de cet article utilisent PowerShell. Pour exécuter les scripts, procédez comme suit :

Fonctions API d’intégration Git

Les API REST d’intégration Git peuvent vous aider à réaliser l’intégration continue et la livraison continue (CI/CD) de votre contenu. Voici quelques exemples de ce qu’il est possible de faire en utilisant les API :

Exemples

Utilisez les scripts PowerShell suivants pour comprendre comment exécuter plusieurs processus d’automatisation. Pour visualiser ou copier le texte d’un exemple PowerShell, utilisez les liens fournis dans cette section. Vous pouvez également voir tous les exemples dans le référentiel GitHub Exemples d’intégration de Git Fabric.

Se connecter et mettre à jour

Cette section décrit les étapes de la connexion et de la mise à jour d’un espace de travail avec Git.

Pour obtenir le script complet, consultez Se connecter et mettre à jour à partir de Git. (La compatibilité de script est PowerShell 5.1)

  1. Connectez-vous au compte Azure et obtenez un jeton d’accès - Connectez-vous à Fabric en tant qu’utilisateur (ou, si vous utilisez GitHub, un utilisateur ou un principal de service). Utilisez la commande Connect-AzAccount pour vous connecter. Pour obtenir un jeton d’accès, utilisez la commande Get-AzAccessToken et convertissez le jeton de chaîne sécurisé en texte brut

    Votre code doit ressembler à ceci :

     $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. Appelez l’API Connect pour connecter l’espace de travail à un référentiel et une branche Git. (vous devrez peut-être créer une connexion( en premier)

    $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 = @{
        gitProviderDetails = $azureDevOpsDetails
    } | ConvertTo-Json
    
    Invoke-RestMethod -Headers $global:fabricHeaders -Uri $connectUrl -Method POST -Body $connectToGitBody
    
  3. Appelez l’API Initialize Connection pour initialiser la connexion entre l’espace de travail et le référentiel/branche 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. En fonction de la réponse de l’API Initialize Connection, appelez l’API Update From Git pour terminer la synchronisation, ou ne faites rien si aucune action n’est requise.

    Le script suivant met à jour et surveille la progression :

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

Mettre à jour à partir de Git

Dans cette section, nous décrivons les étapes de la mise à jour d’un espace de travail avec les modifications de Git. Dans ce script, nous mettons à jour les éléments de l’espace de travail avec les modifications de Git, mais nous laissons le référentiel Git inchangé.

Pour obtenir le script complet, consultez Mettre à jour l’espace de travail à partir de Git.

  1. Connectez-vous à Git et obtenez l’authentification.
  2. Appelez l’API Get Status pour générer la mise à jour depuis le corps de la demande Git.
  3. Appelez l’API Update From Git pour mettre à jour l’espace de travail avec les validations envoyées à la branche connectée.

Valider tout

Cette section fournit une description étape par étape de la validation programmatique de toutes les modifications de l’espace de travail vers Git.

Pour obtenir le script complet, consultez Commiter toutes les modifications apportées à Git.

  1. Connectez-vous à Git et obtenez l’authentification.
  2. Connectez-vous à l’espace de travail.
  3. Appelez l’API REST Commit to Git.
  4. Obtenez l’OperationId durable pour interroger l’état de l’opération.

Validation sélective

Cette section décrit les étapes à suivre pour valider uniquement des modifications spécifiques de l’espace de travail vers Git.

Pour le script complet, consultez Valider les modifications sélectionnées vers Git.

  1. Connectez-vous à Git et obtenez l’authentification.
  2. Connectez-vous à l’espace de travail.
  3. Appelez l’API Get status pour voir quels éléments de l’espace de travail ont été modifiés.
  4. Sélectionnez les éléments spécifiques à valider.
  5. Appelez l’API Commit To Git pour valider les modifications sélectionnées de l’espace de travail vers la branche distante connectée.

Suivi du progrès des opérations de longue durée

Pour obtenir le script complet, consultez Effectuer un sondage sur une opération de longue durée.

  1. Récupérez l’operationId du script Update From Git ou Commit to Git.
  2. Appelez l’API Obtenir l’état LRO à intervalles spécifiés (en secondes) et imprimez l’état.

Obtenir ou créer une connexion aux identifiants du fournisseur Git

Pour vous connecter à un référentiel Git ou mettre à jour vos informations d’identification Git , vous devez fournir un id de connexion. L’ID de connexion peut provenir d’une nouvelle connexion que vous créez ou d’une connexion existante.

Créer une connexion qui stocke vos informations d’identification GitHub

Utilisez votre jeton d’accès personnel (PAT) pour créer une connexion GitHub.

Si vous fournissez le nom d’un dépôt spécifique, votre connexion est étendue à ce dépôt. Si vous ne fournissez pas le nom d’un dépôt, vous obtenez l’accès à tous les dépôts dont vous disposez.

Pour créer une connexion qui stocke vos informations d’identification GitHub, appelez l’API Créer une connexion avec le corps de la requête suivant. La section paramètres est facultative et nécessaire uniquement si vous souhaitez que votre connexion soit étendue à un référentiel spécifique.

Exemple de requête

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

{
 "connectivityType": "ShareableCloud",
 "displayName": "MyGitHubPAT",
 "connectionDetails": {
  "type": "GitHubSourceControl",
  "creationMethod": "GitHubSourceControl.Contents",
  "parameters": [
   {
    "dataType": "Text",
    "name": "url",
    "value": "https://github.com/OrganizationName/RepositoryName"
   }
  ]
 },
 "credentialDetails": {
  "credentials": {
   "credentialType": "Key",
   "key": "*********"  //Enter your GitHub Personal Access Token
  }
 }
}

Exemple de réponse :

{
  "id": "3aba8f7f-d1ba-42b1-bb41-980029d5a1c1",
   "connectionDetails": {
       "path": "https://github.com/OrganizationName/RepositoryName",
       "type": "GitHubSourceControl"
   },
   "connectivityType": "ShareableCloud",
   "credentialDetails": {
       "connectionEncryption": "NotEncrypted",
       "credentialType": "Key",
       "singleSignOnType": "None",
       "skipTestConnection": false
   },
   "displayName": "MyGitHubPAT",
   "gatewayId": null,
   "privacyLevel": "Organizational"
}

Copiez l’ID et utilisez-le dans l’API Git - Se connecter ou Git - Mettre à jour mes informations d’identification Git .

Obtenir la liste des connexions existantes

Utilisez l’API Répertorier les connexions pour obtenir la liste des connexions existantes pour lesquelles vous disposez des autorisations et de leurs propriétés.

Exemple de requête

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

Exemple de réponse

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

Copiez l’ID de la connexion souhaitée et utilisez-la dans l’API Git - Se connecter ou Git - Mettre à jour mes informations d’identification Git .

Observations et limitations

  • L’intégration Git à l’aide d’API est soumise aux mêmes limitations que l’interface utilisateur de l’intégration Git.
  • Le principal de service n’est pris en charge que pour GitHub.
  • L’actualisation d’un modèle sémantique en utilisant l’API Actualisation améliorée provoque un diff Git après chaque actualisation.