Skip to main content

GraphQL을 사용하여 Azure DevOps에서 GitHub Enterprise Cloud로 리포지토리 마이그레이션

GraphQL API를 사용하여 Azure DevOps에서 GitHub Enterprise Cloud로 리포지토리를 마이그레이션하는 고유한 도구를 빌드할 수 있습니다.

참고

ADO2GH extension of the GitHub CLI를 사용하여 마이그레이션을 수행할 수도 있습니다. 1단계. Azure DevOps에서 GitHub로의 마이그레이션 이해을(를) 참조하세요.

0단계: GitHub GraphQL API 사용 준비

GraphQL 쿼리를 만들려면 사용자 고유의 스크립트를 작성하거나 Insomnia와 같은 HTTP 클라이언트를 사용해야 합니다.

인증 방법을 포함하여 GitHub GraphQL API를 시작하는 방법에 대한 자세한 내용은 GraphQL을 사용하여 통화 구성을(를) 참조하세요.

모든 GraphQL 쿼리를 마이그레이션의 대상으로 보냅니다. 데이터 보존 기능을 갖춘 GitHub Enterprise Cloud로 마이그레이션하는 경우 엔터프라이즈의 하위 도메인인 GHE.com에 대한 엔드포인트로 쿼리를 보내세요.

1단계: 마이그레이션 대상의 ownerId 가져오기

대상 소유자 ID 가져오기 - 기업 마이그레이션 도구

GetOrgInfo 쿼리

query(
  $login: String!
){
  organization (login: $login)
  {
    login
    id
    name
    databaseId
  }
}
쿼리 변수설명
login조직 이름

GetOrgInfo 응답

{
  "data": {
    "organization": {
      "login": "Octo",
      "id": "MDEyOk9yZ2FuaXphdGlvbjU2MTA=",
      "name": "Octo-org",
      "databaseId": 5610
    }
  }
}

이 예제에서는 MDEyOk9yZ2FuaXphdGlvbjU2MTA=이(가) 다음 단계에서 사용할 조직 ID 또는 ownerId입니다.

2단계: 마이그레이션 원본 식별

createMigrationSource 쿼리를 사용하여 마이그레이션 원본을 설정할 수 있습니다. GetOrgInfo 쿼리에서 수집된 조직 ID 또는 조직 ID를 ownerId에 제공해야 합니다.

마이그레이션 원본은 ADO 조직입니다.

          `createMigrationSource` 변경
mutation createMigrationSource($name: String!, $ownerId: ID!) {
  createMigrationSource(input: {name: $name, url: "https://dev.azure.com", ownerId: $ownerId, type: AZURE_DEVOPS}) {
    migrationSource {
      id
      name
      url
      type
    }
  }
}

참고

typeAZURE_DEVOPS를 사용해야 합니다.

쿼리 변수설명
name마이그레이션 원본의 이름입니다. 이 이름은 사용자 고유의 참조용이므로, 모든 문자열을 사용할 수 있습니다.
ownerIdGitHub Enterprise Cloud에 있는 조직의 조직 ID입니다.

          `createMigrationSource` 응답
{
  "data": {
    "createMigrationSource": {
      "migrationSource": {
        "id": "MS_kgDaACQxYmYxOWU4Yi0wNzZmLTQ3NTMtOTdkZC1hNGUzZmYxN2U2YzA",
        "name": "Azure DevOps Source",
        "url": "https://dev.azure.com",
        "type": "AZURE_DEVOPS"
      }
    }
  }
}

이 예시에서 MS_kgDaACQxYmYxOWU4Yi0wNzZmLTQ3NTMtOTdkZC1hNGUzZmYxN2U2YzA은(는) 마이그레이션 원본 ID이며, 다음 단계에서 사용합니다.

3단계: 리포지토리 마이그레이션 시작

마이그레이션을 시작하면 단일 리포지토리와 함께 제공되는 데이터가 사용자가 식별하는 새로운 GitHub 리포지토리로 마이그레이션됩니다.

동일한 원본 조직에서 한 번에 여러 리포지토리를 이동하려는 경우 여러 마이그레이션을 큐에 대기시킬 수 있습니다. 최대 5개까지의 리포지토리 마이그레이션을 동시에 실행할 수 있습니다.

          `startRepositoryMigration` 변경
mutation startRepositoryMigration (
  $sourceId: ID!,
  $ownerId: ID!,
  $sourceRepositoryUrl: URI!,
  $repositoryName: String!,
  $continueOnError: Boolean!,
  $accessToken: String!,
  $githubPat: String!,
  $targetRepoVisibility: String!
){
  startRepositoryMigration( input: {
    sourceId: $sourceId,
    ownerId: $ownerId,
    repositoryName: $repositoryName,
    continueOnError: $continueOnError,
    accessToken: $accessToken,
    githubPat: $githubPat,
    targetRepoVisibility: $targetRepoVisibility,
    sourceRepositoryUrl: $sourceRepositoryUrl,
  }) {
    repositoryMigration {
      id
      migrationSource {
        id
        name
        type
      }
      sourceUrl
    }
  }
}
쿼리 변수설명
sourceId마이그레이션 원본 id이(가) createMigrationSource 변경에서 반환되었습니다.
ownerIdGitHub Enterprise Cloud에 있는 조직의 조직 ID입니다.
repositoryNameGitHub Enterprise Cloud에서 조직이 소유한 리포지토리 내의 현재 사용되지 않는 사용자 지정 고유 리포지토리 이름입니다. 마이그레이션이 완료되었거나 중지되었을 경우, 오류 로깅 문제가 이 리포지토리에 생성됩니다.
continueOnError마이그레이션이 실패하지 않는 오류가 발생할 경우, 마이그레이션을 계속할 수 있도록 하는 마이그레이션 설정입니다. true 또는 false이어야 합니다. Importer에서 Git 원본을 이동할 수 없거나 Importer이(가) 연결을 끊고 마이그레이션을 완료하기 위해 다시 연결할 수 없는 한 마이그레이션이 계속되도록 continueOnError을(를) true(으)로 설정하는 것이 좋습니다.
githubPatpersonal access token의 대상 조직에 대한 GitHub Enterprise Cloud입니다.
accessToken원본에 대한 personal access token입니다.
targetRepoVisibility새로운 리포지토리의 표시 여부 변경 private, public 또는 internal여야 합니다. 설정하지 않은 경우, 리포지토리가 프라이빗으로 마이그레이션됩니다.
sourceRepositoryUrlhttps://dev.azure.com/{organization}/{project}/_git/{repository} 형식을 사용한 원본 리포지토리의 URL입니다.

personal access token 요구 사항은 단계 2: 액세스 관리을(를) 참조하세요.

다음 단계에서는 startRepositoryMigration 변형에서 반환된 마이그레이션 ID를 사용하여 마이그레이션 상태를 검사합니다.

4단계: 마이그레이션 상태 확인

마이그레이션 오류를 감지하고 마이그레이션이 작동하는지 확인하려면 getMigration 쿼리를 사용하여 마이그레이션 상태를 검사할 수 있습니다. getMigrations(으)로 여러 마이그레이션의 상태를 검사할 수도 있습니다.

getMigration 쿼리는 상태를 반환하여 마이그레이션이 queued, in progress, failed 또는 completed일지 알려줍니다. 마이그레이션에 실패한 경우 Importer은(는) 실패의 원인을 제공합니다.

getMigration 쿼리

query (
  $id: ID!
){
  node( id: $id ) {
    ... on Migration {
      id
      sourceUrl
      migrationSource {
        name
      }
      state
      failureReason
    }
  }
}
쿼리 변수설명
idstartRepositoryMigration변형이 반환된 id 마이그레이션입니다.

5단계: 마이그레이션 검증 및 오류 로그 확인

데이터 재사용 가능 항목.엔터프라이즈-마이그레이션-툴.마이그레이션-로그-검증 %}

추가 읽기

  •         [AUTOTITLE](/migrations/ado/phase-6-follow-up-tasks)
    
  •         [AUTOTITLE](/migrations/ado/key-differences-between-azure-devops-and-github)