Skip to main content
Skip to content

두 데이터 상주 기업 간에 리포지토리 마이그레이션

GitHub CLI용 (GEI) 확장을 사용하여 데이터 보존 기능을 갖춘 GitHub Enterprise Cloud의 두 인스턴스 간에 리포지토리를 마이그레이션할 수 있습니다.

데이터 상주 기업 간의 마이그레이션 정보

두 데이터 상주 기업 간의 마이그레이션은 표준 GEI 보관 마이그레이션 흐름을 사용합니다.

  1. GEI는 원본 GHE.com 하위 도메인에 연결합니다.
  2. GEI는 리포지토리 데이터를 포함하는 아카이브를 생성합니다.
  3. GEI는 보관 파일을 지원되는 마이그레이션 스토리지에 업로드합니다.
  4. GEI는 대상 GHE.com 하위 도메인에서 리포지토리 마이그레이션을 시작합니다.
  5. 대상 Importer 은 보관 파일을 다운로드하고 처리합니다.

이 마이그레이션에서는 다음을 수행합니다.

  • 소스는 https://SOURCE_SUBDOMAIN.ghe.com 하위 도메인이며, GHE.com 등이 있습니다.
  • 대상은 GHE.com와 같은 다른 https://DESTINATION_SUBDOMAIN.ghe.com 하위 도메인입니다.
  • 원본 및 대상 조직에는 이름이 다를 수 있습니다.
  • 마이그레이션된 리포지토리는 대상 조직에서 다른 이름을 가질 수 있습니다.

원본 및 대상 API 엔드포인트는 독립적으로 지정해야 합니다. 원본 작업에 대상 API URL을 사용하지 마세요.

중요

데이터 보존 기능을 갖춘 GitHub Enterprise Cloud API URL은 형식 https://api.SUBDOMAIN.ghe.com을 사용합니다. 이는 일반적으로 GitHub Enterprise Server 형식을 사용하는 https://HOSTNAME/api/v3 API URL과 다릅니다.

사전 요구 사항

시작하기 전에 다음을 수행하십시오.

  • 원본과 대상이 서로 다른 GHE.com 하위 도메인임을 확인합니다.
  • 원본 및 대상 조직 모두에서 사용자가 조직 소유자이거나 마이그레이션자 역할이 부여되었는지 확인합니다.
  • 소스 조직의 personal access token (classic)을 만듭니다.
  • 대상 조직용 personal access token (classic)를 만듭니다. 필요한 범위는 GitHub 제품 간의 마이그레이션에 대한 액세스 관리을 참조하세요.
  • 프로덕션 마이그레이션을 수행하기 전에 평가판 마이그레이션을 실행합니다.

프로덕션 마이그레이션 중에 원본 리포지토리에 대한 작업을 일시적으로 중지하는 것이 좋습니다. GitHub Enterprise Importer 는 델타 마이그레이션을 수행하지 않으므로 마이그레이션 시작 후 변경된 내용은 자동으로 포함되지 않습니다.

마이그레이션된 데이터 및 알려진 제한 사항에 대한 자세한 내용은 GitHub Enterprise Importer GitHub 제품 간 마이그레이션에 대한 정보을 참조하세요.

GitHub CLI 및 GEI 설치

GitHub CLI를 설치한 다음, GEI 확장 프로그램을 설치합니다:

Bash
gh extension install github/gh-gei

마이그레이션을 시작하기 전에 확장을 업데이트합니다.

Bash
gh extension upgrade github/gh-gei

사용 가능한 옵션을 표시하려면 다음을 수행합니다.

Bash
gh gei migrate-repo --help

환경 변수 설정

두 기업 모두에 대해 personal access token들을 설정합니다.

Bash
export GH_SOURCE_PAT="SOURCE_PERSONAL_ACCESS_TOKEN"
export GH_PAT="DESTINATION_PERSONAL_ACCESS_TOKEN"

각 GHE.com 하위 도메인에 대한 API URL을 설정합니다.

Bash
export SOURCE_API_URL="https://api.SOURCE_SUBDOMAIN.ghe.com"
export TARGET_API_URL="https://api.DESTINATION_SUBDOMAIN.ghe.com"

DESTINATION_SUBDOMAIN 및 SOURCE_SUBDOMAIN를 원본 및 대상 엔터프라이즈의 하위 도메인으로 바꾸세요.

다음은 그 예입니다.

Bash
export SOURCE_API_URL="https://api.source-example.ghe.com"
export TARGET_API_URL="https://api.destination-example.ghe.com"

GH_SOURCE_PAT 토큰은 아카이브 생성 작업을 포함한 소스 측 작업에 사용됩니다. GH_PAT 토큰은 대상 측 작업에 사용됩니다.

보관용 Blob 스토리지 구성

GitHub Enterprise Importer 는 각 프로젝트를 보관 파일로 내보낸 다음, 읽을 수 있는 GitHub Blob Storage에 보관 파일을 업로드합니다. 마이그레이션을 실행할 때 스토리지 백 엔드를 선택합니다.

스토리지 옵션선택 방법Notes

GitHub-owned blob storage (권장) | --use-github-storage | 설치가 필요하지 않습니다. GitHub 는 마이그레이션에 성공한 후 또는 마이그레이션 실패 후 7일 후에 자동으로 보관 파일을 삭제합니다. AWS S3 | --aws-bucket-name(AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 환경 변수와 함께, 선택적으로 AWS_SESSION_TOKEN) | 버킷과 해당 수명 주기를 직접 관리합니다. GitHub 는 스토리지에서 보관 파일을 삭제하지 않습니다. Azure Blob Storage (애저 블롭 스토리지) | AZURE_STORAGE_CONNECTION_STRING 환경 변수(단일 migrate-repo 명령의 경우 대신 사용할 --azure-storage-connection-string수 있습니다). | 스토리지 계정 액세스 키 연결 문자열만 지원됩니다(SAS 아님). GitHub 는 스토리지에서 보관 파일을 삭제하지 않습니다.

단일 리포지토리 마이그레이션

단일 리포지토리를 마이그레이션하려면 다음 gh gei migrate-repo 명령을 사용합니다.

Bash
gh gei migrate-repo \
  --github-source-org SOURCE_ORGANIZATION \
  --source-repo SOURCE_REPOSITORY \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org DESTINATION_ORGANIZATION \
  --target-repo DESTINATION_REPOSITORY \
  --target-api-url "$TARGET_API_URL" \
  --verbose

자리 표시자를 다음 값으로 바꿉다.

PlaceholderDescription
SOURCE_ORGANIZATION원본 엔터프라이즈에서 리포지토리를 소유하는 조직입니다.
SOURCE_REPOSITORY원본 조직의 리포지토리 이름입니다.
DESTINATION_ORGANIZATION대상 엔터프라이즈에서 마이그레이션된 리포지토리를 소유할 조직입니다.
DESTINATION_REPOSITORY대상 조직의 새 리포지토리 이름입니다.

다음은 그 예입니다.

Bash
gh gei migrate-repo \
  --github-source-org source-org \
  --source-repo example-repository \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org destination-org \
  --target-repo example-repository \
  --target-api-url "$TARGET_API_URL" \
  --verbose

생략 --target-repo하면 GEI는 원본 리포지토리 이름을 사용합니다.

선택형 인수

마이그레이션 명령에 다음 옵션을 추가할 수 있습니다.

ArgumentDescription
--target-repo-visibility TARGET-VISIBILITY새 리포지토리의 표시 유형을 설정합니다. 지원되는 값은 및 입니다.
--skip-releases릴리스 없이 리포지토리를 마이그레이션합니다.
--queue-only마이그레이션이 완료되기를 기다리지 않고 큐에 대기합니다.
--verbose추가 마이그레이션 출력을 표시합니다.

다음은 그 예입니다.

Bash
gh gei migrate-repo \
  --github-source-org source-org \
  --source-repo example-repository \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org destination-org \
  --target-repo example-repository \
  --target-api-url "$TARGET_API_URL" \
  --target-repo-visibility internal \
  --verbose

여러 리포지토리 마이그레이션

여러 리포지토리의 경우 gh gei generate-script를 사용하세요.

Bash
gh gei generate-script \
  --github-source-org SOURCE_ORGANIZATION \
  --github-target-org DESTINATION_ORGANIZATION \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL" \
  --output migration-script.ps1

생성된 스크립트를 실행하기 전에 검토합니다. 다음을 할 수 있습니다:

  • 마이그레이션해서는 안 되는 리포지토리를 제거합니다.
  • 대상 리포지토리 이름을 변경합니다.
  • 대상 리포지토리 표시 유형을 변경합니다.
  • 와 같은 --skip-releases옵션을 추가합니다.
  • 각 마이그레이션의 로그를 다운로드할 수 있도록 --download-migration-logs을 추가합니다.

PowerShell을 사용하여 생성된 스크립트를 실행합니다.

Bash
pwsh ./migration-script.ps1

마이그레이션 상태 확인

마이그레이션 --queue-only을 시작한 경우 GEI에서 인쇄한 마이그레이션 ID를 사용하여 모니터링합니다.

Bash
gh gei wait-for-migration \
  --migration-id MIGRATION_ID \
  --target-api-url "$TARGET_API_URL" \
  --verbose

gh gei migrate-repo을 MIGRATION_ID에서 반환된 ID로 바꿉니다.

참고

검사할 때 두 API URL 인수를 모두 포함합니다. 원본 쪽 마이그레이션 정보 및 로그를 검색하는 GEI 명령에는 원본 API URL이 필요합니다.

마이그레이션 로그 다운로드

마이그레이션 로그를 다운로드하려면 다음을 수행합니다.

Bash
gh gei download-logs \
  --migration-id MIGRATION_ID \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL"

마이그레이션이 성공을 보고하는 경우에도 로그에서 경고 및 오류를 검토합니다.

마이그레이션 중단

대기 중 또는 실행 중인 마이그레이션을 중단하려면 다음을 수행합니다.

Bash
gh gei abort-migration \
  --migration-id MIGRATION_ID \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL"

Troubleshooting

원본 테넌트에 연결할 수 없습니다.

다음 사항을 확인하십시오:

  • --github-source-api-url 는 원본 하위 도메인으로 설정됩니다.
  • URL은 형식 https://api.SUBDOMAIN.ghe.com을 사용합니다.
  • 원본 토큰은 .에 GH_SOURCE_PAT저장됩니다.
  • 토큰은 원본 조직 및 리포지토리에 액세스할 수 있습니다.

대상 테넌트에 연결할 수 없습니다.

다음 사항을 확인하십시오:

  • --target-api-url 는 대상 하위 도메인으로 설정됩니다.
  • URL은 형식 https://api.SUBDOMAIN.ghe.com을 사용합니다.
  • 대상 토큰은 에 GH_PAT저장됩니다.
  • 대상 조직에서 리포지토리를 만들 수 있는 권한이 있습니다.

보관 파일을 생성하거나 업로드하는 동안 마이그레이션이 실패합니다.

마이그레이션 출력 및 로그를 검토한 다음 다음을 확인합니다.

  • 마이그레이션 보관 스토리지가 올바르게 구성되었습니다.
  • 스토리지 공급자는 마이그레이션 서비스에 액세스할 수 있습니다.
  • 마이그레이션하는 동안 원본 리포지토리가 수정되지 않습니다.
  • 원본 및 대상 API URL이 교환되지 않았습니다.

로그를 다운로드할 수 없음

download-logs, wait-for-migration 또는 abort-migration를 사용할 때는 마이그레이션을 시작할 때 사용한 것과 동일한 원본 및 대상 API URL을 제공하세요.

--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"

원본 URL이 거부됨

GHE.com 엔드포인트가 아니라 GitHub Enterprise Server 하위 도메인 API 엔드포인트를 사용하고 있는지 확인하세요.

사용:

https://api.SUBDOMAIN.ghe.com

사용하지 마세요.

https://HOSTNAME/api/v3

/api/v3 형식은 GitHub Enterprise Server 소스용이며 데이터 보존 기능을 갖춘 GitHub Enterprise Cloud에 맞는 올바른 형식이 아닙니다.