Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Инструмент интеграции Git в Microsoft Fabric позволяет командам совместно работать с помощью системы управления версиями для создания эффективного и многократно используемого процесса выпуска для содержимого Fabric.
С помощью интерфейсов REST API Microsoft Fabric вы можете автоматизировать процедуры и процессы Microsoft Fabric для более быстрого выполнения задач и уменьшения количества ошибок. Эта эффективность приводит к экономии затрат и повышению производительности.
В этой статье описывается, как использовать REST API интеграции Git для автоматизации интеграции Git в Microsoft Fabric.
Prerequisites
Чтобы работать с API-интерфейсами Git Fabric, вам потребуется:
Токен Microsoft Entra для службы Fabric. Используйте этот маркер в заголовке авторизации вызова API. Сведения о том, как получить токен, см. в разделе Краткое руководство по API Fabric.
Если вы используете субъект-службу, ему требуются те же разрешения, что и субъект-пользователь. Сведения о настройке служебного принципала для Azure DevOps см. статью об интеграции Git со служебным принципалом.
Интерфейсы REST API можно использовать без PowerShell, но скрипты в этой статье используют PowerShell. Чтобы запустить скрипты, выполните следующие действия.
- Установите PowerShell.
- Установите модуль Az для Azure PowerShell.
Функции API интеграции Git
REST API для интеграции Git могут помочь вам достичь непрерывной интеграции и доставки контента (CI/CD). Ниже приведены несколько примеров того, что можно сделать с помощью API:
Подключите и отключите определенную рабочую область из репозитория Git и ветви, подключенной к ней. (Для подключения требуется идентификатор подключения учетных данных поставщика Git.)
Получение сведений о подключении для указанной рабочей области.
Получение или создание подключения к учетным данным поставщика Git.
Обновите учетные данные Git, чтобы обновить сведения о конфигурации учетных данных Git. Требуется идентификатор подключения для учетных данных провайдера Git.
Получите мои учетные данные Git, чтобы получить сведения о конфигурации учетных данных Git.
Инициализация подключения для рабочей области, подключенной к Git.
Узнайте, какие элементы имеют входящие изменения и какие имеют изменения, которые еще не были зафиксированы в Git, с помощью API состояния Git.
Зафиксируйте изменения в рабочей области на подключенной удаленной ветви.
Обновите рабочую область с коммитами, внесёнными в подключённую ветвь.
Examples
Используйте следующие сценарии PowerShell, чтобы понять, как выполнять несколько распространенных процессов автоматизации. Чтобы просмотреть или скопировать текст в примере PowerShell, используйте ссылки в этом разделе. Вы также можете просмотреть все примеры в репозитории GitHub с примерами интеграции Fabric через Git.
Подключение и обновление
В этом разделе описаны шаги, связанные с подключением и обновлением рабочей области с помощью Git.
Полный сценарий см. в разделе "Подключение и обновление" из Git. (Совместимость скрипта — PowerShell 5.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 } }ВызовИТЕ API Connect, чтобы подключить рабочую область к репозиторию и ветви 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Вызовите 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 "{}"В зависимости от ответа 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.
- Войдите в Git и получите проверку подлинности.
- Вызовите API получения состояния, чтобы создать обновление из текста запроса Git.
- Вызовите API Update From Git, чтобы обновить рабочую область коммитами, отправленными в подключенную ветвь.
Зафиксировать все
В этом разделе приведено пошаговое описание того, как программно зафиксировать все изменения из рабочей области в Git.
Полный скрипт см. в разделе "Фиксация всех изменений в Git".
- Войдите в Git и получите проверку подлинности.
- Подключитесь к рабочей области.
- Вызовите REST API Commit to Git.
- Получите идентификатор длительной выполняемой операции для опроса о состоянии данной операции.
Выборочный коммит
В этом разделе описаны шаги, связанные с фиксацией только определенных изменений из рабочей области в Git.
Полный сценарий см. в разделе Коммит выбранных изменений в Git.
- Войдите в Git и получите проверку подлинности.
- Подключитесь к рабочей области.
- Вызовите API Получить статус, чтобы узнать, какие элементы в рабочем пространстве были изменены.
- Выберите определенные элементы для подтверждения.
- Вызовите API Commit to Git, чтобы зафиксировать выбранные изменения из рабочей области в подключённую удалённую ветвь.
Отслеживайте ход выполнения длительных операций
Для получения полного сценария см. раздел "Опрос состояния длительно выполняющейся операции".
- Получите идентификатор операции из скрипта Update From Git или Commit to Git.
- Вызовите API Get LRO Status через указанные интервалы (в секундах) и выведите статус на экран.
Получение или создание подключения к учетным данным поставщика Git
Чтобы подключиться к репозиторию Git или обновить учетные данные Git , необходимо предоставить идентификатор подключения. Идентификатор подключения может поступать из нового создаваемого подключения или существующего подключения.
- Создайте новое подключение с использованием учетных данных вашего поставщика Git.
- Используйте существующее подключение , для которых у вас есть разрешения.
Создайте новое подключение, в котором хранятся ваши учетные данные 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
}
}
]
}
Скопируйте идентификатор нужного подключения и используйте его в Git — Подключение или Git — обновление API учетных данных Git .
Рекомендации и ограничения
- Интеграция с Git с помощью API имеет те же ограничения , что и пользовательский интерфейс интеграции Git.
- Обновление семантической модели с помощью API расширенного обновления вызывает разницу в Git после каждого обновления.