Bitbucket Cloud importer 개발 문서

사전 준비 사항

Bitbucket에 인증해야 합니다.

코드 구조

수입기의 코드베이스는 다음 디렉토리로 나뉩니다:

  • lib/gitlab/bitbucket_import: 이 디렉토리에는 자원을 가져오는 데 사용되는 클래스 등 대부분의 코드가 포함되어 있습니다.
  • app/workers/gitlab/bitbucket_import: 이 디렉토리에는 Sidekiq 워커들이 포함되어 있습니다.

아키텍처 개요

Bitbucket Cloud 프로젝트를 가져올 때, 작업은 별도의 단계로 나뉘며, 각 단계는 실행되는 일련의 Sidekiq 작업으로 구성됩니다. 매 단계 사이에는 현재 단계의 모든 작업이 완료되었는지 주기적으로 확인하여 해당 경우 가져오기 프로세스를 다음 단계로 이동시키는 작업이 예약됩니다. 이 작업을 처리하는 워커는 Gitlab::BitbucketImport::AdvanceStageWorker라고 합니다.

단계

1. Stage::ImportRepositoryWorker

이 워커는 저장소, 위키 및 레이블을 가져와서 완료되면 다음 단계를 예약합니다.

2. Stage::ImportPullRequestsWorker

이 워커는 모든 풀 리퀘스트를 가져옵니다. 각 pull request마다 Gitlab::BitbucketImport::ImportPullRequestWorker 워커의 작업이 예약됩니다.

3. Stage::ImportPullRequestsNotesWorker

이 워커는 모든 머지 리퀘스트에 대한 노트(코멘트)를 가져옵니다.

각 머지 리퀘스트마다 Gitlab::BitbucketImport::ImportPullRequestNotesWorker 워커의 작업이 예약되어 머지 리퀘스트의 모든 노트를 가져옵니다.

4. Stage::ImportIssuesWorker

이 워커는 모든 이슈를 가져옵니다. 각 이슈마다 Gitlab::BitbucketImport::ImportIssueWorker 워커의 작업이 예약됩니다.

5. Stage::ImportIssuesNotesWorker

이 워커는 모든 이슈에 대한 노트(코멘트)를 가져옵니다.

각 이슈마다 Gitlab::BitbucketImport::ImportIssueNotesWorker 워커의 작업이 예약되어 이슈의 모든 노트를 가져옵니다.

5. Stage::FinishImportWorker

이 워커는 가져오기 프로세스를 완료하기 위해 수행되는 일부 하우스키퍼링(정리) 작업을 수행합니다.

백오프 및 다시 시도

요청을 처리하기 위해, 요청은 Bitbucket::ExponentialBackoff으로 래핑됩니다. 이 래퍼는 속도 제한 오류를 잡아내고 최대 세 번의 지연 후 재시도합니다.

GDK에서 Bitbucket 인증 설정

GDK에서 Bitbucket 인증을 설정하려면 다음을 수행하세요:

  1. Bitbucket OAuth 자격 증명을 생성하기 위해 9단계까지 문서를 따르세요.
  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에 연결하세요.