데이터 상주 기업 간의 마이그레이션 정보
두 데이터 상주 기업 간의 마이그레이션은 표준 GEI 보관 마이그레이션 흐름을 사용합니다.
- GEI는 원본 GHE.com 하위 도메인에 연결합니다.
- GEI는 리포지토리 데이터를 포함하는 아카이브를 생성합니다.
- GEI는 보관 파일을 지원되는 마이그레이션 스토리지에 업로드합니다.
- GEI는 대상 GHE.com 하위 도메인에서 리포지토리 마이그레이션을 시작합니다.
- 대상 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 확장 프로그램을 설치합니다:
gh extension install github/gh-gei
gh extension install github/gh-gei
마이그레이션을 시작하기 전에 확장을 업데이트합니다.
gh extension upgrade github/gh-gei
gh extension upgrade github/gh-gei
사용 가능한 옵션을 표시하려면 다음을 수행합니다.
gh gei migrate-repo --help
gh gei migrate-repo --help
환경 변수 설정
두 기업 모두에 대해 personal access token들을 설정합니다.
export GH_SOURCE_PAT="SOURCE_PERSONAL_ACCESS_TOKEN" export GH_PAT="DESTINATION_PERSONAL_ACCESS_TOKEN"
export GH_SOURCE_PAT="SOURCE_PERSONAL_ACCESS_TOKEN"
export GH_PAT="DESTINATION_PERSONAL_ACCESS_TOKEN"
각 GHE.com 하위 도메인에 대한 API URL을 설정합니다.
export SOURCE_API_URL="https://api.SOURCE_SUBDOMAIN.ghe.com" export TARGET_API_URL="https://api.DESTINATION_SUBDOMAIN.ghe.com"
export SOURCE_API_URL="https://api.SOURCE_SUBDOMAIN.ghe.com"
export TARGET_API_URL="https://api.DESTINATION_SUBDOMAIN.ghe.com"
DESTINATION_SUBDOMAIN 및 SOURCE_SUBDOMAIN를 원본 및 대상 엔터프라이즈의 하위 도메인으로 바꾸세요.
다음은 그 예입니다.
export SOURCE_API_URL="https://api.source-example.ghe.com" export TARGET_API_URL="https://api.destination-example.ghe.com"
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 명령을 사용합니다.
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
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
자리 표시자를 다음 값으로 바꿉다.
| Placeholder | Description |
|---|---|
SOURCE_ORGANIZATION | 원본 엔터프라이즈에서 리포지토리를 소유하는 조직입니다. |
SOURCE_REPOSITORY | 원본 조직의 리포지토리 이름입니다. |
DESTINATION_ORGANIZATION | 대상 엔터프라이즈에서 마이그레이션된 리포지토리를 소유할 조직입니다. |
DESTINATION_REPOSITORY | 대상 조직의 새 리포지토리 이름입니다. |
다음은 그 예입니다.
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
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는 원본 리포지토리 이름을 사용합니다.
선택형 인수
마이그레이션 명령에 다음 옵션을 추가할 수 있습니다.
| Argument | Description |
|---|---|
--target-repo-visibility TARGET-VISIBILITY | 새 리포지토리의 표시 유형을 설정합니다. 지원되는 값은 및 입니다. |
--skip-releases | 릴리스 없이 리포지토리를 마이그레이션합니다. |
--queue-only | 마이그레이션이 완료되기를 기다리지 않고 큐에 대기합니다. |
--verbose | 추가 마이그레이션 출력을 표시합니다. |
다음은 그 예입니다.
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 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를 사용하세요.
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
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을 사용하여 생성된 스크립트를 실행합니다.
pwsh ./migration-script.ps1
pwsh ./migration-script.ps1
마이그레이션 상태 확인
마이그레이션 --queue-only을 시작한 경우 GEI에서 인쇄한 마이그레이션 ID를 사용하여 모니터링합니다.
gh gei wait-for-migration \ --migration-id MIGRATION_ID \ --target-api-url "$TARGET_API_URL" \ --verbose
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이 필요합니다.
마이그레이션 로그 다운로드
마이그레이션 로그를 다운로드하려면 다음을 수행합니다.
gh gei download-logs \ --migration-id MIGRATION_ID \ --github-source-api-url "$SOURCE_API_URL" \ --target-api-url "$TARGET_API_URL"
gh gei download-logs \
--migration-id MIGRATION_ID \
--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"
마이그레이션이 성공을 보고하는 경우에도 로그에서 경고 및 오류를 검토합니다.
마이그레이션 중단
대기 중 또는 실행 중인 마이그레이션을 중단하려면 다음을 수행합니다.
gh gei abort-migration \ --migration-id MIGRATION_ID \ --github-source-api-url "$SOURCE_API_URL" \ --target-api-url "$TARGET_API_URL"
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에 맞는 올바른 형식이 아닙니다.