Bitbucket Cloud 가져오기 개발자 문서
전제 조건
Bitbucket에 인증되어 있어야 합니다:
- GitLab Development Kit(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
로 포장됩니다. 이 래퍼는 비율 제한 오류를 포착하고 최대 세 번 지연 후 재시도합니다.
GDK에서 Bitbucket 인증 설정
GDK에서 Bitbucket 인증을 설정하려면:
- Bitbucket OAuth 자격 증명 생성하기까지 문서를 따릅니다.
-
자격 증명을
config/gitlab.yml
에 추가합니다:# config/gitlab.yml development: <<: *base omniauth: providers: - { name: 'bitbucket', app_id: '...', app_secret: '...' }
-
gdk restart
를 실행합니다. - GDK에 로그인하고
<gdk-url>/-/profile/account
로 이동하여 Bitbucket을 연결합니다.