다음을 통해 공유


API를 사용하여 Git 통합 자동화

Microsoft Fabric Git 통합 도구를 사용하면 팀이 소스 제어를 사용하여 함께 작업해 Fabric 콘텐츠에 대한 효율적이고 재사용 가능한 릴리스 프로세스를 빌드할 수 있습니다.

Microsoft Fabric REST API를 사용하면 Fabric 프로시저 및 프로세스를 자동화하여 적은 오류로 더 빠르게 작업을 완료할 수 있습니다. 이러한 효율성은 비용 절감과 생산성 향상으로 이어집니다.

이 문서에서는 Git 통합 REST API를 사용하여 Microsoft Fabric에서 Git 통합을 자동화하는 방법을 설명합니다.

필수 조건

Fabric Git API를 사용하려면 다음이 필요합니다.

PowerShell 없이 REST API를 사용할 수 있지만 이 문서의 스크립트에서는 PowerShell을 사용합니다. 스크립트를 실행하려면 다음 단계를 수행해야 합니다.

Git 통합 API 함수

Git 통합 REST API는 콘텐츠의 CI/CD(연속 통합 및 지속적인 업데이트)를 달성하는 데 도움이 될 수 있습니다. API를 사용하여 수행할 수 있는 작업에 대한 몇 가지 예는 다음과 같습니다.

예제

다음 PowerShell 스크립트를 사용하여 여러 가지 일반 자동화 프로세스를 수행하는 방법을 이해할 수 있습니다. PowerShell 샘플의 텍스트를 보거나 복사하려면 이 섹션의 링크를 사용합니다. 또한 Fabric Git 통합 샘플 GitHub 리포지토리의 모든 예제를 볼 수 있습니다.

연결 및 업데이트

이 섹션에서는 Git을 사용하여 작업 영역을 연결하고 업데이트하는 데 관련된 단계를 설명합니다.

전체 스크립트는 Git에서 연결 및 업데이트를 참조 하세요.

  1. 로그인하고 액세스 토큰 가져오기 - 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
        $fabricToken = (Get-AzAccessToken -ResourceUrl $global:resourceUrl).Token
    
    $global:fabricHeaders = @{
            'Content-Type' = "application/json"
            'Authorization' = "Bearer {0}" -f $fabricToken
        }
    }
    
  2. 연결 API를 호출하여 작업 영역을 Git 리포지토리 및 분기에 연결합니다.

    
    # 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. Git REST API에 대한 커밋을 호출합니다.
  4. 작업 상태를 폴링하기 위한 장기 OperationId를 가져옵니다.

선택적 커밋

이 섹션에서는 작업 영역에서 Git으로의 특정 변경 내용만 커밋하는 데 관련된 단계를 설명합니다.

전체 스크립트는 Git에 대한 선택 변경 내용 커밋을 참조하세요.

  1. Git에 로그인하고 인증을 얻습니다.
  2. 작업 영역에 연결합니다.
  3. 상태 가져오기 API를 호출하여 작업 영역이 변경된 항목을 확인합니다.
  4. 커밋할 특정 항목을 선택합니다.
  5. Git API에 커밋을 호출하여 작업 영역에서 연결된 원격 분기로 선택한 변경 내용을 커밋합니다.

장기 작업의 진행률 모니터링

전체 스크립트는 장기 작업 폴링을 참조하세요.

  1. Git에서 업데이트 또는 Git에 커밋 스크립트에서 operationId를 검색합니다.
  2. 지정된 간격(초)에 LRO 상태 가져오기 API를 호출하고 상태를 인쇄합니다.

고려 사항 및 제한 사항

  • API를 사용하는 Git 통합에는 Git 통합 사용자 인터페이스와 동일한 제한 사항이 적용됩니다.
  • 서비스 주체는 지원되지 않습니다.
  • 향상된 향상된 새로 고침 API를 사용하여 의미 체계 모델을 새로 고치면 새로 고칠 때마다 Git diff가 발생합니다.