Bitbucket Server에서 마이그레이션
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
Bitbucket Server에서 GitLab으로 프로젝트를 가져옵니다. Bitbucket Server 가져오기 도구는 Bitbucket Server 항목의 일부를 가져옵니다. Bitbucket Server 가져오기 도구는 GitLab.com과 GitLab Self-Managed에서 사용자 기여의 마이그레이션 후 매핑을 지원합니다.
히스토리
- GitLab 17.1에서 사용자를 이메일 주소로만 매핑하도록 변경되었습니다.
- 일부 가져온 항목에 붙는 Imported 배지가 GitLab 17.2에서 도입되었습니다.
- GitLab 17.8에서 GitLab.com의 동작이 마이그레이션 후 사용자 기여 및 멤버십 매핑으로 변경되었습니다.
- 마이그레이션 후 사용자 기여 및 멤버십 매핑이 GitLab 17.8에서 GitLab.com과 GitLab Self-Managed에 활성화되었습니다.
Bitbucket Server에서 GitLab으로 프로젝트를 가져옵니다.
Bitbucket Server 가져오기 도구는 Bitbucket Server 항목의 일부를 가져옵니다.
| Bitbucket Server 항목 | 가져옴 |
|---|---|
| 리포지터리 설명 | ✅ |
| Git 리포지터리 데이터 | ✅ |
| 풀 리퀘스트 (댓글, 사용자 멘션, 리뷰어, 머지 이벤트 포함) | ✅ |
| LFS 오브젝트 | ✅ |
| 코드에 남긴 댓글1 | ✅ |
| 스레드2 | ✅ |
| 프로젝트 필터3 | ✅ |
| Markdown의 첨부 파일 | ❌ |
| 태스크 목록 | ❌ |
| 이모지 반응 | ❌ |
| 풀 리퀘스트 승인 | ❌ |
| 풀 리퀘스트 승인 규칙 | ❌ |
알려진 문제#
- 풀 리퀘스트 설명과 댓글에 삽입된 이미지와 첨부 파일은 GitLab으로 복사되지 않습니다. 이러한 항목은 Bitbucket이 호스팅하는 원본 URL을 가리키는 외부 링크로 남습니다. 소스 Bitbucket Server 인스턴스를 폐기하거나 리포지터리를 삭제하면 삽입된 이미지와 첨부 파일 링크가 영구적으로 끊어집니다. 소스 Bitbucket Server 인스턴스를 폐기하기 전에 삽입된 이미지와 첨부 파일에 접근할 수 있는지 확인하거나 별도로 보관합니다. 이미지와 첨부 파일 가져오기 지원은 작업 항목 623235에 제안돼 있습니다.
가져오기 도구 워크플로#
Bitbucket Server 가져오기 도구는 GitLab.com과 GitLab Self-Managed에서 사용자 기여의 마이그레이션 후 매핑을 지원합니다. 이 도구는 대안적인 매핑 방법도 지원합니다.
Bitbucket Server 항목을 가져올 때 동작은 다음과 같습니다:
- 리포지터리의 공개 여부가 유지됩니다. Bitbucket에서 비공개인 리포지터리는 GitLab에서도 비공개로 만들어집니다.
- 가져온 머지 리퀘스트와 댓글에는 GitLab에서 Imported 배지가 붙습니다.
닫혔거나 머지된 풀 리퀘스트를 가져올 때, 풀 리퀘스트에 커밋이 연결되도록 리포지터리에 없는 커밋 SHA를 Bitbucket Server에서 가져옵니다:
- 소스 커밋 SHA는
refs/merge-requests/<iid>/head형식의 참조로 저장됩니다. - 대상 커밋 SHA는
refs/keep-around/형식의 참조로 저장됩니다.
소스 커밋이 리포지터리에 없으면, 커밋 메시지에 해당 SHA가 들어 있는 커밋이 대신 사용됩니다.
가져오기 기간 추정#
Bitbucket Server에서 수행하는 가져오기는 매번 다르며, 이에 따라 소요 시간도 달라집니다. 다만 기간을 가늠하는 데 참고할 수 있도록 예를 들면, 다음 데이터로 구성된 프로젝트는 가져오는 데 8시간 정도 걸립니다:
- 풀 리퀘스트 13,000개
- 태그 7,000개
- 리포지터리 500GiB
사전 요구 사항#
- GitLab 인스턴스에서 Bitbucket Server에 접근할 수 있어야 합니다. Bitbucket Server URL은 공개적으로 확인 가능하거나 GitLab이 실행 중인 네트워크에서 접근 가능해야 합니다.
- Bitbucket Server 가져오기 소스를 활성화하거나 GitLab 관리자에게 활성화를 요청해야 합니다. GitLab.com에서는 기본적으로 활성화돼 있습니다.
- 가져올 대상 그룹에 대한 Maintainer 또는 Owner 권한.
- 관리자 액세스 권한이 있는 Bitbucket Server 인증 토큰. 관리자 액세스 권한이 없으면 일부 데이터는 가져오지 않습니다.
Bitbucket Server 리포지터리 가져오기#
Bitbucket Server 리포지터리를 가져오려면 다음과 같이 진행합니다:
- GitLab에 로그인합니다.
- 오른쪽 위에서 Create new (+)와 New project/repository를 선택합니다.
- Import project를 선택합니다.
- Bitbucket Server를 선택합니다.
- Bitbucket에 로그인하고 GitLab에 Bitbucket 계정 액세스를 허용합니다.
- 가져올 프로젝트를 선택하거나 모든 프로젝트를 가져옵니다. 이름으로 프로젝트를 필터링할 수 있고 프로젝트마다 가져올 네임스페이스를 선택할 수 있습니다.
- 프로젝트를 가져오려면 다음과 같이 진행합니다:
- 처음이라면 Import를 선택합니다.
- 이후에는 Re-import를 선택합니다. 새 이름을 지정하고 Re-import를 다시 선택합니다. 다시 가져오면 소스 프로젝트의 새 사본이 만들어집니다.
대안적인 매핑 방법#
bitbucket_server_user_mapping 기능 플래그를 비활성화하면 가져오기에 대안적인 사용자 기여 매핑 방법을
사용할 수 있습니다.
GitLab.com으로 가져오는 경우에는 대신 마이그레이션 후 방법을 사용해야 합니다.
이 기능의 제공 여부는 기능 플래그로 제어됩니다. 이 기능은 권장되지 않으며 GitLab.com으로의 마이그레이션에서는 사용할 수 없습니다. 이 매핑 방법에서 발견되는 문제는 수정되지 않을 가능성이 높습니다. 이러한 제약이 없는 마이그레이션 후 방법을 대신 사용합니다.
자세한 내용은 이슈 512213을 참고합니다.
대안적인 방법을 사용하면 가져오기 도구는 Bitbucket Server 사용자의 이메일 주소를 GitLab 사용자 데이터베이스에서 확인된 이메일 주소와 대조합니다. 해당 사용자를 찾지 못하면 다음과 같이 처리됩니다:
- 프로젝트 생성자가 대신 사용됩니다. 가져오기 도구는 원래 생성자를 표시하기 위해 댓글에 노트를 덧붙입니다.
- 풀 리퀘스트 리뷰어는 지정되지 않습니다.
- 풀 리퀘스트 승인자에 대해서는 승인이 추가되지 않습니다.
풀 리퀘스트 설명과 노트의 멘션은 사용자의 이메일 주소를 사용해 Bitbucket Server의 사용자 프로필과 대조됩니다. GitLab에 같은 이메일 주소를 가진 사용자가 없으면 그 멘션은 정적 텍스트가 됩니다. 사용자가 대조되려면 해당 프로젝트에 최소한 읽기 액세스를 제공하는 GitLab 권한이 있어야 합니다.
프로젝트가 공개인 경우 GitLab은 해당 프로젝트에 초대된 사용자만 대조합니다.
가져오기 도구는 네임스페이스(그룹)가 없으면 새로 만듭니다. 해당 네임스페이스가 이미 사용 중이면 리포지터리는 가져오기를 시작한 사용자의 네임스페이스 아래로 들어갑니다.
문제 해결#
다음 절에서는 발생할 수 있는 문제의 해결 방법을 설명합니다.
일반#
GUI 기반 가져오기 도구가 동작하지 않으면 다음을 시도할 수 있습니다:
Bitbucket Cloud의 문제 해결 절도 참고합니다.
LFS 오브젝트가 가져오지 않음#
프로젝트 가져오기는 완료되었지만 LFS 오브젝트를 내려받거나 복제할 수 없다면, 특수 문자가 포함된 비밀번호나 개인 액세스 토큰을 사용하고 있을 수 있습니다. 자세한 내용은 이슈 337769를 참고합니다.
유효하지 않거나 확인할 수 없는 호스트 주소로 인한 가져오기 실패 또는 가져오기 URL 차단#
Bitbucket 서버에 대한 최초 연결은 성공했는데도 프로젝트 가져오기가 Importing the project failed: Import URL is blocked 같은 오류 메시지와 함께
실패한다면, Bitbucket 서버나 리버스 프록시가 올바르게 구성되지 않았을 수 있습니다.
이 문제를 진단하려면 프로젝트 API로 새로 만들어진 프로젝트를 확인하고 그 프로젝트의 import_url 값을 찾습니다.
이 값은 Bitbucket 서버가 가져오기에 사용하도록 제공한 URL입니다. 이 URL을 공개적으로 확인할 수 없으면 주소 확인 오류가 발생할 수 있습니다.
이 문제를 해결하려면 Bitbucket 서버가 프록시 서버를 인식하도록 합니다. 프록시 서버는 Bitbucket이 URL을 구성하고 사용하는 방식에 영향을 줄 수 있습니다. 자세한 내용은 Bitbucket 프록시 및 보안 설정을 참고합니다.
JSON::NestingError로 인한 가져오기 실패#
프로젝트 가져오기가 JSON::NestingError가 포함된 오류 메시지와 함께 실패한다면, Bitbucket Server 응답에 max_http_response_json_depth 설정을 초과하는 깊게 중첩된 객체가 들어 있는 것입니다.
이 문제를 해결하려면 아웃바운드 요청의 JSON HTTP 응답에서 허용되는 최대 중첩 깊이를 늘립니다.