Bitbucket Cloud importer developer documentation
전제 조건
Bitbucket에 인증된 상태여야 합니다.
- GitLab 개발 키트 (GDK)를 사용하는 경우, GDK에서 Bitbucket 인증 설정을 참조하세요.
- 그렇지 않은 경우, Bitbucket OmniAuth 제공자 지침을 참조하세요.
코드 구조
변환기의 코드베이스는 다음 디렉토리로 구분됩니다.
-
lib/gitlab/bitbucket_import
: 이 디렉토리에는 리소스를 가져오는 데 사용되는 클래스와 같은 대부분의 코드가 포함되어 있습니다. -
app/workers/gitlab/bitbucket_import
: 이 디렉토리에는 Sidekiq 워커가 포함되어 있습니다.
아키텍처 개요
Bitbucket Cloud 프로젝트를 가져올 때, 작업은 별도의 단계로 나누어지며, 각 단계는 실행되는 일련의 Sidekiq 작업으로 구성됩니다. 각 단계 사이에는 현재 단계의 모든 작업이 완료되었는지를 주기적으로 확인하고, 이 상황이 되면 가져오기 프로세스를 다음 단계로 진행시키는 작업이 예약됩니다. 이 작업을 처리하는 워커는 Gitlab::BitbucketImport::AdvanceStageWorker
라고 합니다.
단계
1. Stage::ImportRepositoryWorker
이 워커는 저장소, 위키 및 레이블을 가져와서, 완료되면 다음 단계를 예약합니다.
2. Stage::ImportUsersWorker
이 워커는 소스 Bitbucket Cloud 워크스페이스의 멤버를 가져옵니다.
3. Stage::ImportPullRequestsWorker
이 워커는 모든 풀 리퀘스트를 가져옵니다. 각각의 풀 리퀘스트에 대해 Gitlab::BitbucketImport::ImportPullRequestWorker
워커를 위한 작업이 예약됩니다.
4. Stage::ImportPullRequestsNotesWorker
이 워커는 모든 병합 요청에 대한 노트(댓글)를 가져옵니다.
각 병합 요청에 대해 Gitlab::BitbucketImport::ImportPullRequestNotesWorker
워커를 위한 작업이 예약되어, 해당 병합 요청의 모든 노트가 가져와집니다.
5. Stage::ImportIssuesWorker
이 워커는 모든 이슈를 가져옵니다. 각 이슈에 대해 Gitlab::BitbucketImport::ImportIssueWorker
워커를 위한 작업이 예약됩니다.
6. Stage::ImportIssuesNotesWorker
이 워커는 모든 이슈에 대한 노트(댓글)를 가져옵니다.
각 이슈에 대해 Gitlab::BitbucketImport::ImportIssueNotesWorker
워커를 위한 작업이 예약되어, 해당 이슈의 모든 노트가 가져와집니다.
7. Stage::FinishImportWorker
이 워커는 가져오기 프로세스를 완료하기 위해, 가져오기가 완료되었다는 것과 같은 몇 가지 사항들을 수행합니다.
백오프 및 재시도
속도 제한을 처리하기 위해 요청은 Bitbucket::ExponentialBackoff
로 래핑됩니다.
이 래퍼는 속도 제한 오류를 catch하고 최대 세 번까지 지연 후 재시도합니다.
GDK에서 Bitbucket 인증 설정
GDK에서 Bitbucket 인증을 설정하려면 다음을 수행하세요:
- Bitbucket OAuth 자격 증명을 만들기 위해 단계 9까지 문서를 참고하세요.
-
config/gitlab.yml
에 자격 증명을 추가하세요:# config/gitlab.yml development: <<: *base omniauth: providers: - { name: 'bitbucket', app_id: '...', app_secret: '...' }
-
gdk restart
를 실행하세요. - GDK에 로그인하여,
<gdk-url>/-/profile/account
로 이동하고 Bitbucket을 연결하세요.