CI/CD

ShareGate 응용 프로그램을 사용하면 작업 예약이 가능하므로 업무 시간 외에 마이그레이션이 실행됩니다.
프로세스는 automated using PowerShell일 수도 있는데, 이는 프로세스에서 컨텐츠 변환을 실행해야 하는 경우 특히 중요합니다.

한 단계 더 나아가 Azure Pipelines를 사용하여 자동화하기로 결정했습니다.

전제 조건



ShareGate는 Marketplace 확장으로 사용할 수 없으며 Microsoft 호스팅 파이프라인에서 쉽게 사용할 수 없습니다. 소프트웨어는 워크스테이션마다 사용자별로 할당된 라이센스 키로 설치하고 활성화해야 합니다.

마이그레이션 프로세스를 자동화하기 위해 ShareGate가 설치되고 적절한 라이센스가 부여된 가상 머신에 구성된 self-hosted agent을 사용하고 있습니다.
이 프로세스는 Schedule your SharePoint migration using PowerShell and ShareGate에 제시된 개념을 사용하고 있으며 유일한 차이점은 트리거입니다.

파이프라인


추출 및 변환



마이그레이션 프로세스의 첫 번째 단계에서는 SharePoint 목록에서 콘텐츠를 내보내고 변환을 수행합니다.ShareGate_ExportToExcel.yml 작업은 Sharegate가 설치된 자체 호스팅 에이전트를 사용하는 반면 TransformData.yml 작업은 Microsoft 호스팅 에이전트에서 실행됩니다.

jobs:
- job: ${{parameters.jobName}}
  displayName: 'ShareGate Export to Excel'
  dependsOn: ${{ parameters.dependsOn }}
  timeoutInMinutes: 360
  pool: ShareGate # IMPORTANT
  variables:
  - group: ${{parameters.groupKeyVaultName}}
  - name: scriptsLocation
    value: "$(Build.SourcesDirectory)/Pipelines/scripts"

  steps:
  - checkout: self
    persistCredentials: true
  - task: powershell@2
    name: SGMigration
    inputs:
      filePath: $(scriptsLocation)/SG-ExportToExcel.ps1
      arguments: '-userName_SP ''$(SP-SvcAcct-Name)'' -userPassword_SP (ConvertTo-SecureString -AsPlainText $(SP-SvcAcct-Pswd) -Force) `
          -listNames ''Portfolio'', ''Schedule'', ''Archive'' '
    displayName: Export to Excel


다운스트림 환경에 로드



다음 단계에서는 선택한 다운스트림 환경으로 콘텐츠 마이그레이션을 실행합니다.

테스트 마이그레이션 중에는 데이터가 약간 오래된 경우에도 이전에 내보내고 변환된 Excel을 재사용하고 있습니다. 동일한 Excel 파일을 사용할 수 있다는 것은 많은 시간을 절약해 줍니다. 그것을 생성하는 데 1,5 시간이 걸렸습니다.

가져오기 프로세스는 여러 단계로 구성됩니다.
  • 예를 들어 현재 필수인 필드에서 값이 누락될 수 있는 이전 항목 버전을 허용하도록 목록 구성 업데이트
  • 원본 SharePoint 사이트 및 변환된 Excel 파일을 사용하여 콘텐츠 가져오기
  • 목록 구성을 이전 상태로 재설정
  • 목록 구성 및 목록 내용 확인

  • jobs:
    # set the list configuration: required columns, fillIn choices etc
    - template: jobs_SG_PreMigration.yml
      parameters:
        environment: ${{parameters.environment}}
        groupVariablesName: ${{parameters.groupVariablesName}}
        groupKeyVaultName: ${{parameters.groupKeyVaultName}}
        jobName: SPOPreMigration
    
    # import with ShareGate
    - template: jobs_SG_Migration.yml
      parameters:
        environment: ${{parameters.environment}}
        groupVariablesName: ${{parameters.groupVariablesName}}
        groupKeyVaultName: ${{parameters.groupKeyVaultName}}
        jobName: Import
        dependsOn: SPOPreMigration
    
    # set the list configuration back: required columns, fillIn choices etc
    - template: jobs_SG_PostMigration.yml
      parameters:
        environment: ${{parameters.environment}}
        groupVariablesName: ${{parameters.groupVariablesName}}
        groupKeyVaultName: ${{parameters.groupKeyVaultName}}
        jobName: SPOPostMigration
        dependsOn: Import
    
    # run list validation
    - template: jobs_SPO_Validate.yml
      parameters:
        environment: ${{parameters.environment}}
        groupVariablesName: ${{parameters.groupVariablesName}}
        groupKeyVaultName: ${{parameters.groupKeyVaultName}}
        jobName: SPOValidate
        searchOrphanedUsers: true
        dependsOn: SPOPostMigration
    


    다시 한 번 자체 호스팅 에이전트에서 가져오기만 실행하면 됩니다.

    jobs:
    - deployment: ${{parameters.jobName}}
      displayName: 'ShareGate Migration'
      environment: ${{ parameters.environment }}
      dependsOn: ${{ parameters.dependsOn }}
      timeoutInMinutes: 360
      pool: ShareGate # IMPORTANT
      strategy:
        runOnce:
          deploy:
            steps:
            - checkout: self
              persistCredentials: true
            # Copy results
            - task: CopyFiles@2
              condition: always()
              displayName: 'Copy SG mapping files'
              inputs:
                contents: |
                  $(Build.SourcesDirectory)\SPO_Migration\ShareGateConfig\*
                targetFolder: 'D:\ShareGateConfig'
                flattenFolders: true
                overWrite: true
    
            - task: powershell@2
              name: SGMigration
              inputs:
                filePath: $(scriptsLocation)/SG-Migrate.ps1
                arguments: '-tenantName ''$(Az_TenantName)'' -siteName ''$(SPO_SiteName)'' `
                    -userName_SPO ''$(SPO-SvcAcct-Name)'' -userPassword_SPO (ConvertTo-SecureString -AsPlainText $(SPO-SvcAcct-Pswd) -Force) `
                    -userName_SP ''$(SP-SvcAcct-Name)'' -userPassword_SP (ConvertTo-SecureString -AsPlainText $(SP-SvcAcct-Pswd) -Force) `
                    -resultsFolder ''$(System.DefaultWorkingDirectory)\results''  `
                    -sourceFolder ''$(filesLocation)'' `
                    -environment ''${{ parameters.environment }}'' -buildId ''${{ parameters.environment }} $(Build.BuildNumber)'' '
              displayName: ShareGate Migration
    
            # Copy results
            - task: CopyFiles@2
              condition: always()
              displayName: 'Archiving migration results'
              inputs:
                contents: |
                  $(System.DefaultWorkingDirectory)\results\*
                targetFolder: '$(Build.ArtifactStagingDirectory)'
                flattenFolders: true
    
            - task: PublishBuildArtifacts@1
              inputs:
                artifactName: '${{ parameters.environment }} ShareGate'
              condition: always()
              displayName: 'Publish Artifact: ShareGate'
    
    


    파이프라인의 변수를 사용하여 ShareGate 작업 이름을 설정하는 것도 가능합니다.-buildId ''${{ parameters.environment }} $(Build.BuildNumber)'' ' 매개변수는 PowerShell에서 사용됩니다.

    Copy-Content  -TaskName "$srcListName to $dstListName ($buildId)"
    


    ShareGate 응용 프로그램을 사용하여 작업 진행 상황을 편안하게 검토할 수 있습니다.

    좋은 웹페이지 즐겨찾기