Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте API ConnectToGit и DisconnectFromGit для программной интеграции среды Microsoft Dataverse с системой управления источником на Git. С помощью этих API можно подключать отдельные решения или целые среды к поддерживаемым репозиториям Git и управлять этими подключениями с помощью кода.
Предпосылки
Прежде чем использовать эти API, убедитесь, что у вас есть:
- Доступ к среде Microsoft Dataverse
- Разрешения системного администратора
- Доступ на чтение и запись к репозиторию Git
ConnectToGit API
Создает соединение между решением dataverse или средой и репозиторием Git. С помощью этого подключения вы можете управлять системой управления версиями для своих компонентов Dataverse.
Parameters
ConnectToGit API принимает следующие параметры:
| Параметр | Type | Обязательно | Description |
|---|---|---|---|
GitFolder |
String | Yes | Имя папки, к которой нужно привязать решение или среду. |
Branch |
String | Yes | Имя ветви, к которой требуется подключиться. |
ConnectionType |
Целое | No | Указывает, к чему нужно подключиться. См. параметр ConnectionType. |
GitProvider |
Целое | No | Поставщик Git. См. параметр GitProvider. |
Organization |
String | No | Имя организации, к которой требуется подключиться. |
Project |
String | No | Имя проекта, к которому требуется подключиться. |
Repository |
String | No | Имя репозитория, к которому требуется подключиться. |
RootFolder |
String | No | Имя корневой папки, в которой находятся все решения в области решения. |
SolutionUniqueName |
String | No | Уникальное имя решения, которое вы хотите подключить к Git. |
UpstreamBranch |
String | No | Имя вышестоящей ветви, к которой вы хотите подключиться. По умолчанию используется ветвь репозитория по умолчанию. |
GitHubConnectionId |
String | No | Идентификатор подключения для подключения GitHub к Power Platform. Требуется, если GitProvider имеет значение GitHubPAT, если только вы не предоставите 1. Невозможно использовать, если поддержка виртуальной сети включена для среды Dataverse. |
GitHubPAT |
String | No | Личный токен доступа GitHub с доступом к целевому репозиторию. Требуется, если GitProvider — 1, если только вы не предоставите GitHubConnectionId. Требуется, если поддержка виртуальной сети включена для среды Dataverse. |
GitHubAppConfigId |
String | No | Ссылка на запись конфигурации приложения GitHub. Обязательный, если GitProvider имеет значение 1. Используйте формат githubappconfigs(<recordId>). |
Параметр ConnectionType
Параметр ConnectionType определяет, следует ли подключаться ко всей среде Dataverse или определенному решению.
| Ценность | Этикетка | Description |
|---|---|---|
| 0 | Решение | Подключает определенное решение Dataverse к Git. |
| 1 | Окружение | Подключает всю среду Dataverse к Git. |
Параметр GitProvider
GitProvider Используйте параметр, чтобы указать тип используемого поставщика Git, Azure DevOps или GitHub.
| Ценность | Этикетка | Description |
|---|---|---|
| 0 | Azure DevOps | Используется для репозиториев, размещенных в Azure DevOps |
| 1 | GitHub | Используется для репозиториев, размещенных на GitHub |
API-интерфейс DisconnectFromGit
Удаляет подключение к Git из решения или среды Dataverse и отключает интеграцию с системой управления версиями.
Параметр
API DisconnectFromGit имеет только один параметр.
| Параметр | Type | Обязательно | Description |
|---|---|---|---|
SolutionUniqueName |
String | No | Уникальное имя решения, которое требуется отключить от Git. Опустите его, чтобы отключить все решения или среду. |
Дополнительные сведения
Представлены несколько вариантов значений параметров, которые необходимо указать при вызове DisconnectFromGit.
-
Отключить одно решение. Укажите
SolutionUniqueNameдля отключения конкретного решения. - Отключить все решения: не укажите параметры для отключения всех подключений на уровне решения.
- Отключить среду: Не указывайте параметры для отключения соединения на уровне среды.
Примеры
В следующих примерах приведены сценарии использования API ConnectToGit и DisconnectFromGit:
- Подключение всей среды Dataverse к репозиторию Azure DevOps
- Подключение к репозиторию GitHub
- Подключение к репозиторию GitHub с помощью PowerShell
- Отключите всю вашу среду Dataverse от системы управления версиями Git
- Подключение первого решения к репозиторию Git
- Подключение дополнительных решений к одному репозиторию Git после подключения исходного решения
- Отключение конкретного решения от системы управления версиями Git при сохранении подключения к другим решениям
Подключение всей среды Dataverse к репозиторию Azure DevOps
Это подключение обеспечивает управление версиями для всех конфигураций и компонентов уровня среды.
Не используйте эти параметры с этим подключением:
RootFolderSolutionUniqueNameUpstreamBranch
В этом примере показано, как использовать действие ConnectToGit для подключения всей среды Dataverse к репозиторию Azure DevOps.
запрос
POST [Organization URI]/api/data/v9.2/ConnectToGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"GitFolder": "yourGitfolderName",
"Branch": "yourBranchName",
"ConnectionType": 1,
"GitProvider": 0,
"Organization": "yourOrganizationName",
"Project": "yourProjectName",
"Repository": "yourRepositoryName"
}
Ответ
HTTP/1.1 204 No Content
OData-Version: 4.0
Подключение к репозиторию GitHub
Прежде чем использовать API для подключения к GitHub, выполните действия по настройке, чтобы создать приложение GitHub, установить его в целевой репозиторий, импортировать его закрытый ключ в Azure Key Vault и создать подключение Power Platform GitHub. Дополнительные сведения см. в разделе "Подключение к GitHub".
Создание записи конфигурации приложения GitHub с помощью веб-API
Используйте веб-API Dataverse OData для создания githubappconfig записи. Отправьте запрос POST с идентификатором клиента приложения GitHub, Key Vault URI и именем ключа.
Для выполнения этих вызовов можно использовать любой HTTP-клиент, например "Бессонница", Visual Studio Code REST Client или curl. Для проверки подлинности требуется маркер носителя. Дополнительные сведения см. в разделе "Использование веб-API Microsoft Dataverse".
POST {{DataverseOrgUrl}}/api/data/v9.2/githubappconfigs
Authorization: Bearer {{token}}
Content-Type: application/json
{
"githubappid": "Iv23liBWoH9sf7xDrRe6",
"keyvaulturi": "{{KeyVaultUri}}",
"keyname": "demoGitHubKey"
}
Это важно
Запишите идентификатор записи, возвращенный в заголовке ответа. Это значение необходимо, чтобы определить управляемую идентичность, настроить RBAC и вызвать ConnectToGit. Идентификатор записи использует такой формат, как 13d565bb-4c22-f111-a546-7ced8d6e3e85.
После создания записи конфигурации приложения GitHub назначьте управляемому удостоверению Dataverse роль Пользователь шифрования Key Vault, как описано в разделе Настройка управления доступом на основе ролей (RBAC) для Key Vault.
Вызов API ConnectToGit
После создания записи githubappconfig и настройки Key Vault RBAC используйте веб-API Dataverse, чтобы установить подключение к системе контроля версий, вызвав действие ConnectToGit.
POST {{DataverseOrgUrl}}/api/data/v9.2/ConnectToGit
Authorization: Bearer {{token}}
Content-Type: application/json
{
"GitProvider": 1,
"ConnectionType": 1,
"Organization": "YourGitHubOrg",
"Repository": "YourRepo",
"Project": "placeholder",
"Branch": "yourBranch",
"UpstreamBranch": "main",
"GitFolder": "YourFolder",
"GitHubConnectionId": "<connectionId>",
"GitHubAppConfigId": "githubappconfigs(<recordId>)"
}
Это важно
Ветвь должна уже существовать в репозитории. При необходимости создайте его в GitHub. Значение GitHubAppConfigId должно использовать формат githubappconfigs(<recordId>).
Если вы получите успешный ответ, среда подключена к GitHub.
Подключение к репозиторию GitHub с помощью PowerShell
В следующем примере PowerShell создается запись конфигурации приложения GitHub, выполняется ожидание появления управляемого удостоверения Dataverse в Microsoft Entra ID, управляемому удостоверению назначается роль Пользователь шифрования Key Vault, а затем вызывается действие ConnectToGit. Если у вас уже есть запись о конфигурации приложения GitHub, укажите GitHubAppConfigId, чтобы пропустить шаги настройки и назначения ролей для Key Vault.
Установите и импортируйте Az.AccountsAz.KeyVaultAz.Resources модули PowerShell перед запуском примера. Выполните вход с помощью Connect-AzAccount, используя учетную запись, которая имеет доступ к среде Dataverse и разрешение для назначения ролей Key Vault.
Если поддержка виртуальной сети включена для среды Dataverse, укажите GitHubPAT. Подключения GitHub нельзя использовать при поддержке виртуальной сети.
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$DataverseOrgUrl,
[Parameter(Mandatory)]
[string]$GitHubOrg,
[Parameter(Mandatory)]
[string]$GitHubRepo,
[Parameter(Mandatory)]
[string]$Branch,
[Parameter(Mandatory)]
[string]$GitFolder,
[string]$GitHubAppClientId,
[string]$KeyVaultName,
[string]$KeyVaultKeyName,
[string]$GitHubAppConfigId,
[string]$GitHubConnectionId,
[string]$GitHubPAT,
[ValidateSet(0, 1)]
[int]$ConnectionType = 1,
[string]$UpstreamBranch,
[string]$RootFolder,
[string]$SolutionUniqueName
)
Set-StrictMode -Version 3.0
$ErrorActionPreference = "Stop"
if (($GitHubConnectionId -and $GitHubPAT) -or (-not $GitHubConnectionId -and -not $GitHubPAT)) {
throw "Specify either -GitHubConnectionId or -GitHubPAT, but not both."
}
if (-not $GitHubAppConfigId) {
foreach ($name in @('GitHubAppClientId', 'KeyVaultName', 'KeyVaultKeyName')) {
if ([string]::IsNullOrWhiteSpace((Get-Variable -Name $name -ValueOnly))) {
throw "Specify -$name when -GitHubAppConfigId is not provided."
}
}
}
$dataverseResource = $DataverseOrgUrl.TrimEnd('/')
$tokenResult = Get-AzAccessToken -ResourceUrl $dataverseResource -AsSecureString
$dataverseToken = [System.Net.NetworkCredential]::new('', $tokenResult.Token).Password
function Invoke-DataverseApi {
param(
[Parameter(Mandatory)]
[string]$Method,
[Parameter(Mandatory)]
[string]$Endpoint,
[object]$Body,
[switch]$ReturnHeaders
)
$headers = @{
Authorization = "Bearer $dataverseToken"
"OData-MaxVersion" = "4.0"
"OData-Version" = "4.0"
}
$request = @{
Method = $Method
Uri = "$dataverseResource/api/data/v9.2/$Endpoint"
Headers = $headers
ContentType = "application/json; charset=utf-8"
}
if ($Body) {
$request.Body = $Body | ConvertTo-Json -Depth 10
}
if ($ReturnHeaders) {
return (Invoke-WebRequest @request).Headers
}
Invoke-RestMethod @request
}
$appConfigRecordId = $GitHubAppConfigId
if (-not $appConfigRecordId) {
$keyVault = Get-AzKeyVault -VaultName $KeyVaultName
$keyVaultUri = 'https://' + $KeyVaultName + '.vault.azure.net/'
$appConfigBody = @{
githubappid = $GitHubAppClientId
keyvaulturi = $keyVaultUri
keyname = $KeyVaultKeyName
}
$responseHeaders = Invoke-DataverseApi `
-Method POST `
-Endpoint "githubappconfigs" `
-Body $appConfigBody `
-ReturnHeaders
$entityIdHeader = [string]$responseHeaders["OData-EntityId"]
if ($entityIdHeader -notmatch '\(([0-9a-f-]+)\)') {
throw "Could not read the GitHub App configuration record ID from the Dataverse response."
}
$appConfigRecordId = $Matches[1]
$managedIdentityName = "PPMI-githubappconfigmanagedidentity-$appConfigRecordId"
$servicePrincipal = $null
for ($attempt = 1; $attempt -le 60; $attempt++) {
$servicePrincipal = Get-AzADServicePrincipal -DisplayName $managedIdentityName -ErrorAction SilentlyContinue
if ($servicePrincipal) {
break
}
Start-Sleep -Seconds 1
}
if (-not $servicePrincipal) {
throw "The Dataverse managed identity was not found in Microsoft Entra ID. Check Dataverse System Jobs for GitHub App configuration errors."
}
$keyVaultScope = $keyVault.ResourceId
if (-not $keyVaultScope) {
$subscriptionId = (Get-AzContext).Subscription.Id
$keyVaultScope = "/subscriptions/$subscriptionId/resourceGroups/$($keyVault.ResourceGroupName)/providers/Microsoft.KeyVault/vaults/$KeyVaultName"
}
$keyVaultCryptoUserRoleId = "12338af0-0e69-4776-bea7-57ae8d297424"
$existingAssignment = Get-AzRoleAssignment `
-ObjectId $servicePrincipal.Id `
-RoleDefinitionId $keyVaultCryptoUserRoleId `
-Scope $keyVaultScope `
-ErrorAction SilentlyContinue
if (-not $existingAssignment) {
New-AzRoleAssignment `
-ObjectId $servicePrincipal.Id `
-RoleDefinitionId $keyVaultCryptoUserRoleId `
-Scope $keyVaultScope | Out-Null
}
}
$connectBody = @{
GitProvider = 1
ConnectionType = $ConnectionType
Organization = $GitHubOrg
Repository = $GitHubRepo
Project = "placeholder"
Branch = $Branch
GitFolder = $GitFolder
GitHubAppConfigId = "githubappconfigs($appConfigRecordId)"
}
if ($GitHubConnectionId) { $connectBody.GitHubConnectionId = $GitHubConnectionId }
if ($GitHubPAT) { $connectBody.GitHubPAT = $GitHubPAT }
if ($UpstreamBranch) { $connectBody.UpstreamBranch = $UpstreamBranch }
if ($RootFolder) { $connectBody.RootFolder = $RootFolder }
if ($SolutionUniqueName) { $connectBody.SolutionUniqueName = $SolutionUniqueName }
Invoke-DataverseApi -Method POST -Endpoint "ConnectToGit" -Body $connectBody
Write-Host "Connected Dataverse Git integration to GitHub."
Отключите вашу всю среду Dataverse от системы управления версиями Git
Это действие удаляет подключение Git на уровне окружения. Не используйте SolutionUniqueName параметр для этой операции. Dataverse автоматически идентифицирует и удаляет подключение на уровне среды Git.
В этом примере показано, как использовать действие DisconnectFromGit для отключения всей среды Dataverse от системы управления версиями Git.
запрос
POST [Organization URI]/api/data/v9.2/DisconnectFromGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Ответ
HTTP/1.1 204 No Content
OData-Version: 4.0
Подключение первого решения к репозиторию Git
Это подключение устанавливает ссылку на репозиторий и структуру папок для управления версиями в соответствии с первым решением в среде.
Чтобы указать решение, необходимо включить значения для этих параметров:
RootFolderSolutionUniqueName
В этом примере показано, как использовать действие ConnectToGit для подключения первого решения к репозиторию Git.
запрос
POST [Organization URI]/api/data/v9.2/ConnectToGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"GitFolder": "yourGitfolderName",
"Branch": "yourBranchName",
"ConnectionType": 1,
"GitProvider": 0,
"Organization": "yourOrganizationName",
"Project": "yourProjectName",
"Repository": "yourRepositoryName",
"RootFolder": "yourRootFolderName",
"SolutionUniqueName": "yourSolutionUniqueName"
}
Ответ
HTTP/1.1 204 No Content
OData-Version: 4.0
Подключение дополнительных решений к одному репозиторию Git после подключения исходного решения
После подключения первого решения вам потребуются только параметры, относящиеся к решению. Сведения о подключении к репозиторию наследуются от изначального подключения.
Задайте только следующие параметры:
SolutionUniqueNameBranchGitFolder
Это важно
Прежде чем это будет работать, необходимо сначала подключить первое решение. См. статью "Подключение первого решения к репозиторию Git".
В этом примере показано, как использовать действие ConnectToGit для подключения последующих решений к репозиторию Git.
запрос
POST [Organization URI]/api/data/v9.2/ConnectToGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"GitFolder": "yourGitfolderName",
"Branch": "yourBranchName",
"SolutionUniqueName": "yourSolutionUniqueName"
}
Ответ
HTTP/1.1 204 No Content
OData-Version: 4.0
Отключение конкретного решения от системы управления версиями Git при сохранении подключения к другим решениям
Используйте этот подход для удаления системы контроля версий для одного проекта, не влияя на другие.
В этом примере показано, как использовать действие DisconnectFromGit для удаления системы контроля версий для одного решения без влияния на другие.
запрос
POST [Organization URI]/api/data/v9.2/DisconnectFromGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"SolutionUniqueName": "yourSolutionUniqueName"
}
Ответ
HTTP/1.1 204 No Content
OData-Version: 4.0
Обработка ошибок
Ни ConnectToGit, ни DisconnectFromGit API не возвращают значение после успешного завершения. При сбое API возвращает ошибку.
Распространенные сценарии ошибок включают:
- Недопустимые учетные данные: Убедитесь, что у вас есть действующие учетные данные для аутентификации у поставщика Git.
- Репозиторий не найден: проверьте имена организации, проекта и репозитория.
- Доступ запрещен: Убедитесь, что у вашей учетной записи Dataverse есть разрешения на управление системой контроля версий.
-
Решение не найдено: проверьте
SolutionUniqueNameналичие в вашей среде. - Ветвь не существует: убедитесь, что указанная ветвь существует в репозитории.
Поддержка и дополнительные ресурсы
Дополнительные сведения об интеграции системы управления исходным кодом с Dataverse см. в разделе ниже.