แชร์ผ่าน


การรวม Git โดยอัตโนมัติโดยใช้ API

เครื่องมือการรวม Microsoft Fabric Git ช่วยให้ทีมสามารถทํางานร่วมกันโดยใช้การควบคุมแหล่งที่มาเพื่อสร้างกระบวนการเผยแพร่ที่มีประสิทธิภาพและนํากลับมาใช้ใหม่ได้สําหรับเนื้อหา Fabric ของตน

ด้วย Microsoft Fabric REST API คุณสามารถทําให้ขั้นตอนและกระบวนการ Fabric ทํางานได้เร็วขึ้นและมีข้อผิดพลาดน้อยลงโดยอัตโนมัติ ประสิทธิภาพนี้นําไปสู่การประหยัดค่าใช้จ่ายและผลผลิตที่ดีขึ้น

บทความนี้อธิบายวิธีการใช้ REST API การรวม Git เพื่อทําให้การรวม Git ใน Microsoft Fabric เป็นอัตโนมัติ

Prerequisites

เมื่อต้องการทํางานกับ Fabric Git API คุณจําเป็นต้องมี:

คุณสามารถใช้ REST API ได้โดยไม่ต้องใช้ PowerShell แต่สคริปต์ในบทความนี้ใช้ PowerShell เมื่อต้องการเรียกใช้สคริปต์ ให้ทําตามขั้นตอนต่อไปนี้:

ฟังก์ชัน API การรวม Git

การรวม Git REST API สามารถช่วยให้คุณบรรลุการผสานรวมอย่างต่อเนื่องและการจัดส่งแบบต่อเนื่อง (CI/CD) ของเนื้อหาของคุณ นี่คือตัวอย่างบางส่วนของสิ่งที่สามารถทําได้โดยใช้ API:

Examples

ใช้สคริปต์ PowerShell ต่อไปนี้เพื่อทําความเข้าใจวิธีการดําเนินการอัตโนมัติทั่วไปหลายกระบวนการ หากต้องการดูหรือคัดลอกข้อความในตัวอย่างของ PowerShell ให้ใช้ลิงก์ในส่วนนี้ คุณยังสามารถดูตัวอย่าง ทั้งหมดในตัวอย่าง การรวม Fabric Git ของ Git repo

เชื่อมต่อและอัปเดต

ในส่วนนี้จะอธิบายขั้นตอนที่เกี่ยวข้องในการเชื่อมต่อและอัปเดตพื้นที่ทํางานด้วย Git

สําหรับสคริปต์ที่สมบูรณ์ ดูเชื่อมต่อและอัปเดตจาก Git (ความเข้ากันได้ของสคริปต์คือ PowerShell 5.1)

  1. เชื่อมต่อกับบัญชี Azure และรับโทเค็นการเข้าถึง - ลงชื่อเข้าใช้ Fabric ในฐานะผู้ใช้หรือบริการหลัก ใช้คําสั่ง Connect-AzAccount เพื่อเชื่อมต่อ เมื่อต้องการรับโทเค็นการเข้าถึง ให้ใช้คําสั่ง Get-AzAccessToken และ แปลงโทเค็นสตริงที่ปลอดภัยเป็นข้อความธรรมดา

    โค้ดของคุณควรมีลักษณะดังนี้:

     $global:resourceUrl = "https://api.fabric.microsoft.com"
    
     $global:fabricHeaders = @{}
    
     function SetFabricHeaders() {
    
        #Login to Azure
        Connect-AzAccount | Out-Null
    
        # Get authentication
        $secureFabricToken = (Get-AzAccessToken -AsSecureString -ResourceUrl $global:resourceUrl).Token
    
        # Convert secure string to plain test
        $ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureFabricToken)
        try {
            $fabricToken = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
        } finally {
            [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
       }
    
      $global:fabricHeaders = @{
         'Content-Type' = "application/json"
         'Authorization' = "Bearer {0}" -f $fabricToken
     }
    }
    
  2. เรียกใช้ Connect API เพื่อเชื่อมต่อพื้นที่ทํางานกับที่เก็บและสาขา Git (คุณอาจต้อง สร้างการเชื่อมต่อ ก่อน)

    สําหรับข้อมูลเกี่ยวกับวิธีการรับรายละเอียดการเชื่อมต่อ (ID, ชื่อ) โปรดดูที่ รับหรือสร้างการเชื่อมต่อข้อมูลประจําตัวของผู้ให้บริการ Git

    $global:baseUrl = "https://api.fabric.microsoft.com/v1"
    $workspaceName = "<WORKSPACE NAME>"
    $getWorkspacesUrl = "{0}/workspaces" -f $global:baseUrl
    $workspaces = (Invoke-RestMethod -Headers $global:fabricHeaders -Uri $getWorkspacesUrl -Method GET).value
    
    # Find the workspace by display name
    $workspace = $workspaces | Where-Object {$_.DisplayName -eq $workspaceName}
    
    # Connect to Git
    Write-Host "Connecting the workspace '$workspaceName' to Git."
    $connectUrl = "{0}/workspaces/{1}/git/connect" -f $global:baseUrl, $workspace.Id
    
    # AzureDevOps details
    $azureDevOpsDetails = @{
        gitProviderType = "AzureDevOps"
        organizationName = "<ORGANIZATION NAME>"
        projectName = "<PROJECT NAME>"
        repositoryName = "<REPOSITORY NAME>"
        branchName = "<BRANCH NAME>"
        directoryName = "<DIRECTORY NAME>"
    }
    
    $connectToGitBody = @{}
    #Leave only one of the following two (delete the other one):
    #-----------------------------------------------------------------------------------------------
    # 1. Automatic (SSO)
    $connectToGitBody = @{
        gitProviderDetails = $gitProviderDetails
    } | ConvertTo-Json
    #-----------------------------------------------------------------------------------------------
    # 2. ConfiguredConnection (User or service principal)
    # Get workspaces
    $connectionName = "<CONNECTION Name>"
    $getConnectionsUrl = "{0}/connections" -f $global:baseUrl
    $connections = (Invoke-RestMethod -Headers $global:fabricHeaders -Uri $getConnectionsUrl -Method GET).value
    
    # Find the connection by display name
    $connection = $connections | Where-Object {$_.DisplayName -eq $connectionName}
    $connectToGitBody = @{
        gitProviderDetails = $azureDevOpsDetails
        myGitCredentials = @{
            source = "ConfiguredConnection"
            connectionId = $connection.id
            }
        } | ConvertTo-Json
    #-----------------------------------------------------------------------------------------------
    
    Invoke-RestMethod -Headers $global:fabricHeaders -Uri $connectUrl -Method POST -Body $connectToGitBody
    
  3. เรียกใช้ API การเชื่อมต่อ เริ่มต้น เพื่อเริ่มต้นการเชื่อมต่อระหว่างพื้นที่ทํางานและที่เก็บ/สาขา Git

    # Initialize Connection
    
    Write-Host "Initializing Git connection for workspace '$workspaceName'."
    
    $initializeConnectionUrl = "{0}/workspaces/{1}/git/initializeConnection" -f $global:baseUrl, $workspace.Id
    $initializeConnectionResponse = Invoke-RestMethod -Headers $global:fabricHeaders -Uri $initializeConnectionUrl -Method POST -Body "{}"
    
  4. โดยยึดตามการตอบสนองจาก API การเชื่อมต่อเริ่มต้น เรียกใช้การอัป เดจาก Git API เพื่อดําเนินการอัปเดตให้เสร็จสมบูรณ์ หรือไม่ต้องทําอะไรถ้าไม่มีการดําเนินการใด ๆ

    สคริปต์ต่อไปนี้จะปรับปรุงและ ตรวจสอบความคืบหน้า:

    if ($initializeConnectionResponse.RequiredAction -eq "UpdateFromGit") {
    
        # Update from Git
        Write-Host "Updating the workspace '$workspaceName' from Git."
    
        $updateFromGitUrl = "{0}/workspaces/{1}/git/updateFromGit" -f $global:baseUrl, $workspace.Id
    
        $updateFromGitBody = @{ 
            remoteCommitHash = $initializeConnectionResponse.RemoteCommitHash
      workspaceHead = $initializeConnectionResponse.WorkspaceHead
        } | ConvertTo-Json
    
        $updateFromGitResponse = Invoke-WebRequest -Headers $global:fabricHeaders -Uri $updateFromGitUrl -Method POST -Body $updateFromGitBody
    
        $operationId = $updateFromGitResponse.Headers['x-ms-operation-id']
        $retryAfter = $updateFromGitResponse.Headers['Retry-After']
        Write-Host "Long Running Operation ID: '$operationId' has been scheduled for updating the workspace '$workspaceName' from Git with a retry-after time of '$retryAfter' seconds." -ForegroundColor Green
    
        # Poll Long Running Operation
        $getOperationState = "{0}/operations/{1}" -f $global:baseUrl, $operationId
        do
        {
            $operationState = Invoke-RestMethod -Headers $global:fabricHeaders -Uri $getOperationState -Method GET
    
            Write-Host "Update from Git operation status: $($operationState.Status)"
    
            if ($operationState.Status -in @("NotStarted", "Running")) {
                Start-Sleep -Seconds $retryAfter
            }
        } while($operationState.Status -in @("NotStarted", "Running"))
    }
    

อัปเดตจาก Git

ในส่วนนี้ เราจะอธิบายขั้นตอนที่เกี่ยวข้องในการอัปเดตพื้นที่ทํางานด้วยการเปลี่ยนแปลงจาก Git ในสคริปต์นี้ เราอัปเดตรายการพื้นที่ทํางานด้วยการเปลี่ยนแปลงจาก Git แต่เราปล่อยให้ที่เก็บ Git ไม่เปลี่ยนแปลง

สําหรับสคริปต์ที่สมบูรณ์ ดูอัปเดตพื้นที่ทํางานจาก Git

  1. เข้าสู่ระบบ Git และรับการรับรองความถูกต้อง
  2. เรียก Get Status API เพื่อสร้างการอัปเดตจากเนื้อหาคําขอ Git
  3. เรียกใช้อัปเดตจาก Git API เพื่ออัปเดตพื้นที่ทํางานด้วยการยอมรับที่ส่งไปยังสาขาที่เชื่อมต่อแล้ว

ผูกมัดทั้งหมด

ส่วนนี้ให้คําอธิบายทีละขั้นตอนเกี่ยวกับวิธีการบันทึกการเปลี่ยนแปลงทั้งหมดจากพื้นที่ทํางานไปยัง Git ทางโปรแกรม

สําหรับสคริปต์ที่สมบูรณ์ ดู ยอมรับการเปลี่ยนแปลงทั้งหมดไปยัง Git

  1. เข้าสู่ระบบ Git และรับการรับรองความถูกต้อง
  2. เชื่อมต่อกับพื้นที่ทํางาน
  3. เรียกใช้งาน Commit ไปยัง Git REST API
  4. รับ Long Running OperationId สําหรับการโพลล์สถานะของการดําเนินการ

เลือกความมุ่งมั่น

ในส่วนนี้จะอธิบายขั้นตอนที่เกี่ยวข้องในการกําหนดเฉพาะการเปลี่ยนแปลงที่เฉพาะเจาะจงจากพื้นที่ทํางานไปยัง Git

สําหรับสคริปต์ที่สมบูรณ์ ดู ยอมรับการเปลี่ยนแปลงที่เลือกไปยัง Git

  1. เข้าสู่ระบบ Git และรับการรับรองความถูกต้อง
  2. เชื่อมต่อกับพื้นที่ทํางาน
  3. เรียกใช้ API รับ สถานะ เพื่อดูว่าพื้นที่ทํางานรายการใดมีการเปลี่ยนแปลง
  4. เลือกรายการที่ระบุเพื่อดําเนินการ
  5. เรียกใช้การ ยอมรับไปยัง Git API เพื่อยอมรับการเปลี่ยนแปลงที่เลือกจากพื้นที่ทํางานไปยังสาขาระยะไกลที่เชื่อมต่อ

ตรวจสอบความคืบหน้าของการทํางานที่ใช้เวลานาน

สําหรับสคริปต์ที่สมบูรณ์ ดู สํารวจการทํางานที่ใช้เวลานาน

  1. เรียกใช้ operationId จากอัปเดตจาก Git หรือยืนยันกับสคริปต์ Git
  2. เรียกใช้ API รับสถานะ LRO ในช่วงเวลาที่ระบุ (เป็นวินาที) และพิมพ์สถานะ

รับหรือสร้างการเชื่อมต่อข้อมูลประจําตัวของผู้ให้บริการ Git

ในการเชื่อมต่อกับที่เก็บ Git หรืออัปเดตข้อมูลประจําตัว Git คุณต้องระบุ connectionId connectionId สามารถมาจากการเชื่อมต่อใหม่ที่คุณสร้างหรือการเชื่อมต่อที่มีอยู่

  • สร้าง การเชื่อมต่อใหม่ด้วยข้อมูลประจําตัวของผู้ให้บริการ Git ของคุณ
  • ใช้ การเชื่อมต่อที่มีอยู่ที่คุณมีสิทธิ์

สร้างการเชื่อมต่อใหม่ที่จัดเก็บข้อมูลประจําตัว Git ของคุณ

ส่วนย่อยของโค้ดต่อไปนี้แสดงเนื้อหาคําขอตัวอย่างเพื่อสร้างการเชื่อมต่อที่จัดเก็บข้อมูลประจําตัว Azure DevOps ของคุณ ตัวอย่างทั้งหมดสามารถพบได้ใน Fabric samples repo

# Connection with ServicePrincipal details for AzureDevOpsSourceControl
$adoSPConnection = @{
    connectivityType = "ShareableCloud"
    displayName = "<CONNECTION NAME>"
    connectionDetails = @{
        type = "AzureDevOpsSourceControl"
        creationMethod = "AzureDevOpsSourceControl.Contents"
        parameters = @(
            @{
                dataType = "Text"
                name = "url"
                value = "<Repo url in Azure DevOps>"
            }
        )
    }
    credentialDetails = @{
        credentials = @{
            credentialType = "ServicePrincipal"
            tenantId = "<SP tenant (directory) id (Guid)>"
            servicePrincipalClientId = "<SP APP (client) id (Guid)>"
            servicePrincipalSecret = "<SP Secret>"
        }
    }
}

#Note: AzureDevOps for UserPrincipal is not supported (since it requires interactive OAuth2)

คําขอตัวอย่าง

POST https://api.fabric.microsoft.com/v1/connections

{
  "displayName": "<CONNECTION NAME>",
  "connectivityType": "ShareableCloud",
  "connectionDetails": {
    "creationMethod": "AzureDevOpsSourceControl.Contents",
    "type": "AzureDevOpsSourceControl",
    "parameters": [
     {
      "dataType": "Text",
      "name": "url",
      "value": "<Repo url in Azure DevOps>”
     }
    ]
  },
  "credentialDetails": {
    "credentials": {
      "credentialType": "ServicePrincipal",
      "tenantId": “<SP tenant (directory) id (Guid)>”,
      "servicePrincipalClientId": “<SP APP (client) id (Guid)>”,
      "servicePrincipalSecret": “<SP Secret>”
    }
  }
}
 

ตัวอย่างการตอบสนอง:

{
  "allowConnectionUsageInGateway": false,
  "id": "********-****-****-****-c13b543982ac",
  "displayName": "<CONNECTION NAME>",
  "connectivityType": "ShareableCloud",
  "connectionDetails": {
    "path": "<Repo url in Azure DevOps>",
    "type": "AzureDevOpsSourceControl"
  },
  "privacyLevel": "Organizational",
  "credentialDetails": {
    "credentialType": "ServicePrincipal",
    "singleSignOnType": "None",
    "connectionEncryption": "NotEncrypted",
    "skipTestConnection": false
  }
}

รับรายการการเชื่อมต่อที่มีอยู่

ใช้ API การเชื่อมต่อรายการ เพื่อรับรายการของการเชื่อมต่อที่มีอยู่ที่คุณมีสิทธิ์และคุณสมบัติ

คำขอตัวอย่าง

GET https://api.fabric.microsoft.com/v1/connections

การตอบกลับตัวอย่าง

{
 "value": [
  {
   "id": "e3607d15-6b41-4d11-b8f4-57cdcb19ffc8",
   "displayName": "MyGitHubPAT1",
   "gatewayId": null,
   "connectivityType": "ShareableCloud",
   "connectionDetails": {
    "path": "https://github.com",
    "type": "GitHubSourceControl"
   },
   "privacyLevel": "Organizational",
   "credentialDetails": {
    "credentialType": "Key",
    "singleSignOnType": "None",
    "connectionEncryption": "NotEncrypted",
    "skipTestConnection": false
   }
  },
  {
   "id": "3aba8f7f-d1ba-42b1-bb41-980029d5a1c1",
   "displayName": "MyGitHubPAT2",
   "gatewayId": null,
   "connectivityType": "ShareableCloud",
   "connectionDetails": {
    "path": "https://github.com/OrganizationName/RepositoryName",
    "type": "GitHubSourceControl"
   },
   "privacyLevel": "Organizational",
   "credentialDetails": {
    "credentialType": "Key",
    "singleSignOnType": "None",
    "connectionEncryption": "NotEncrypted",
    "skipTestConnection": false
   }
  }
 ]
}

คัดลอก ID ของการเชื่อมต่อที่คุณต้องการและใช้ใน Git - เชื่อมต่อหรือ Git - อัปเดต API ข้อมูลประจําตัว Git ของฉัน

ข้อควรพิจารณาและข้อจำกัด

  • การรวม Git โดยใช้ API อยู่ภายใต้ ข้อจํากัด เดียวกันกับอินเทอร์เฟซผู้ใช้การรวม Git
  • การรีเฟรชแบบจําลองความหมายโดยใช้ API การรีเฟรชที่ปรับปรุงแล้วจะทําให้เกิด Git diff หลังจากการรีเฟรชแต่ละครั้ง