แชร์ผ่าน


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

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

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

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

ข้อกำหนดเบื้องต้น

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

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

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

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

ตัวอย่าง

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

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

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

สําหรับสคริปต์ที่สมบูรณ์ ดูเชื่อมต่อและอัปเดตจาก Git

  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. เรียกใช้ API เชื่อมต่อเพื่อเชื่อมต่อพื้นที่ทํางานกับที่เก็บ 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 = @{
        gitProviderDetails = $azureDevOpsDetails
    } | 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. เรียกใช้ 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 ของคุณ ตัวอย่างแบบเต็มสามารถพบได้ใน repo ตัวอย่าง Fabric

# 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 (clint) id (Guid)>"
            servicePrincipalSecret = "<SP Secret>"
        }
    }
}

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

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

ใช้ 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 หลังจากการรีเฟรชแต่ละครั้ง