Поделиться через


Автоматизация интеграции Git с помощью API

Инструмент интеграции Git в Microsoft Fabric позволяет командам совместно работать с помощью системы управления версиями для создания эффективного и многократно используемого процесса выпуска для содержимого Fabric.

С помощью интерфейсов REST API Microsoft Fabric вы можете автоматизировать процедуры и процессы Microsoft Fabric для более быстрого выполнения задач и уменьшения количества ошибок. Эта эффективность приводит к экономии затрат и повышению производительности.

В этой статье описывается, как использовать REST API интеграции Git для автоматизации интеграции Git в Microsoft Fabric.

Предварительные условия

Чтобы работать с API-интерфейсами Git Fabric, вам потребуется:

Интерфейсы REST API можно использовать без PowerShell, но скрипты в этой статье используют PowerShell. Чтобы запустить скрипты, выполните следующие действия.

Функции API интеграции Git

REST API для интеграции Git могут помочь вам достичь непрерывной интеграции и доставки контента (CI/CD). Ниже приведены несколько примеров того, что можно сделать с помощью API:

Примеры

Используйте следующие сценарии PowerShell, чтобы понять, как выполнять несколько распространенных процессов автоматизации. Чтобы просмотреть или скопировать текст в примере PowerShell, используйте ссылки в этом разделе. Вы также можете просмотреть все примеры в репозитории GitHub с примерами интеграции Fabric через Git.

Подключение и обновление

В этом разделе описаны шаги, связанные с подключением и обновлением рабочей области с помощью Git.

Полный сценарий см. в разделе "Подключение и обновление" из Git. (Совместимость скрипта — PowerShell 5.1)

  1. Подключитесь к учетной записи Azure и получите токен доступа. Войдите в Fabric как пользователь (или, если используется GitHub, как пользователь или как субъект-служба). Используйте команду 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 Connect, чтобы подключить рабочую область к репозиторию и ветви 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 = @{
        gitProviderDetails = $azureDevOpsDetails
    } | 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 инициализации подключения вызовите API Update From Git для завершения обновления или не выполняйте никаких действий, если никаких действий не требуется.

    Следующий скрипт обновляет и отслеживает ход выполнения.

    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. Вызовите API Update From Git, чтобы обновить рабочую область коммитами, отправленными в подключенную ветвь.

Зафиксировать все

В этом разделе приведено пошаговое описание того, как программно зафиксировать все изменения из рабочей области в Git.

Полный скрипт см. в разделе "Фиксация всех изменений в Git".

  1. Войдите в Git и получите проверку подлинности.
  2. Подключитесь к рабочей области.
  3. Вызовите REST API Commit to Git.
  4. Получите идентификатор длительной выполняемой операции для опроса о состоянии данной операции.

Выборочный коммит

В этом разделе описаны шаги, связанные с фиксацией только определенных изменений из рабочей области в Git.

Полный сценарий см. в разделе Коммит выбранных изменений в Git.

  1. Войдите в Git и получите проверку подлинности.
  2. Подключитесь к рабочей области.
  3. Вызовите API Получить статус, чтобы узнать, какие элементы в рабочем пространстве были изменены.
  4. Выберите определенные элементы для подтверждения.
  5. Вызовите API Commit to Git, чтобы зафиксировать выбранные изменения из рабочей области в подключённую удалённую ветвь.

Отслеживайте ход выполнения длительных операций

Для получения полного сценария см. раздел "Опрос состояния длительно выполняющейся операции".

  1. Получите идентификатор операции из скрипта Update From Git или Commit to Git.
  2. Вызовите API Get LRO Status через указанные интервалы (в секундах) и выведите статус на экран.

Получение или создание подключения к учетным данным поставщика Git

Чтобы подключиться к репозиторию Git или обновить учетные данные Git , необходимо предоставить идентификатор подключения. Идентификатор подключения может поступать из нового создаваемого подключения или существующего подключения.

Создание нового подключения, которое хранит учетные данные GitHub

Используйте личный маркер доступа (PAT) для создания подключения GitHub.

Если указать имя определенного репозитория, подключение будет ограничено этим репозиторием. Если имя репозитория не указано, вы получите доступ ко всем репозиториям, для которых у вас есть разрешение.

Чтобы создать подключение, которое хранит учетные данные GitHub, вызовите API создания соединений со следующим текстом запроса. Раздел параметров является необязательным и необходим только в том случае, если вы хотите, чтобы ваше подключение было ограничено конкретным репозиторием.

Образец запроса

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

Пример ответа:

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

Скопируйте идентификатор и используйте его в Git — Подключение или Git — обновление моих учетных данных Git API.

Получение списка существующих подключений

Используйте 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
   }
  }
 ]
}

Скопируйте идентификатор нужного подключения и используйте его в Git — Подключение или Git — обновление API учетных данных Git .

Рекомендации и ограничения

  • Интеграция с Git с помощью API имеет те же ограничения , что и пользовательский интерфейс интеграции Git.
  • Сервисный принципал поддерживается только для GitHub.
  • Обновление семантической модели с помощью API расширенного обновления вызывает разницу в Git после каждого обновления.