로컬에서 ‘omnibus-gitlab’ 패키지 빌드

빌드 환경 준비

omnibus-gitlab 패키지 빌드에 필요한 빌드 도구를 포함한 도커 이미지는 GitLab Omnibus Builder 프로젝트의 컨테이너 레지스트리에 있습니다.

  1. Docker Engine 설치.
  2. 원하는 OS용 Docker 이미지를 가져옵니다. omnibus-gitlab에서 공식으로 사용하는 이미지의 현재 버전은 CI configurationBUILDER_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
    
  6. 기본적으로 omnibus-gitlab 코드베이스는 CI 환경에서 사용하기 위해 최적화되어 있습니다. 여기에는 GitLab CI 파이프라인에서 미리 컴파일된 Rails 에셋을 재사용하는 것이 포함되어 있습니다. 빌드 중에 이를 활용하는 방법을 알아보려면 Fetch upstream assets 섹션을 확인하세요. 또는, COMPILE_ASSETS 환경 변수를 설정하여 패키지 빌드 중에 에셋을 컴파일할 수 있습니다.

    export COMPILE_ASSETS=true
    
  7. 기본적으로 XZ 압축은 최종 DEB 패키지를 생성하는 데 사용됩니다. 이로써 패키지 크기가 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. 빌드에 필요한 깃 작업 디렉토리는 깨끗해야 합니다. 따라서 변경 사항을 새 브랜치에 커밋하세요.

  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 명령줄 인터페이스 도움말은 다음 명령을 실행합니다:

```shell
bin/omnibus help