Bitbucket Cloud 가져오기 개발자 문서

전제 조건

Bitbucket에 인증되어 있어야 합니다:

코드 구조

가져오기 도구의 코드베이스는 다음 디렉터리로 나누어져 있습니다:

  • 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 인증을 설정하려면:

  1. Bitbucket OAuth 자격 증명 생성하기까지 문서를 따릅니다.
  2. 자격 증명을 config/gitlab.yml에 추가합니다:

    # config/gitlab.yml
    
    development:
      <<: *base
      omniauth:
        providers:
        - { name: 'bitbucket',
            app_id: '...',
            app_secret: '...' }
    
  3. gdk restart를 실행합니다.
  4. GDK에 로그인하고 <gdk-url>/-/profile/account로 이동하여 Bitbucket을 연결합니다.