- 대형 프로젝트 가져오기
- 대형 프로젝트 내보내기
-
문제 해결
Exception: undefined method 'name' for nil:NilClass
Exception: undefined method 'full_path' for nil:NilClass
Exception: No such file or directory @ rb_sysopen - (filename)
Exception: Permission denied @ rb_sysopen - (filename)
Name can contain only letters, digits, emoji ...
Name has already been taken and Path has already been taken(이름 또는 경로가 이미 사용 중입니다)
Exception: Error importing repository into (namespace) - No space left on device(장치에 여유 공간이 없음)
- 가져오기는 성공했지만
Total number of not imported relations: XX
메시지가 표시되고 가져오기 중에 이슈가 생성되지 않습니다 - Gitaly 호출 시 오류 발생
프로젝트 가져오기 및 내보내기 Rake 작업
GitLab은 프로젝트 가져오기와 내보내기를 위한 Rake 작업을 제공합니다.
호환 가능한 GitLab 인스턴스에서만 가져올 수 있습니다.
대형 프로젝트 가져오기
대형 GitLab 프로젝트 내보내기를 가져오기 위해 Rake 작업이 사용됩니다.
이 작업의 일부로, 우리는 직접 업로드를 비활성화합니다. 이는 거대한 아카이브를 GCS에 업로드하며 유휴 트랜잭션 시간 초과를 발생시킬 수 있는 것을 피하기 위함입니다.
터미널에서 이 작업을 실행할 수 있습니다:
매개변수:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
username
| 문자열 | 예 | 사용자명 |
namespace_path
| 문자열 | 예 | 네임스페이스 경로 |
project_path
| 문자열 | 예 | 프로젝트 경로 |
archive_path
| 문자열 | 예 | 가져올 내보낸 프로젝트 tarball의 경로 |
bundle exec rake "gitlab:import_export:import[root, group/subgroup, testingprojectimport, /path/to/file.tar.gz]"
Linux 패키지 설치를 실행 중이라면, 다음 Rake 작업을 실행하세요:
gitlab-rake "gitlab:import_export:import[root, group/subgroup, testingprojectimport, /path/to/file.tar.gz]"
대형 프로젝트 내보내기
대형 프로젝트를 내보내기 위해 Rake 작업을 사용할 수 있습니다.
매개변수:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
username
| 문자열 | 예 | 사용자명 |
namespace_path
| 문자열 | 예 | 네임스페이스 경로 |
project_path
| 문자열 | 예 | 프로젝트 이름 |
archive_path
| 문자열 | 예 | 내보낸 프로젝트 tarball을 저장할 파일 경로 |
gitlab-rake "gitlab:import_export:export[username, namespace_path, project_path, archive_path]"
문제 해결
가져오기/내보내기에 문제가 있는 경우, 동일한 Rake 작업을 사용하여 디버그 모드를 활성화할 수 있습니다:
# 가져오기
IMPORT_DEBUG=true gitlab-rake "gitlab:import_export:import[root, group/subgroup, testingprojectimport, /path/to/file_to_import.tar.gz]"
# 내보내기
EXPORT_DEBUG=true gitlab-rake "gitlab:import_export:export[root, group/subgroup, projectnametoexport, /tmp/export_file.tar.gz]"
아래에 나열된 일반 오류를 확인하고, 그 의미와 해결 방법을 확인하세요.
Exception: undefined method 'name' for nil:NilClass
username
이 유효하지 않습니다.
Exception: undefined method 'full_path' for nil:NilClass
namespace_path
가 존재하지 않습니다.
예를 들어, 그룹이나 하위 그룹 중 하나가 잘못 입력되었거나 누락되었거나,
경로에 프로젝트 이름이 지정된 경우입니다.
이 작업은 프로젝트를 생성만 합니다. 새 그룹이나 하위 그룹에 가져오려면 먼저 생성하세요.
Exception: No such file or directory @ rb_sysopen - (filename)
archive_path
에 지정된 프로젝트 내보내기 파일이 누락되었습니다.
Exception: Permission denied @ rb_sysopen - (filename)
git
사용자가 지정된 프로젝트 내보내기 파일에 액세스할 수 없습니다.
문제를 해결하려면:
- 파일 소유자를
git:git
로 설정하세요. - 파일 권한을
0400
으로 변경하세요. - 파일을 공용 폴더(예:
/tmp/
)로 이동하세요.
Name can contain only letters, digits, emoji ...
이름은 문자, 숫자, 이모티콘, '_', '.', '+', 대시 또는 공백만 포함할 수 있습니다. 문자, 숫자, 이모티콘, '_'로 시작해야 하며,
경로에는 문자, 숫자, '_', '-', '.'만 포함할 수 있습니다. '-'로 시작하거나,
'.git'로 끝나거나 '.atom'로 끝나지 않도록 주의하세요.
project_path
에 지정된 프로젝트 이름이 한 가지 이유로 유효하지 않습니다.
project_path
에 프로젝트 이름만 넣으세요. 예를 들어, 서브그룹의 경로를 제공하면
이 오류로 인해 실패합니다. 프로젝트 이름에 /
는 프로젝트 이름에 유효한 문자가 아닙니다.
Name has already been taken and Path has already been taken(이름 또는 경로가 이미 사용 중입니다)
해당 이름의 프로젝트가 이미 존재합니다.
Exception: Error importing repository into (namespace) - No space left on device(장치에 여유 공간이 없음)
가져오기를 완료하기 위해 디스크에 충분한 공간이 없습니다.
가져오기 중에 tarball은 구성된 shared_path
디렉터리에 캐시됩니다. 캐시된 tarball과 디스크의
프로젝트 파일을 모두 수용할만큼 충분한 여유 공간이 있는지 확인하세요.
가져오기는 성공했지만 Total number of not imported relations: XX
메시지가 표시되고 가져오기 중에 이슈가 생성되지 않습니다
Total number of not imported relations: XX
메시지를 받고 가져오기 중에 이슈가 생성되지 않는 경우,
exceptions_json.log를 확인하세요.
N이 4바이트 정수 제한을 초과하는 ActiveModel::Type::Integer
와 같은 오류가 표시될 수 있습니다.
그렇다면, relative_position
필드의 리발런싱 문제에 부딪히게 됩니다.
# relative_position의 현재 최대값 확인
Issue.where(project_id: Project.find(ID).root_namespace.all_projects).maximum(:relative_position)
# 리밸런싱 프로세스 실행 및 relative_position의 최대값이 변경되었는지 확인
Issues::RelativePositionRebalancingService.new(Project.find(ID).root_namespace.all_projects).execute
Issue.where(project_id: Project.find(ID).root_namespace.all_projects).maximum(:relative_position)
가져오기 시도를 반복하고 이슈가 성공적으로 가져와지는지 확인하세요.
Gitaly 호출 시 오류 발생
개발 환경에서 큰 프로젝트를 가져오려고 하는 경우, Gitaly가 너무 많은 호출이나 호출 오류를 야기할 수 있습니다. 예를 들어:
Error importing repository into qa-perf-testing/gitlabhq - GitalyClient#call called 31 times from single request. Potential n+1?
이 오류는 개발 환경을 위한 n+1 호출 제한 때문입니다. 이 오류를 해결하려면, 환경 변수로 GITALY_DISABLE_REQUEST_LIMITS=1
를 설정하세요.
그런 다음 개발 환경을 다시 시작하고 가져오기를 다시 진행하세요.