InfoGrab DocsInfoGrab Docs

Bitbucket Server 임포터 개발자 문서

Bitbucket Server 임포터의 코드 구조, 임포트 진행 방식, 스테이지, 사용자 기여 매핑 등 개발자를 위한 내용을 설명합니다.

사전 요구 사항 # 임포트를 테스트하려면 로컬에서 실행 중인 Bitbucket Server 인스턴스가 필요합니다. 로컬 인스턴스 실행 방법은 이 지침 을 참조하세요. 코드 구조 # 임포터의 코드베이스는 다음 디렉터리들로 구성되어 있습니다: lib/gitlab/bitbucket_server_import : 이 디렉터리에는 리소스 임포트에 사용되는 클래스 등 대부분의 코드가 포함되어 있습니다. app/workers/gitlab/bitbucket_server_import : 이 디렉터리에는 Sidekiq 워커가 포함되어 있습니다. 임포트 진행 방식 # Bitbucket Server 프로젝트를 임포트하면 작업이 별도의 스테이지로 나뉘며, 각 스테이지는 실행되는 Sidekiq job의 집합으로 구성됩니다. 모든 스테이지 사이에는 Gitlab::BitbucketServerImport::AdvanceStageWorker 라는 job이 예약되며, 현재 스테이지의 모든 작업이 완료되었는지 주기적으로 확인합니다. 모든 작업이 완료되면 이 job이 임포트 프로세스를 다음 스테이지로 진행시킵니다. 스테이지 # 1. Stage::ImportRepositoryWorker # 이 워커는 리포지터리를 임포트하고 완료되면 다음 스테이지를 예약합니다. 2. Stage::ImportPullRequestsWorker # 이 워커는 모든 풀 리퀘스트를 임포트합니다. 풀 리퀘스트마다 Gitlab::BitbucketImport::ImportPullRequestWorker 워커에 대한 job이 예약됩니다. Bitbucket Server는 열린 풀 리퀘스트에 대한 참조를 refs/heads/pull-requests 에 추적하지만, 닫힌 요청과 머지된 요청은 stash-refs/pull-requests 하위의 숨겨진 내부 ref로 이동됩니다. 이 때문에 기본적으로 fetch되지 않습니다. 머지 리퀘스트에 커밋이 없어 diff가 비어 있는 상황을 방지하기 위해, 풀 리퀘스트를 임포트하기 전에 서버에서 영향을 받는 소스 및 타깃 커밋을 fetch합니다. fetch한 커밋은 ref로 저장하여 Git이 사용되지 않을 경우 제거하지 않도록 합니다. 소스 커밋은 #{commit}:refs/merge-requests/#{pull_request.iid}/head 로 저장되고 타깃 커밋은 #{commit}:refs/keep-around/#{commit} 으로 저장됩니다. 풀 리퀘스트를 생성할 때 작성자와 리뷰어에 대해 Bitbucket 사용자를 GitLab 사용자와 매핑해야 합니다. 일치하는 사용자가 발견되면 GitLab 사용자 ID가 24시간 동안 캐시되어 다시 검색할 필요가 없습니다. 3. Stage::ImportNotesWorker # 이 워커는 모든 머지 리퀘스트의 노트(댓글)를 임포트합니다. 각 머지 리퀘스트마다 Gitlab::BitbucketServerImport::ImportPullRequestNoteWorker 워커에 대한 job이 예약되며, 이 job은 머지 리퀘스트의 모든 독립 댓