Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd API:erna ConnectToGit och DisconnectFromGit för att programmatiskt integrera din Microsoft Dataverse-miljö med Git-källkontroll. Genom att använda dessa API:er kan du ansluta enskilda lösningar eller hela miljöer till Git-lagringsplatser som stöds och hantera dessa anslutningar via kod.
Förutsättningar
Kontrollera att du har följande innan du använder dessa API:er:
- Åtkomst till en Microsoft Dataverse-miljö
- Systemadministratörsbehörigheter
- Läs- och skrivåtkomst till en Git-lagringsplats
ConnectToGit API
Skapar en anslutning mellan en Dataverse-lösning eller -miljö och en Git-lagringsplats. Genom att använda den här anslutningen kan du hantera källkontroll för dina Dataverse-komponenter.
Parameters
ConnectToGit API:et accepterar följande parametrar:
| Parameter | Type | Obligatoriskt | Beskrivning |
|---|---|---|---|
GitFolder |
String | Yes | Namnet på den mapp som du vill binda din lösning eller miljö till. |
Branch |
String | Yes | Namnet på den gren som du vill ansluta till. |
ConnectionType |
Heltal | No | Anger vad som ska anslutas till. Se ConnectionType-parametern. |
GitProvider |
Heltal | No | Git-provider Se GitProvider-parametern. |
Organization |
String | No | Namnet på den organisation som du vill ansluta till. |
Project |
String | No | Namnet på projektet som du vill ansluta till. |
Repository |
String | No | Namnet på den lagringsplats som du vill ansluta till. |
RootFolder |
String | No | Namnet på rotmappen där alla dina lösningar finns i lösningsomfånget. |
SolutionUniqueName |
String | No | Det unika namnet på den lösning som du vill ansluta till git. |
UpstreamBranch |
String | No | Namnet på den överordnade gren som du vill ansluta till. Standardinställningen är huvudgrenen för lagringsplatsen. |
GitHubConnectionId |
String | No | Anslutnings-ID för Power Platform GitHub anslutning. Krävs när GitProvider är 1 om du inte anger GitHubPAT. Kan inte användas när stöd för virtuella nätverk (VNET) är aktiverat för Dataverse-miljön. |
GitHubPAT |
String | No | En personlig GitHub-åtkomsttoken med åtkomst till målrepositoriet. Krävs när GitProvider är 1 om du inte anger GitHubConnectionId. Krävs när stöd för virtuellt nätverk (VNET) är aktiverat för Dataverse-miljön. |
GitHubAppConfigId |
String | No | Referens till GitHub Apps konfigurationspost. Krävs när GitProvider är 1. Använd formatet githubappconfigs(<recordId>). |
Parametern ConnectionType
Parametern ConnectionType styr om du vill ansluta till hela Dataverse-miljön eller en specifik lösning.
| Value | Etikett | Beskrivning |
|---|---|---|
| 0 | Lösning | Ansluter en specifik Dataverse-lösning till Git. |
| 1 | Miljö | Ansluter hela Dataverse-miljön till Git. |
GitProvider-parameter
Använd parametern GitProvider för att ange vilken typ av Git-provider du använder, antingen Azure DevOps eller GitHub.
| Value | Etikett | Beskrivning |
|---|---|---|
| 0 | Azure DevOps | Använd för lagringsplatser som finns på Azure DevOps |
| 1 | GitHub | Använd för lagringsplatser som finns på GitHub |
Frånkoppla från Git API
Tar bort Git-anslutningen från en Dataverse-lösning eller -miljö och inaktiverar källkontrollintegrering.
Parameter
API:et DisconnectFromGit har bara en parameter.
| Parameter | Type | Obligatoriskt | Beskrivning |
|---|---|---|---|
SolutionUniqueName |
String | No | Det unika namnet på den lösning som du vill koppla från Git. Utelämna om du vill koppla från alla lösningar eller alla delar av systemet. |
Ytterligare information
Här följer några parametervärdealternativ som du kan ange när du anropar DisconnectFromGit.
-
Koppla från en enskild lösning: Tillhandahåll
SolutionUniqueNameför att koppla från en specifik lösning. - Koppla från alla lösningar: Ange inga parametrar för att koppla från alla anslutningar på lösningsnivå.
- Frånkopplingsmiljö: Ange inga parametrar för att koppla från anslutningen på miljönivå.
Examples
I följande exempel beskrivs scenarier för användning av API:erna ConnectToGit och DisconnectFromGit :
- Ansluta hela Dataverse-miljön till en Azure DevOps-lagringsplats
- Ansluta till en GitHub lagringsplats
- Ansluta till en GitHub lagringsplats med hjälp av PowerShell
- Koppla bort hela Dataverse-miljön från Git-källkontrollen
- Ansluta den första lösningen till en Git-lagringsplats
- Ansluta extra lösningar till samma Git-lagringsplats när du har anslutit den första lösningen
- Koppla från en specifik lösning från Git-källkontrollen samtidigt som andra lösningar är anslutna
Ansluta hela Dataverse-miljön till en Azure DevOps-lagringsplats
Den här anslutningen möjliggör källkontroll för alla konfigurationer och komponenter på miljönivå.
Använd inte dessa parametrar med den här anslutningen:
RootFolderSolutionUniqueNameUpstreamBranch
Det här exemplet visar hur du använder åtgärden ConnectToGit för att ansluta hela Dataverse-miljön till en Azure DevOps-lagringsplats.
Förfrågan
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"
}
Svar
HTTP/1.1 204 No Content
OData-Version: 4.0
Ansluta till en GitHub lagringsplats
Innan du använder API:et för att ansluta till GitHub slutför du installationsstegen för att skapa GitHub-appen, installerar den på mållagringsplatsen, importerar dess privata nyckel till Azure Key Vault och skapar Power Platform-GitHub-anslutningen. Mer information finns i Ansluta till GitHub.
Skapa en GitHub appkonfigurationspost med hjälp av webb-API:et
Använd Dataverse OData-webb-API:et för att skapa en githubappconfig post. Skicka en POST-begäran med klient-ID för GitHub App, Key Vault URI och nyckelnamn.
Du kan använda alla HTTP-klienter, till exempel Insomnia, Visual Studio Code REST Client eller curl, för att göra dessa anrop. Du behöver en ägartoken för autentisering. Mer information finns i Använda webb-API:et för Microsoft Dataverse.
POST {{DataverseOrgUrl}}/api/data/v9.2/githubappconfigs
Authorization: Bearer {{token}}
Content-Type: application/json
{
"githubappid": "Iv23liBWoH9sf7xDrRe6",
"keyvaulturi": "{{KeyVaultUri}}",
"keyname": "demoGitHubKey"
}
Important
Observera postens ID som returneras i svarshuvudet. Du behöver det här värdet för att identifiera den hanterade identiteten, konfigurera RBAC och anropa ConnectToGit. Postens ID har ett format som 13d565bb-4c22-f111-a546-7ced8d6e3e85.
När du har skapat GitHub App-konfigurationsposten tilldelar du rollen Key Vault Kryptoanvändare till den hanterade Dataverse-identiteten enligt beskrivningen i Konfigurera Key Vault rollbaserad åtkomstkontroll (RBAC).
Anropa ConnectToGit-API:et
När du har skapat githubappconfig-posten och konfigurerat Key Vault RBAC använder du Dataverse Web API för att upprätta anslutningen till källkontrollen genom att anropa åtgärden 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
Grenen måste redan finnas på lagringsplatsen. Skapa den i GitHub först om det behövs. Värdet GitHubAppConfigId måste använda formatet githubappconfigs(<recordId>).
Om du får ett lyckat svar är miljön ansluten till GitHub.
Ansluta till en GitHub lagringsplats med hjälp av PowerShell
Följande PowerShell-exempel skapar konfigurationsposten för GitHub Appen, väntar på att den Dataverse-hanterade identiteten ska visas i Microsoft Entra ID, tilldelar den hanterade identiteten rollen Key Vault Crypto User och anropar åtgärden ConnectToGit. Om du redan har en konfigurationspost för GitHub-appen anger du GitHubAppConfigId för att hoppa över stegen för konfiguration och rolltilldelning i Key Vault.
Installera och importera modulerna Az.Accounts, Az.KeyVaultoch Az.Resources PowerShell innan du kör exemplet. Logga in med Connect-AzAccount med ett konto som har åtkomst till Dataverse-miljön och behörighet att tilldela Key Vault-roller.
Om stöd för virtuellt nätverk (VNET) är aktiverat för Dataverse-miljön anger du GitHubPAT. GitHub anslutningar kan inte användas med stöd för virtuella nätverk.
[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."
Koppla bort hela Dataverse-miljön från Git-källkontrollen
Den här åtgärden tar bort Git-anslutningen på miljönivå. Använd inte parametern SolutionUniqueName för den här åtgärden. Dataverse identifierar och tar automatiskt bort Git-anslutningen på miljönivå.
Det här exemplet visar hur du använder åtgärden DisconnectFromGit för att koppla bort hela Dataverse-miljön från Git-källkontrollen.
Förfrågan
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
Svar
HTTP/1.1 204 No Content
OData-Version: 4.0
Ansluta den första lösningen till en Git-lagringsplats
Den här anslutningen etablerar länken till lagringsplatsen och mappstrukturen för källkontroll på lösningsnivå för den första lösningen i en miljö.
Du måste inkludera värden för dessa parametrar för att ange lösningen:
RootFolderSolutionUniqueName
Det här exemplet visar hur du använder åtgärden ConnectToGit för att ansluta den första lösningen till en Git-lagringsplats.
Förfrågan
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"
}
Svar
HTTP/1.1 204 No Content
OData-Version: 4.0
Ansluta extra lösningar till samma Git-lagringsplats när du har anslutit den första lösningen
När du har anslutit den första lösningen behöver du bara de lösningsspecifika parametrarna. Du ärver lagringsplatsens anslutningsinformation från den första anslutningen.
Ange endast följande parametrar:
SolutionUniqueNameBranchGitFolder
Important
Du måste först ansluta den första lösningen innan det här fungerar. Se Ansluta den första lösningen till en Git-lagringsplats.
Det här exemplet visar hur du använder åtgärden ConnectToGit för att ansluta efterföljande lösningar till en Git-lagringsplats.
Förfrågan
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"
}
Svar
HTTP/1.1 204 No Content
OData-Version: 4.0
Koppla från en specifik lösning från Git-källkontrollen samtidigt som andra lösningar är anslutna
Använd den här metoden för att ta bort källkontroll för en lösning utan att påverka andra.
Det här exemplet visar hur du använder åtgärden DisconnectFromGit för att ta bort källkontrollen för en lösning utan att påverka andra.
Förfrågan
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"
}
Svar
HTTP/1.1 204 No Content
OData-Version: 4.0
Felhantering
Varken ConnectToGit-API:et eller DisconnectFromGit-API:et returnerar ett värde när det har slutförts framgångsrikt. När ett API misslyckas returneras ett fel.
Vanliga felscenarier är:
- Ogiltiga autentiseringsuppgifter: Kontrollera att du har giltig autentisering till Git-providern.
- Det går inte att hitta lagringsplatsen: Verifiera namn på organisation, projekt och lagringsplats.
- Behörighet nekad: Kontrollera att ditt Dataverse-konto har behörighet att hantera källkontroll.
-
Det går inte att hitta lösningen: Kontrollera att den
SolutionUniqueNamefinns i din miljö. - Grenen finns inte: Bekräfta att den angivna grenen finns på lagringsplatsen.
Support och ytterligare resurser
Mer information om källkontrollintegrering med Dataverse finns i: