Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft Dataverse ortamınızı Git kaynak denetimiyle program aracılığıyla tümleştirmek için ConnectToGit ve DisconnectFromGit API'lerini kullanın. Bu API'leri kullanarak tek tek çözümleri veya ortamların tamamını desteklenen Git depolarına bağlayabilir ve bu bağlantıları kod aracılığıyla yönetebilirsiniz.
Prerequisites
Bu API'leri kullanmadan önce şunlara sahip olduğunuzdan emin olun:
- Microsoft Dataverse ortamına erişim
- Sistem yöneticisi izinleri
- Git deposuna okuma ve yazma erişimi
ConnectToGit API
Dataverse çözümü veya ortamı ile Git deposu arasında bir bağlantı oluşturur. Bu bağlantıyı kullanarak Dataverse bileşenleriniz için kaynak denetimini yönetebilirsiniz.
Parameters
ConnectToGit API aşağıdaki parametreleri kabul eder:
| Parametre | Türü | Zorunlu | Description |
|---|---|---|---|
GitFolder |
String | Evet | Çözümünüzü veya ortamınızı bağlamak istediğiniz klasörün adı. |
Branch |
String | Evet | Bağlanmak istediğiniz dalın adı. |
ConnectionType |
Tam sayı | Hayır | Bağlanılacak şeyi belirtir. Bkz. ConnectionType parametresi. |
GitProvider |
Tam sayı | Hayır | Git sağlayıcısı. Bkz . GitProvider parametresi. |
Organization |
String | Hayır | Bağlanmak istediğiniz kuruluşun adı. |
Project |
String | Hayır | Bağlanmak istediğiniz projenin adı. |
Repository |
String | Hayır | Bağlanmak istediğiniz deponun adı. |
RootFolder |
String | Hayır | Tüm çözümlerinizin çözüm kapsamında bulunduğu kök klasörün adı. |
SolutionUniqueName |
String | Hayır | Git'e bağlanmak istediğiniz çözümün benzersiz adı. |
UpstreamBranch |
String | Hayır | Bağlanmak istediğiniz yukarı akış dalının adı. Varsayılan olarak deponun varsayılan dalına ayarlanır. |
GitHubConnectionId |
String | Hayır | Power Platform GitHub bağlantısının bağlantı kimliği.
GitProvider
1 olduğunda gereklidir, aksi takdirde GitHubPAT sağlamanız gerekir. Dataverse ortamı için sanal ağ (VNET) desteği etkinleştirildiğinde kullanılamaz. |
GitHubPAT |
String | Hayır | Hedef depoya erişimi olan GitHub kişisel erişim belirteci.
GitProvider
1 olduğunda gereklidir, aksi takdirde GitHubConnectionId sağlamanız gerekir. Dataverse ortamı için sanal ağ (VNET) desteği etkinleştirildiğinde gereklidir. |
GitHubAppConfigId |
String | Hayır | GitHub Uygulaması yapılandırma kaydına referans.
GitProvider
1 olduğunda gereklidir.
githubappconfigs(<recordId>) biçimini kullanın. |
ConnectionType parametresi
parametresi, ConnectionType Dataverse ortamının tamamına mı yoksa belirli bir çözüme mi bağlanılıp bağlanılmayacağını denetler.
| Değer | Etiket | Description |
|---|---|---|
| 0 | Çözüm | Belirli bir Dataverse çözümünü Git'e bağlar. |
| 1 | Ortam | Dataverse ortamının tamamını Git'e bağlar. |
GitProvider parametresi
GitProvider Azure DevOps veya GitHub olmak üzere kullandığınız Git sağlayıcısının türünü belirtmek için parametresini kullanın.
| Değer | Etiket | Description |
|---|---|---|
| 0 | Azure DevOps | Azure DevOps'ta barındırılan depolar için kullanın |
| 1 | GitHub (İngilizce) | GitHub'da barındırılan depolar için kullanın |
Git'ten Bağlantıyı Kes API
Dataverse çözümünden veya ortamından Git bağlantısını kaldırır ve kaynak denetimi tümleştirmesini devre dışı bırakır.
Parametre
API'nin DisconnectFromGit yalnızca bir parametresi vardır.
| Parametre | Türü | Zorunlu | Description |
|---|---|---|---|
SolutionUniqueName |
String | Hayır | Git bağlantısını kesmek istediğiniz çözümün benzersiz adı. Tüm çözümleri veya ortamı bağlamaktan vazgeçin. |
Ek bilgiler
İşte DisconnectFromGit çağrılırken belirtilecek birkaç parametre değer seçeneği.
-
Tek çözümün bağlantısını kes: Belirli bir çözümün bağlantısını kesmek için
SolutionUniqueNamekullanın. - Çözüm bağlantılarını kes: Çözüm seviyesindeki tüm bağlantıları kesmek için parametre sağlamayın.
- Ortamın bağlantısını kes: Ortam düzeyindeki bağlantıyı kesmek için hiçbir parametre sağlamayın.
Examples
Aşağıdaki örnekler, DisconnectFromGit ve ConnectToGit API'lerini kullanmaya yönelik senaryoları açıklamaktadır:
- Dataverse ortamınızın tamamını bir Azure DevOps deposuna bağlama
- GitHub deposuna bağlanma
- PowerShell kullanarak GitHub deposuna bağlanma
- Dataverse ortamınızın tamamının Git kaynak denetimiyle bağlantısını kesme
- İlk çözümü bir Git deposuna bağlama
- İlk çözümü bağladıktan sonra ek çözümleri aynı Git deposuna bağlama
- Diğer çözümleri bağlı tutarken belirli bir çözümün Git kaynak denetimiyle bağlantısını kesme
Dataverse ortamınızın tamamını bir Azure DevOps deposuna bağlama
Bu bağlantı, tüm ortam düzeyindeki yapılandırmalar ve bileşenler için kaynak denetimini etkinleştirir.
Bu bağlantıyla bu parametreleri kullanmayın:
RootFolderSolutionUniqueNameUpstreamBranch
Bu örnekte, Dataverse ortamınızın tamamını bir Azure DevOps deposuna bağlamak için ConnectToGit eyleminin nasıl kullanılacağı gösterilmektedir.
İstek
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"
}
Yanıt
HTTP/1.1 204 No Content
OData-Version: 4.0
GitHub deposuna bağlanma
GITHUB bağlanmak için API'yi kullanmadan önce, GitHub Uygulamasını oluşturmak, hedef depoya yüklemek, özel anahtarını Azure Key Vault içeri aktarmak ve Power Platform GitHub bağlantısını oluşturmak için kurulum adımlarını tamamlayın. Daha fazla bilgi için bkz. GitHub bağlanma.
Web API'sini kullanarak GitHub Uygulama yapılandırma kaydı oluşturma
Kayıt oluşturmak için Dataverse OData Web API'sini githubappconfig kullanın. GitHub Uygulama istemci kimliği, Key Vault URI'si ve anahtar adıyla bir POST isteği gönderin.
Bu çağrıları yapmak için Uykusuzluk, Visual Studio Code REST İstemcisi veya curl gibi herhangi bir HTTP istemcisini kullanabilirsiniz. Kimlik doğrulaması için taşıyıcı belirteci gerekir. Daha fazla bilgi için bkz. Microsoft Dataverse Web API'sini kullanma.
POST {{DataverseOrgUrl}}/api/data/v9.2/githubappconfigs
Authorization: Bearer {{token}}
Content-Type: application/json
{
"githubappid": "Iv23liBWoH9sf7xDrRe6",
"keyvaulturi": "{{KeyVaultUri}}",
"keyname": "demoGitHubKey"
}
Important
Yanıt üst bilgisinde döndürülen kayıt kimliğini not edin. Yönetilen kimliği tanımlamak, RBAC'yi yapılandırmak ve çağrısı ConnectToGityapmak için bu değere ihtiyacınız vardır. Kayıt kimliği, 13d565bb-4c22-f111-a546-7ced8d6e3e85 gibi bir biçim kullanır.
GitHub Uygulaması yapılandırma kaydını oluşturduktan sonra, Key Vault rol tabanlı erişim denetimini yapılandırma (RBAC) bölümünde açıklandığı gibi Dataverse yönetilen kimliğine Key Vault Şifreleme Kullanıcısı rolünü atayın.
ConnectToGit API'sini çağırma
githubappconfig kaydını oluşturup Key Vault RBAC’yi yapılandırdıktan sonra, ConnectToGit eylemini çağırarak kaynak denetimi bağlantısını oluşturmak için Dataverse Web API’sini kullanın.
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
Dalın depoda zaten mevcut olması gerekir. Gerekirse onu önce GitHub’da oluşturun. Değerin GitHubAppConfigId biçimini githubappconfigs(<recordId>)kullanması gerekir.
Başarılı bir yanıt alırsanız ortam GitHub bağlanır.
PowerShell kullanarak GitHub deposuna bağlanma
Aşağıdaki PowerShell örneği, GitHub Uygulama yapılandırma kaydını oluşturur, Dataverse yönetilen kimliğinin Microsoft Entra ID görünmesini bekler, yönetilen kimliğe Key Vault Şifreleme Kullanıcısı rolünü atar ve eylemi çağırırConnectToGit. Zaten bir GitHub Uygulaması yapılandırma kaydınız varsa, yapılandırma ve Key Vault rol atama adımlarını atlamak için GitHubAppConfigId sağlayın.
Örneği çalıştırmadan önce Az.KeyVault, Az.Resources ve Az.Accounts PowerShell modüllerini yükleyip içeri aktarın. Dataverse ortamına erişimi ve Key Vault rolleri atama izni olan bir hesapla Connect-AzAccount oturum açın.
Dataverse ortamı için sanal ağ (VNET) desteği etkinleştirildiyse, GitHubPAT belirtin. GitHub bağlantılar sanal ağ desteğiyle kullanılamaz.
[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 ortamınızın tamamının Git kaynak denetimiyle bağlantısını kesme
Bu eylem, ortam düzeyi Git bağlantısını kaldırır. Bu işlem için parametresini SolutionUniqueName kullanmayın. Dataverse, ortam düzeyi Git bağlantısını otomatik olarak tanımlar ve kaldırır.
Bu örnekte, Dataverse ortamınızın tamamının Git kaynak denetimiyle bağlantısını kesmek için DisconnectFromGit eyleminin nasıl kullanılacağı gösterilmektedir.
İstek
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
Yanıt
HTTP/1.1 204 No Content
OData-Version: 4.0
İlk çözümü bir Git deposuna bağlama
Bu bağlantı, bir ortamdaki ilk çözüme çözüm düzeyinde kaynak denetimi için depo bağlantısını ve klasör yapısını oluşturur.
Çözümü belirtmek için bu parametrelerin değerlerini eklemeniz gerekir:
RootFolderSolutionUniqueName
Bu örnekte, ilk çözümü bir Git deposuna bağlamak için ConnectToGit eyleminin nasıl kullanılacağı gösterilmektedir.
İstek
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"
}
Yanıt
HTTP/1.1 204 No Content
OData-Version: 4.0
İlk çözümü bağladıktan sonra ek çözümleri aynı Git deposuna bağlama
İlk çözümü bağladıktan sonra yalnızca çözüme özgü parametreler gerekir. Depo bağlantı ayrıntılarını ilk bağlantıdan devralırsınız.
Yalnızca şu parametreleri ayarlayın:
SolutionUniqueNameBranchGitFolder
Important
Bu işlem çalışmadan önce ilk çözümü bağlamanız gerekir. Bkz. İlk çözümü git deposuna bağlama.
Bu örnekte, sonraki çözümleri bir Git deposuna bağlamak için ConnectToGit eyleminin nasıl kullanılacağı gösterilmektedir.
İstek
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"
}
Yanıt
HTTP/1.1 204 No Content
OData-Version: 4.0
Diğer çözümleri bağlı tutarken belirli bir çözümün Git kaynak denetimiyle bağlantısını kesme
Başkalarını etkilemeden bir çözümün kaynak denetimini kaldırmak için bu yaklaşımı kullanın.
Bu örnekte, başkalarını etkilemeden bir çözümün kaynak denetimini kaldırmak için DisconnectFromGit eyleminin nasıl kullanılacağı gösterilmektedir.
İstek
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"
}
Yanıt
HTTP/1.1 204 No Content
OData-Version: 4.0
Hata yönetimi
ConnectToGit ne de DisconnectFromGit API başarıyla tamamlandığında bir değer döndürmez. Api başarısız olduğunda bir hata döndürür.
Yaygın hatalar şunlardır:
- Geçersiz kimlik bilgileri: Git sağlayıcısında geçerli kimlik doğrulamasına sahip olduğunuzdan emin olun.
- Depo bulunamadı: Kuruluş, proje ve depo adlarını doğrulayın.
- İzin reddedildi: Dataverse hesabınızın kaynak denetimi yönetimi izinlerine sahip olduğundan emin olun.
-
Çözüm bulunamadı:
SolutionUniqueNameortamınızda bulunduğunu doğrulayın. - Dal yok: Belirtilen dalın depoda var olduğunu onaylayın.
Destek ve ek kaynaklar
Dataverse ile kaynak denetimi tümleştirmesi hakkında daha fazla bilgi için bkz: