Omnibus GitLab에 새 소프트웨어 정의 추가
GitLab에 새 구성 요소를 추가하려면 다음 단계를 따르어야 합니다.
빌드 중 소프트웨어 가져오고 컴파일하기
‘/config/software’에 있는 소프트웨어 정의는 omnibus가 소프트웨어를 가져올 위치, 컴파일하는 방법 및 필요한 폴더에 설치하는 방법을 지정합니다. 이 프로젝트의 이 부분은 GitLab을 위한 Omnibus 패키지를 빌드할 때 실행됩니다.
Git에서 가져와야 하는 컴포넌트를 추가할 때는 로컬 미러 및 업스트림 저장소의 복제 주소를 ‘/.custom_sources.yml’에 추가해야 합니다.
로컬 미러는 배포팀 구성원이 omnibus-mirror 프로젝트에 생성해야 합니다.
소프트웨어 서비스가 어떻게 포함되는지에 대한 예제는 디렉토리의 다른 소프트웨어 서비스에서 확인하세요.
라이선스 처리
대부분의 소프트웨어 저장소에는 라이선스 파일이 포함되어 있습니다. 명시적으로 포함되지 않은 경우 패치 파일을 사용하여 라이선스를 추가하세요. ‘gem’이나 ‘pip’와 같은 패키지 관리자를 사용하여 설치된 소프트웨어도 이 방법을 사용해야 합니다.
수동으로 추가된 라이선스에 대해 패치를 생성하고 ‘config/patches/SOFTWARE_NAME/license/VERSION_NUMBER/add-license-file.patch’와 같은 디렉토리 경로에 저장하세요.
프로젝트 수명 동안 라이선스가 변경될 수 있습니다. 이 방법은 수동으로 설치된 라이선스를 확인하도록 기여자에게 상기시키기 위해 일부러 빌드를 실패하게 합니다. 라이선스가 변경되지 않은 경우 ‘git mv’를 사용하여 패치 파일을 포함하는 ‘VERSION_NUMBER’ 디렉토리를 새 ‘VERSION_NUMBER’로 이동하세요.
다른 구성 요소의 소프트웨어 정의에 대한 종속성 추가
config/projects/gitlab.rb
에서 GitLab 프로젝트의 정의에 dependency
문을 추가하세요. 더 구체적인 구성 요소가 종속성이 되어야 하는 경우가 아니라면 (예: gitlab-rails
에만 필요한 컴포넌트의 경우 config/software/gitlab-rails.rb
), 이 정의에 dependency
문을 추가하세요.
Omnibus는 종속성 구성 요소부터 먼저 빌드한 후 /config/projects/gitlab.rb
에 존재하는 순서대로 다른 구성 요소를 빌드합니다. 따라서 소프트웨어 구성 요소 A가 다른 소프트웨어 B의 종속성으로 표시되어 있으면 A는 프로세스의 시작 부분으로 빌드됩니다. A가 자주 변경되는 구성 요소인 경우 캐시가 자주 무효화되어 매번 빌드를 유발하여 전체 빌드 시간을 증가시킵니다. A가 B 직전에 즉시 빌드되도록 하는 임시방편이 필요합니다. 이렇게 하면 캐시 무효화가 회피됩니다.
-
소프트웨어 A를
config/projects/gitlab.rb
에 소프트웨어 B보다 바로 앞에 추가하세요.A와 B가 이제 프로젝트의 최상위 종속성이므로 omnibus는
config/projects/gitlab.rb
에 있는 순서대로 빌드합니다. -
B의 소프트웨어 정의에서 다음과 유사한 줄을 추가하세요.
dependency '<name of software A>' unless project.dependencies.include?('<name of software A>')
위의 내용은 프로젝트가
/config/projects/gitlab.rb
에서 빌드되지 않은 경우 A를 B의 종속성으로 표시하고, B보다 먼저 빌드합니다. 그러나/config/projects/gitlab.rb
에서 빌드하는 경우에는 영향을 미치지 않습니다.
단일 소프트웨어 종속성에 대한 변경 사항 유효성 검사
매번 전체 패키지를 다시 빌드하는 것보다 하나의 소프트웨어만 빌드하는 것이 유용할 수 있습니다. 예를 들어 새 소프트웨어 정의를 추가할 때입니다. 이 방법을 사용하면 해당 소프트웨어와 해당 종속성만 포함된 omnibus 패키지를 빠르게 다시 빌드할 수 있습니다. 소프트웨어가 독립적으로 빌드되는 것을 확인한 후에 Omnibus GitLab 빌드에 추가하고 거기서도 확인할 수 있습니다. 사용 방법은 다음과 같습니다.