הערה
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות להיכנס או לשנות מדריכי כתובות.
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות לשנות מדריכי כתובות.
השתמש בממשקי ConnectToGit ה DisconnectFromGit - API כדי לשלב באופן תיכנותי את סביבת Microsoft Dataverse שלך עם בקרת המקור של Git. באמצעות ממשקי API אלה, באפשרותך לחבר פתרונות בודדים או בסביבות שלמות למאגרים נתמכים של Git ולנהל חיבורים אלה באמצעות קוד.
דרישות מוקדמות
לפני השימוש בממשקי API אלה, ודא שיש לך:
- גישה לסביבה של Microsoft Dataverse
- הרשאות מנהל מערכת
- קריאה וכתיבה של גישה למאגר Git
ConnectToGit API
יצירת חיבור בין פתרון Dataverse או סביבה למאגר Git. באמצעות חיבור זה, באפשרותך לנהל בקרת מקור עבור רכיבי Dataverse שלך.
פרמטרים
ה ConnectToGit - API מקבל את הפרמטרים הבאים:
| פרמטר | סוג | נדרש | Description |
|---|---|---|---|
GitFolder |
מחרוזת | כן | שם התיקיה שאליה ברצונך לאגד את הפתרון או הסביבה שלך. |
Branch |
מחרוזת | כן | שם הענף שאליו ברצונך להתחבר. |
ConnectionType |
מספר שלם | לא | מציין לאן יש להתחבר. ראה פרמטר ConnectionType. |
GitProvider |
מספר שלם | לא | ספק Git. ראה פרמטר GitProvider. |
Organization |
מחרוזת | לא | שם הארגון שאליו ברצונך להתחבר. |
Project |
מחרוזת | לא | שם הפרוייקט שאליו ברצונך להתחבר. |
Repository |
מחרוזת | לא | שם המאגר שאליו ברצונך להתחבר. |
RootFolder |
מחרוזת | לא | שם תיקיית הבסיס שבה כל הפתרונות שלך נמצאים בטווח הפתרון. |
SolutionUniqueName |
מחרוזת | לא | השם הייחודי של הפתרון שברצונך להתחבר ל- git. |
UpstreamBranch |
מחרוזת | לא | שם הענף במעלה הזרם שאליו ברצונך להתחבר. מעבר לענף מאגר המוגדר כברירת מחדל. |
GitHubConnectionId |
מחרוזת | לא | מזהה חיבור עבור חיבור GitHub Power Platform. נדרש כאשר GitProvider הוא 1, אלא אם תספק GitHubPAT. לא ניתן להשתמש כאשר תמיכה ברשת וירטואלית (VNET) זמינה עבור סביבת Dataverse. |
GitHubPAT |
מחרוזת | לא | GitHub אסימון גישה אישית עם גישה למאגר היעד. נדרש כאשר GitProvider הוא 1, אלא אם תספק GitHubConnectionId. נדרש כאשר תמיכה ברשת וירטואלית (VNET) זמינה עבור הסביבה Dataverse. |
GitHubAppConfigId |
מחרוזת | לא | הפניה לרשומת התצורה של יישום GitHub. נדרש כאשר GitProvider הוא 1. השתמש בתבנית githubappconfigs(<recordId>). |
פרמטר סוג חיבור
הפרמטר ConnectionType קובע אם להתחבר לסביבה כולה של Dataverse או לפתרון ספציפי.
| ערך: | תווית | Description |
|---|---|---|
| 0 | הפתרון | חיבור פתרון Dataverse ספציפי ל- Git. |
| 1 | סביבה | מחבר את סביבת Dataverse כולה ל- Git. |
פרמטר GitProvider
השתמש בפרמטר GitProvider כדי לציין את סוג ספק Git שבו אתה משתמש, Azure DevOps או GitHub.
| ערך: | תווית | Description |
|---|---|---|
| 0 | Azure DevOps | השתמש למאגרים המתארחים ב- Azure DevOps |
| 1 | GitHub | השתמש למאגרים המתארחים ב- GitHub |
DisconnectFromGit API
הסרה של חיבור Git מפתרון או מסביבה של Dataverse, והשבתת שילוב בקרת המקור.
פרמטר
ל DisconnectFromGit - API יש פרמטר אחד בלבד.
| פרמטר | סוג | נדרש | Description |
|---|---|---|---|
SolutionUniqueName |
מחרוזת | לא | השם הייחודי של הפתרון שברצונך לנתק מ- 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 App באמצעות ה- API של האינטרנט
השתמש ב- API של האינטרנט Dataverse OData כדי ליצור רשומה githubappconfig . שלח בקשת POST עם מזהה הלקוח של אפליקציית GitHub, ה-URI של Key Vault ושם המפתח.
באפשרותך להשתמש בכל לקוח HTTP, כגון Insomnia, Visual Studio Code REST או curl, כדי לבצע שיחות אלה. דרוש לך אסימון נושא לצורך אימות. לקבלת מידע נוסף, ראה שימוש ב- MICROSOFT DATAVERSE WEB API.
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, הקצה את התפקיד משתמש ההצפנה של Key Vault לזהות המנוהלת Dataverse כמתואר במאמר קביעת תצורה של בקרת גישה מבוססת תפקידים (RBAC) של Key Vault.
התקשר ל- API של ConnectToGit
לאחר יצירת הרשומה וקביעת githubappconfig התצורה של Key Vault RBAC, השתמש ב- API של Dataverse Web כדי ליצור את חיבור בקרת המקור על-ידי ביצוע 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 Crypto User לזהות המנוהלת, וקוראת לפעולת ConnectToGit אם כבר יש לך רשומת תצורה של GitHub App, ציין GitHubAppConfigId כדי לדלג על שלבי התצורה והקצאת התפקידים ב-Key Vault.
התקן ויבא את Az.Accountsהמודולים Az.KeyVault, , Az.Resources ו- PowerShell לפני שתפעיל את הדוגמה. היכנס באמצעות Connect-AzAccount חשבון בעל גישה לסביבה Dataverse ולההרשאות להקצות Key Vault תפקידים.
אם התמיכה ברשת הווירטואלית (VNET) זמינה עבור הסביבה 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 API וגם ה-DisconnectFromGit API לא מחזירים ערך כאשר הם מסתיימים בהצלחה. כאשר API נכשל, הוא מחזיר שגיאה.
תרחישי שגיאה נפוצים כוללים:
- ודא שיש לך אימות תקין לספק Git: פרטי זיהוי שגויים.
- המאגר לא נמצא: אמת את שמות הארגון, הפרוייקט והמאגר.
- ההרשאה נדחתה: ודא שלחשבון Dataverse שלך יש הרשאות ניהול בקרת מקור.
-
הפתרון לא נמצא: ודא שהפתרון
SolutionUniqueNameקיים בסביבה שלך. - הענף אינו קיים: ודא שהענף שצוין קיים במאגר.
תמיכה ומשאבים נוספים
לקבלת מידע נוסף אודות שילוב בקרת מקור עם Dataverse, ראה: