로컬에서 omnibus-gitlab 패키지 빌드하기

빌드 환경 준비

필요한 빌드 도구를 포함한 Docker 이미지로 omnibus-gitlab 패키지를 빌드하기 위한 준비가 된 프로젝트가 GitLab Omnibus Builder 프로젝트의 컨테이너 레지스트리에 있습니다.

  1. Docker 설치.

    컨테이너는 빌드를 완료하기 위해 4GB의 메모리에 액세스해야 합니다. 컨테이너 런타임에 대한 설명서를 참조하세요. Docker for Mac 및 Docker for Windows는 기본 설치에서 이 값을 2GB로 설정합니다.

  2. 패키지를 빌드하려는 OS용 Docker 이미지를 가져옵니다. omnibus-gitlab에서 현재 공식적으로 사용하는 이미지의 버전은 CI 구성BUILDER_IMAGE_REVISION 환경 변수에 참조되어 있습니다.

    docker pull registry.gitlab.com/gitlab-org/gitlab-omnibus-builder/debian_10:${BUILDER_IMAGE_REVISION}
    
  3. Omnibus GitLab 소스를 복제하고 복제된 디렉토리로 변경합니다:

    git clone https://gitlab.com/gitlab-org/omnibus-gitlab.git ~/omnibus-gitlab
    cd ~/omnibus-gitlab
    
  4. 컨테이너를 시작하고 해당 컨테이너 내에서 omnibus-gitlab 디렉토리를 마운트한 채 쉘에 들어갑니다:

    docker run -v ~/omnibus-gitlab:/omnibus-gitlab -it registry.gitlab.com/gitlab-org/gitlab-omnibus-builder/debian_10:${BUILDER_IMAGE_REVISION} bash
    
  5. 기본적으로 omnibus-gitlab은 GitLab 컴포넌트의 소스를 가져오기 위해 공개 GitLab 저장소를 선택합니다. ALTERNATIVE_SOURCES 환경 변수를 false로 설정하여 dev.gitlab.org에서 빌드하도록 설정할 수 있습니다.

    export ALTERNATIVE_SOURCES=false
    

    컴포넌트 소스 정보는 .custom_sources.yml 파일에 있습니다.

  6. 기본적으로 omnibus-gitlab 코드베이스는 CI 환경에서 사용하기에 최적화되어 있습니다. 이러한 최적화 중 하나는 GitLab CI 파이프라인에서 미리 컴파일된 Rails 에셋을 재사용하는 것입니다. 빌드 중 이를 활용하는 방법을 확인하려면 Fetch upstream assets 섹션을 확인하세요. 또는 패키지 빌드 중에 에셋을 컴파일하도록 환경 변수 COMPILE_ASSETS를 설정할 수 있습니다.

    export COMPILE_ASSETS=true
    
  7. 기본적으로 DEB 패키지를 생성할 때 XZ 압축이 사용되어 패키지 크기가 Gzip보다 약 30% 감소하고 빌드 시간에 크게 영향을 주지 않거나 약간의 설치(압축 해제) 시간 증가만 발생합니다. 그러나 시스템의 패키지 관리자가 해당 형식을 지원해야 합니다. 시스템의 패키지 관리자가 XZ 패키지를 지원하지 않는 경우 COMPRESS_XZ 환경 변수를 false로 설정하세요:

    export COMPRESS_XZ=false
    
  8. 라이브러리 및 기타 의존성을 설치합니다:

    cd /omnibus-gitlab
    bundle install
    bundle binstubs --all
    

상류 에셋 가져오기

GitLab 및 GitLab-FOSS 프로젝트의 파이프라인은 미리 컴파일된 에셋과 함께 Docker 이미지를 생성하고 해당 이미지를 컨테이너 레지스트리에 공개합니다. 패키지를 빌드하는 동안 이러한 에셋을 다시 컴파일하는 대신 이러한 이미지를 재사용하여 시간을 절약할 수 있습니다:

  1. 빌드하려는 GitLab 또는 GitLab-FOSS의 ref에 해당하는 에셋 Docker 이미지를 가져옵니다. 예를 들어 최신 master ref에 해당하는 에셋 이미지를 끌어오려면 다음을 실행하세요:

    docker pull registry.gitlab.com/gitlab-org/gitlab/gitlab-assets-ee:master
    
  2. 해당 이미지를 사용하여 컨테이너를 만듭니다:

    docker create --name gitlab_asset_cache registry.gitlab.com/gitlab-org/gitlab/gitlab-assets-ee:master
    
  3. 컨테이너에서 호스트로 에셋 디렉토리를 복사합니다:

    docker cp gitlab_asset_cache:/assets ~/gitlab-assets
    
  4. 빌드 환경 컨테이너를 시작할 때 에셋 디렉토리를 마운트합니다:

    docker run -v ~/omnibus-gitlab:/omnibus-gitlab -v ~/gitlab-assets:/gitlab-assets -it registry.gitlab.com/gitlab-org/gitlab-omnibus-builder/debian_10:${BUILDER_IMAGE_REVISION} bash
    
  5. COMPILE_ASSETS를 true로 설정하는 대신 에셋을 찾을 수 있는 경로를 설정하세요:

    export ASSET_PATH=/gitlab-assets
    

패키지 빌드

빌드 환경을 준비하고 필요한 변경 사항을 적용한 후에 패키지를 빌드할 수 있습니다. 제공된 Rake 작업을 사용하여 패키지를 빌드할 수 있습니다:

  1. 빌드를 위해 Git 작업 디렉토리가 깨끗해야 합니다. 따라서 변경 사항을 새 브랜치에 커밋하세요.

  2. 패키지를 빌드하려면 다음과 같이 Rake 작업을 실행하세요:

     bundle exec rake build:project
    

패키지는 ~/omnibus-gitlab/pkg 디렉토리에 생성되어 사용할 수 있게 됩니다.

EE 패키지 빌드

기본적으로 omnibus-gitlab은 CE 패키지를 빌드합니다. EE 패키지를 빌드하려면 Rake 작업을 실행하기 전에 ee 환경 변수를 설정하세요:

export ee=true

빌드 중 생성된 파일 정리

빌드 프로세스 중에 생성된 모든 임시 파일을 정리하려면 omnibusclean 명령을 사용할 수 있습니다:

bin/omnibus clean gitlab

--purge 옵션을 추가하면 프로젝트 설치 디렉토리(/opt/gitlab) 및 패키지 캐시 디렉토리(/var/cache/omnibus/pkg)를 포함하여 빌드 중에 생성된 모든 파일을 제거합니다:

bin/omnibus clean --purge gitlab

Omnibus 도움말

Omnibus 명령줄 인터페이스에 대한 도움말은 다음 명령을 실행하세요:

bin/omnibus help