Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj interfejsów API ConnectToGit i DisconnectFromGit, aby programowo zintegrować środowisko Microsoft Dataverse z kontrolą źródła usługi Git. Korzystając z tych interfejsów API, można połączyć poszczególne rozwiązania lub całe środowiska z obsługiwanymi repozytoriami Git i zarządzać tymi połączeniami za pośrednictwem kodu.
Wymagania wstępne
Przed użyciem tych interfejsów API upewnij się, że masz następujące elementy:
- Dostęp do środowiska usługi Microsoft Dataverse
- Uprawnienia administratora systemu
- Dostęp do odczytu i zapisu w repozytorium Git
ConnectToGit API
Tworzy połączenie między rozwiązaniem Dataverse lub środowiskiem a repozytorium Git. Za pomocą tego połączenia można zarządzać kontrolą źródła składników usługi Dataverse.
Parameters
Interfejs ConnectToGit API akceptuje następujące parametry:
| Parametr | Typ | Wymagane | Description |
|---|---|---|---|
GitFolder |
Ciąg | Yes | Nazwa folderu, z którym chcesz powiązać rozwiązanie lub środowisko. |
Branch |
Ciąg | Yes | Nazwa gałęzi, z którą chcesz nawiązać połączenie. |
ConnectionType |
Liczba całkowita | No | Określa, z czym nawiązać połączenie. Zobacz parametr ConnectionType. |
GitProvider |
Liczba całkowita | No | Dostawca usługi Git. Zobacz parametr GitProvider. |
Organization |
Ciąg | No | Nazwa organizacji, z którą chcesz nawiązać połączenie. |
Project |
Ciąg | No | Nazwa projektu, z którym chcesz nawiązać połączenie. |
Repository |
Ciąg | No | Nazwa repozytorium, z którym chcesz nawiązać połączenie. |
RootFolder |
Ciąg | No | Nazwa folderu głównego, w którym znajdują się wszystkie rozwiązania w ramach zakresu rozwiązania. |
SolutionUniqueName |
Ciąg | No | Unikatowa nazwa rozwiązania, z którym chcesz nawiązać połączenie z usługą Git. |
UpstreamBranch |
Ciąg | No | Nazwa nadrzędnej gałęzi, z którą chcesz nawiązać połączenie. Domyślnie jest to domyślna gałąź repozytorium. |
GitHubConnectionId |
Ciąg | No | Identyfikator połączenia dla połączenia platformy Power Platform GitHub. Wymagane, jeśli GitProvider jest 1, chyba że podasz GitHubPAT. Nie można używać, gdy obsługa sieci wirtualnej jest włączona dla środowiska Dataverse. |
GitHubPAT |
Ciąg | No | Osobisty token dostępu GitHub umożliwiający dostęp do repozytorium docelowego. Wymagane, gdy GitProvider ma wartość 1, chyba że podasz GitHubConnectionId. Wymagane, gdy obsługa sieci wirtualnej jest włączona dla środowiska Dataverse. |
GitHubAppConfigId |
Ciąg | No | Odwołanie do rekordu konfiguracji aplikacji GitHub. Wymagane, gdy GitProvider ma wartość 1. Użyj formatu githubappconfigs(<recordId>). |
Parametr ConnectionType
Parametr ConnectionType określa, czy połączyć się z całym środowiskiem Usługi Dataverse, czy konkretnym rozwiązaniem.
| Value | Etykieta | Description |
|---|---|---|
| 0 | Rozwiązanie | Łączy określone rozwiązanie Dataverse z usługą Git. |
| 1 | Środowisko | Łączy całe środowisko usługi Dataverse z usługą Git. |
Parametr GitProvider
Użyj parametru GitProvider , aby określić typ używanego dostawcy Usługi Git— Azure DevOps lub GitHub.
| Value | Etykieta | Description |
|---|---|---|
| 0 | Azure DevOps | Korzystanie z repozytoriów hostowanych w usłudze Azure DevOps |
| 1 | GitHub | Używanie dla repozytoriów hostowanych w usłudze GitHub |
Interfejs API DisconnectFromGit
Usuwa połączenie Git z rozwiązania lub środowiska usługi Dataverse i wyłącza integrację kontroli źródła.
Parametr
Interfejs DisconnectFromGit API ma tylko jeden parametr.
| Parametr | Typ | Wymagane | Description |
|---|---|---|---|
SolutionUniqueName |
Ciąg | No | Unikatowa nazwa rozwiązania, które chcesz odłączyć od usługi Git. Nie łącz wszystkich rozwiązań ani środowiska. |
Informacje dodatkowe
Poniżej przedstawiono kilka opcji wartości parametrów, które należy określić podczas wywoływania DisconnectFromGitelementu .
-
Rozłącz pojedyncze rozwiązanie: podaj
SolutionUniqueName, aby rozłączyć określone rozwiązanie. - Rozłącz wszystkie rozwiązania: nie podaj parametrów, aby odłączyć wszystkie połączenia na poziomie rozwiązania.
- Rozłącz środowisko: nie podaj parametrów, aby odłączyć połączenie na poziomie środowiska.
Przykłady
W poniższych przykładach opisano scenariusze korzystania z interfejsów API ConnectToGit i DisconnectFromGit:
- Łączenie całego środowiska usługi Dataverse z repozytorium usługi Azure DevOps
- Nawiązywanie połączenia z repozytorium GitHub
- Nawiązywanie połączenia z repozytorium GitHub przy użyciu programu PowerShell
- Odłącz całe środowisko Dataverse od kontroli źródła Git
- Łączenie pierwszego rozwiązania z repozytorium Git
- Łączenie dodatkowych rozwiązań z tym samym repozytorium Git po nawiązaniu połączenia z początkowym rozwiązaniem
- Odłączanie określonego rozwiązania od kontroli źródła usługi Git przy zachowaniu połączenia z innymi rozwiązaniami
Łączenie całego środowiska usługi Dataverse z repozytorium usługi Azure DevOps
To połączenie umożliwia kontrolę źródła dla wszystkich konfiguracji i składników na poziomie środowiska.
Nie używaj tych parametrów z tym połączeniem:
RootFolderSolutionUniqueNameUpstreamBranch
W tym przykładzie pokazano, jak używać akcji ConnectToGit w celu połączenia całego środowiska usługi Dataverse z repozytorium usługi Azure DevOps.
Wniosek
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"
}
Odpowiedź
HTTP/1.1 204 No Content
OData-Version: 4.0
Dowiedz się, jak wywoływać akcje internetowego interfejsu API
Nawiązywanie połączenia z repozytorium GitHub
Przed użyciem interfejsu API do nawiązania połączenia z GitHub wykonaj kroki instalacji, aby utworzyć aplikację GitHub, zainstaluj ją w docelowym repozytorium, zaimportuj klucz prywatny do Azure Key Vault i utwórz połączenie usługi Power Platform GitHub. Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia z GitHub.
Tworzenie rekordu konfiguracji aplikacji GitHub przy użyciu internetowego interfejsu API
Użyj interfejsu API sieci Web Dataverse OData, aby utworzyć rekord githubappconfig. Wyślij żądanie POST z użyciem identyfikatora klienta aplikacji GitHub, identyfikatora URI usługi Key Vault oraz nazwy klucza.
Możesz użyć dowolnego klienta HTTP, takiego jak Insomnia, klient REST dla Visual Studio Code lub curl, aby wykonać te wywołania. Do uwierzytelniania potrzebny jest token okaziciela. Aby uzyskać więcej informacji, zobacz Use the Microsoft Dataverse Web API (Korzystanie z internetowego interfejsu API Microsoft Dataverse).
POST {{DataverseOrgUrl}}/api/data/v9.2/githubappconfigs
Authorization: Bearer {{token}}
Content-Type: application/json
{
"githubappid": "Iv23liBWoH9sf7xDrRe6",
"keyvaulturi": "{{KeyVaultUri}}",
"keyname": "demoGitHubKey"
}
Important
Zanotuj identyfikator rekordu zwrócony w nagłówku odpowiedzi. Ta wartość jest potrzebna, aby zidentyfikować tożsamość zarządzaną, skonfigurować kontrolę dostępu opartą na rolach (RBAC) i wywołać ConnectToGit. Identyfikator rekordu używa formatu takiego jak 13d565bb-4c22-f111-a546-7ced8d6e3e85.
Po utworzeniu rekordu konfiguracji aplikacji GitHub przypisz rolę użytkownika kryptograficznego Key Vault do tożsamości zarządzanej usługi Dataverse zgodnie z opisem w temacie Konfigurowanie kontroli dostępu opartej na rolach (RBAC) Key Vault.
Wywołaj interfejs API ConnectToGit
Po utworzeniu rekordu githubappconfig i skonfigurowaniu kontroli dostępu opartej na rolach (RBAC) usługi Key Vault użyj internetowego interfejsu API usługi Dataverse, aby ustanowić połączenie z kontrolą źródła, wywołując akcję 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>)"
}
Important
Gałąź musi już istnieć w repozytorium. Utwórz go w GitHub najpierw w razie potrzeby. Wartość GitHubAppConfigId musi używać formatu githubappconfigs(<recordId>).
Jeśli otrzymasz pomyślną odpowiedź, środowisko jest połączone z GitHub.
Nawiązywanie połączenia z repozytorium GitHub przy użyciu programu PowerShell
Poniższy przykład programu PowerShell tworzy rekord konfiguracji aplikacji GitHub, czeka na pojawienie się tożsamości zarządzanej usługi Dataverse w usłudze Microsoft Entra ID, przypisuje do tej tożsamości zarządzanej rolę Key Vault Crypto User i wywołuje akcję ConnectToGit. Jeśli masz już rekord konfiguracji aplikacji GitHub, podaj GitHubAppConfigId, aby pominąć kroki konfiguracji i przypisywania ról w usłudze Key Vault.
Przed uruchomieniem przykładu zainstaluj i zaimportuj moduły programu PowerShell Az.Accounts, Az.KeyVault i Az.Resources. Zaloguj się za pomocą Connect-AzAccount konta, które ma dostęp do środowiska Dataverse i uprawnienia do przypisywania ról Key Vault.
Jeśli obsługa sieci wirtualnej jest włączona dla środowiska Dataverse, podaj wartość GitHubPAT. Połączeń z GitHubem nie można używać z obsługą sieci wirtualnych.
[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."
Odłącz całe środowisko Dataverse od systemu kontroli wersji Git
Ta akcja powoduje usunięcie połączenia git na poziomie środowiska. Nie używaj parametru SolutionUniqueName dla tej operacji. Usługa Dataverse automatycznie identyfikuje i usuwa połączenie git na poziomie środowiska.
W tym przykładzie pokazano, jak użyć akcji DisconnectFromGit w celu odłączenia całego środowiska Dataverse od kontroli źródła usługi Git.
Wniosek
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
Odpowiedź
HTTP/1.1 204 No Content
OData-Version: 4.0
Dowiedz się, jak wywoływać akcje internetowego interfejsu API
Łączenie pierwszego rozwiązania z repozytorium Git
To połączenie ustanawia strukturę połączenia repozytorium i folderu dla kontroli źródła na poziomie rozwiązania do pierwszego rozwiązania w środowisku.
Aby określić rozwiązanie, należy uwzględnić wartości tych parametrów:
RootFolderSolutionUniqueName
W tym przykładzie pokazano, jak połączyć pierwsze rozwiązanie z repozytorium Git za pomocą akcji ConnectToGit .
Wniosek
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"
}
Odpowiedź
HTTP/1.1 204 No Content
OData-Version: 4.0
Dowiedz się, jak wywoływać akcje internetowego interfejsu API
Łączenie dodatkowych rozwiązań z tym samym repozytorium Git po nawiązaniu połączenia z początkowym rozwiązaniem
Po nawiązaniu połączenia z pierwszym rozwiązaniem potrzebne są tylko parametry specyficzne dla rozwiązania. Szczegóły połączenia repozytorium są dziedziczone z początkowego połączenia.
Ustaw tylko następujące parametry:
SolutionUniqueNameBranchGitFolder
Important
Przed wykonaniem tej czynności należy najpierw połączyć pierwsze rozwiązanie. Zobacz Łączenie pierwszego rozwiązania z repozytorium Git.
W tym przykładzie pokazano, jak używać akcji ConnectToGit w celu połączenia kolejnych rozwiązań z repozytorium Git.
Wniosek
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"
}
Odpowiedź
HTTP/1.1 204 No Content
OData-Version: 4.0
Dowiedz się, jak wywoływać akcje internetowego interfejsu API
Odłączanie określonego rozwiązania od kontroli źródła usługi Git przy zachowaniu połączenia z innymi rozwiązaniami
Użyj tego podejścia, aby usunąć kontrolę źródła dla jednego rozwiązania bez wpływu na inne.
W tym przykładzie pokazano, jak za pomocą akcji DisconnectFromGit usunąć kontrolę źródła dla jednego rozwiązania bez wpływu na inne.
Wniosek
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"
}
Odpowiedź
HTTP/1.1 204 No Content
OData-Version: 4.0
Dowiedz się, jak wywoływać akcje internetowego interfejsu API
Obsługa błędów
Ani interfejs API ConnectToGit, ani DisconnectFromGit nie zwraca wartości po pomyślnym zakończeniu. Gdy interfejs API zakończy się niepowodzeniem, zwraca błąd.
Typowe scenariusze błędów obejmują:
- Nieprawidłowe poświadczenia: upewnij się, że masz prawidłowe uwierzytelnianie u dostawcy usługi Git.
- Nie znaleziono repozytorium: Sprawdź nazwy organizacji, projektu i repozytorium.
- Odmowa uprawnień: upewnij się, że konto usługi Dataverse ma uprawnienia do zarządzania kontrolą źródła.
-
Nie znaleziono rozwiązania: Sprawdź,
SolutionUniqueNameczy istnieje w danym środowisku. - Gałąź nie istnieje: Upewnij się, że określona gałąź istnieje w repozytorium.
Pomoc techniczna i dodatkowe zasoby
Aby uzyskać więcej informacji na temat integracji kontroli źródła z usługą Dataverse, zobacz: