Opret forbindelse til og frakoble Dataverse fra et Git-lager ved hjælp af kode

ConnectToGit Brug API'erne og DisconnectFromGit til programmeringsmæssigt at integrere dit Microsoft Dataverse-miljø med Git-kildekontrol. Ved hjælp af disse API'er kan du forbinde individuelle løsninger eller hele miljøer med understøttede Git-lagre og administrere disse forbindelser via kode.

Forudsætninger

Før du bruger disse API'er, skal du sikre dig, at du har:

  • Adgang til et Microsoft Dataverse-miljø
  • Systemadministratortilladelser
  • Læse- og skriveadgang til et Git-lager

ConnectToGit API

Opretter en forbindelse mellem en Dataverse-løsning eller et miljø og et Git-lager. Ved hjælp af denne forbindelse kan du administrere kildestyring for dine Dataverse-komponenter.

Parametre

ConnectToGit API'en accepterer følgende parametre:

Parameter Type Påkrævet Beskrivende tekst
GitFolder Streng Ja Navnet på den mappe, du vil binde din løsning eller dit miljø til.
Branch Streng Ja Navnet på den forgrening, du vil oprette forbindelse til.
ConnectionType Heltal Nej Angiver, hvad der skal oprettes forbindelse til. Se ConnectionType-parameter.
GitProvider Heltal Nej Git-udbyderen. Se GitProvider-parameter.
Organization Streng Nej Navnet på den organisation, du vil oprette forbindelse til.
Project Streng Nej Navnet på det projekt, du vil oprette forbindelse til.
Repository Streng Nej Navnet på det lager, du vil oprette forbindelse til.
RootFolder Streng Nej Navnet på rodmappen, hvor alle dine løsninger er placeret i løsningsområdet.
SolutionUniqueName Streng Nej Det entydige navn på den løsning, du vil oprette forbindelse til git.
UpstreamBranch Streng Nej Navnet på den upstream-forgrening, du vil oprette forbindelse til. Standardindstilles til standardgrenen i lager.
GitHubConnectionId Streng Nej Forbindelses-id for Power Platform GitHub forbindelse. Påkrævet, når GitProvider er 1 , medmindre du angiver GitHubPAT. Kan ikke bruges, når understøttelse af virtuelle netværk (VNET) er aktiveret for Dataverse-miljøet.
GitHubPAT Streng Nej GitHub personligt adgangstoken med adgang til måldepotet. Påkrævet, når GitProvider er 1 , medmindre du angiver GitHubConnectionId. Påkrævet, når understøttelse af virtuelt netværk (VNET) er aktiveret for Dataverse-miljøet.
GitHubAppConfigId Streng Nej Henvisning til konfigurationsposten for GitHub-appen. Påkrævet, når GitProvider er 1. Brug formatet githubappconfigs(<recordId>).

Parameteren ConnectionType

Parameteren ConnectionType styrer, om der skal oprettes forbindelse til hele Dataverse-miljøet eller en bestemt løsning.

Værdi Label Beskrivende tekst
0 Løsning Forbinder en bestemt Dataverse-løsning til Git.
1 Miljø Forbinder hele Dataverse-miljøet med Git.

GitProvider-parameter

GitProvider Brug parameteren til at angive den type Git-provider, du bruger, enten Azure DevOps eller GitHub.

Værdi Label Beskrivende tekst
0 Azure DevOps Bruges til lagre, der hostes på Azure DevOps
1 GitHub Bruges til lagre, der hostes på GitHub

DisconnectFromGit API

Fjerner Git-forbindelsen fra en Dataverse-løsning eller et datamiljø og deaktiverer integration af versionsstyring.

Parameter

API'en DisconnectFromGit har kun én parameter.

Parameter Type Påkrævet Beskrivende tekst
SolutionUniqueName Streng Nej Det entydige navn på den løsning, du vil afbryde forbindelsen til Git. Udelad forbindelsen til alle løsninger eller miljøet.

Flere oplysninger

Her er et par parameterværdiindstillinger, der skal angives, når der aktiveres DisconnectFromGit.

  • Afbryd forbindelsen til en enkelt løsning: Angiv SolutionUniqueName for at afbryde forbindelsen til en bestemt løsning.
  • Afbryd forbindelsen til alle løsninger: Angiv ingen parametre for at afbryde forbindelsen til alle forbindelser på løsningsniveau.
  • Afbryd forbindelsen til miljøet: Angiv ingen parametre for at afbryde forbindelsen på miljøniveau.

Eksempler

I følgende eksempler beskrives scenarier for brug af ConnectToGit API'er og DisconnectFromGit :

Forbind hele dit Dataverse-miljø til et Azure DevOps-lager

Denne forbindelse muliggør kildestyring for alle konfigurationer og komponenter på miljøniveau.

Brug ikke disse parametre med denne forbindelse:

  • RootFolder
  • SolutionUniqueName
  • UpstreamBranch

I dette eksempel kan du se, hvordan du bruger handlingen ConnectToGit til at forbinde hele dit Dataverse-miljø til et Azure DevOps-lager.

Anmodning

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

Få mere at vide om, hvordan du aktiverer web-API-handlinger

Opret forbindelse til et GitHub lager

Før du bruger API'en til at oprette forbindelse til GitHub, skal du fuldføre konfigurationstrinnene for at oprette GitHub-appen, installere den på mållageret, importere dens private nøgle til Azure Key Vault og oprette Power Platform-GitHub-forbindelsen. Du kan få flere oplysninger under Opret forbindelse til GitHub.

Opret en GitHub appkonfigurationspost ved hjælp af web-API'en

Brug Dataverse OData Web API til at oprette en githubappconfig post. Send en POST-anmodning med GitHub App-klient-id, Key Vault URI og nøglenavn.

Du kan bruge en vilkårlig HTTP-klient, f.eks. Insomnia, Visual Studio Code REST Client eller curl, til at foretage disse anmodninger. Du skal bruge et ihændehavertoken til godkendelse. Du kan få flere oplysninger under Brug Microsoft Dataverse Web-API' en.

POST {{DataverseOrgUrl}}/api/data/v9.2/githubappconfigs
Authorization: Bearer {{token}}
Content-Type: application/json

{
    "githubappid": "Iv23liBWoH9sf7xDrRe6",
    "keyvaulturi": "{{KeyVaultUri}}",
    "keyname": "demoGitHubKey"
}

Vigtigt

Bemærk det post-id, der returneres i svarheaderen. Du skal bruge denne værdi til at identificere den administrerede identitet, konfigurere RBAC og kalde ConnectToGit. Post-id'et bruger et format, f.eks 13d565bb-4c22-f111-a546-7ced8d6e3e85. .

Når du har oprettet den GitHub appkonfigurationspost, skal du tildele rollen Key Vault Kryptografibruger til den dataverse-administrerede identitet som beskrevet i Konfigurer Key Vault rollebaseret adgangskontrol (RBAC).

Kald ConnectToGit-API'et

Når du har oprettet posten githubappconfig og konfigureret Key Vault RBAC, skal du bruge Dataverse Web API til at oprette forbindelse til kildestyringen ved at kalde handlingenConnectToGit.

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

Vigtigt

Forgreningen skal allerede findes i lageret. Opret den i GitHub først, hvis det er nødvendigt. Værdien GitHubAppConfigId skal bruge formatet githubappconfigs(<recordId>).

Skærmbillede af en HTTP-anmodningstekst for ConnectToGit-API'en med GitHub parametre.

Hvis du modtager et vellykket svar, er miljøet forbundet med GitHub.

Opret forbindelse til et GitHub lager ved hjælp af PowerShell

Følgende PowerShell-eksempel opretter GitHub appkonfigurationspost, venter på, at den dataverse-administrerede identitet vises i Microsoft Entra ID, tildeler rollen Key Vault Crypto User til den administrerede identitet og kalder handlingenConnectToGit. Hvis du allerede har en konfigurationspost for GitHub-appen, skal du angive GitHubAppConfigId for at springe konfigurations- og rolletildelingstrinnene i Key Vault over.

Installér og importér modulerne Az.Accounts, Az.KeyVaultog Az.Resources PowerShell, før du kører eksemplet. Log på med Connect-AzAccount ved hjælp af en konto, der har adgang til Dataverse-miljøet, og tilladelse til at tildele Key Vault roller.

Hvis understøttelse af virtuelt netværk (VNET) er aktiveret for Dataverse-miljøet, skal du angive GitHubPAT. GitHub forbindelser kan ikke bruges med understøttelse af virtuelle netværk.

[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."

Afbryd hele dit Dataverse-miljø fra Git-kildekontrol

Denne handling fjerner Git-forbindelsen på miljøniveau. Brug ikke SolutionUniqueName parameteren til denne handling. Dataverse identificerer og fjerner automatisk Git-forbindelsen på miljøniveau.

I dette eksempel kan du se, hvordan du bruger handlingen DisconnectFromGit til at afbryde forbindelsen mellem hele dit Dataverse-miljø og Git-kildekontrolelementet.

Anmodning

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

Få mere at vide om, hvordan du aktiverer web-API-handlinger

Forbind den første løsning til et Git-lager

Denne forbindelse etablerer lagerlinket og mappestrukturen for versionsstyring på løsningsniveau til den første løsning i et miljø.

Du skal inkludere værdier for disse parametre for at angive løsningen:

  • RootFolder
  • SolutionUniqueName

I dette eksempel kan du se, hvordan du bruger handlingen ConnectToGit til at oprette forbindelse mellem den første løsning og et Git-lager.

Anmodning

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

Få mere at vide om, hvordan du aktiverer web-API-handlinger

Forbind ekstra løsninger til det samme Git-lager, når du har oprettet forbindelse til den indledende løsning

Når du har oprettet forbindelse til den første løsning, skal du kun bruge de løsningsspecifikke parametre. Du nedarver oplysningerne om lagerforbindelsen fra den indledende forbindelse.

Angiv kun disse parametre:

  • SolutionUniqueName
  • Branch
  • GitFolder

Vigtigt

Du skal først oprette forbindelse til den første løsning, før dette fungerer. Se Opret forbindelse mellem den første løsning og et Git-lager.

I dette eksempel kan du se, hvordan du bruger handlingen ConnectToGit til at oprette forbindelse mellem efterfølgende løsninger og et Git-lager.

Anmodning

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

Få mere at vide om, hvordan du aktiverer web-API-handlinger

Afbryd forbindelsen mellem en bestemt løsning og Git-kildestyringen, samtidig med at andre løsninger er tilsluttet

Brug denne fremgangsmåde til at fjerne kildekontrol for én løsning, uden at det påvirker andre.

I dette eksempel kan du se, hvordan du bruger handlingen AfbrydFraGit til at fjerne kildekontrol for én løsning uden at påvirke andre.

Anmodning

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

Få mere at vide om, hvordan du aktiverer web-API-handlinger

Fejlhåndtering

Hverken API'en ConnectToGitDisconnectFromGit eller returnerer en værdi, når den fuldføres. Når en API mislykkes, returneres der en fejl.

Almindelige fejlscenarier omfatter:

  • Ugyldige legitimationsoplysninger: Kontrollér, at du har gyldig godkendelse til Git-udbyderen.
  • Lageret blev ikke fundet: Kontrollér navnene på organisationen, projektet og lageret.
  • Tilladelse nægtet: Kontrollér, at din Dataverse-konto har tilladelser til administration af kildekontrol.
  • Løsningen blev ikke fundet: Kontrollér, at SolutionUniqueName findes i dit miljø.
  • Forgreningen findes ikke: Bekræft, at den angivne forgrening findes i lageret.

Support og yderligere ressourcer

Du kan få flere oplysninger om integration af versionsstyring med Dataverse i: