- GitLab Inc. 리포지토리에 파일을 병합할 때
- 프로세스 개요
jh/
가 없을 때 또는EE_ONLY=1
일 때 EE처럼 행동하기FOSS_ONLY=1
일 때 FOSS처럼 행동하기- JH 맥락에서의 CI 파이프라인
JiHu(JH) 에디션 관련 병합 요청 검토 가이드라인
JH와 관련된 두 가지 유형의 변경 사항이 있습니다:
-
jh/
내부- 이는 EE 리포지토리를 넘어서며, 이 문서의 의도가 아닙니다.
-
jh/
외부- 이들은 EE 리포지토리 내에 존재해야 하므로, EE 리포지토리의 리뷰어와 유지 관리자가 이를 검토하고 유지 관리해야 합니다. 여기에는
Gitlab.jh?
와 같은 코드가 포함되며,ee/
아래의 코드를 로드하는 코드와 마찬가지로jh/
아래의 코드를 로드하려고 시도합니다. - 이 문서는 이러한 코드가 어떻게 보여야 하는지를 안내하기 위한 것이며,
jh/
아래의 코드를 조회하는 데 필요한 변경 사항을 보다 잘 이해할 수 있습니다. - 이를 일반화하여 EE와 JH가 동일한 메커니즘을 공유할 수 있도록 하여, 서로 다르게 취급할 필요가 없게 만듭니다.
- JH 에디션을 실행하기 위해 필요한 데이터베이스 마이그레이션 및 데이터베이스 스키마 변경 사항. 자세한 내용은 JiHu 데이터베이스 변경을 위한 가이드라인을 참조하세요.
- 이들은 EE 리포지토리 내에 존재해야 하므로, EE 리포지토리의 리뷰어와 유지 관리자가 이를 검토하고 유지 관리해야 합니다. 여기에는
필요한 경우 JH 리포지토리에 있는 해당 JH 병합 요청을 검토하세요.
GitLab Inc. 리포지토리에 파일을 병합할 때
jh/
외부의 GitLab JH 리포지토리에 추가된 파일은 GitLab Inc. 리포지토리에 반영되어야 합니다.
GitLab Inc. 리포지토리에 추가된 코드가 존재하지 않는 GitLab JH 파일(예: render_if_exists
)을 참조하는 경우, JiHu 병합 요청 또는 파일에 대한 링크와 함께 주석을 추가하세요. 이는 참조가 누락된 부분으로 잘못 식별되어 gitlab
코드베이스에서 삭제되는 것을 방지하기 위한 것입니다.
프로세스 개요
다음 프로세스 가이드를 읽으세요:
jh/
가 없을 때 또는 EE_ONLY=1
일 때 EE처럼 행동하기
- EE 리포지토리의 경우,
jh/
가 없으므로 단순히 EE(라이선스가 없으면 CE)처럼 행동해야 합니다. - JH 리포지토리의 경우,
jh/
가 존재하지만EE_ONLY
환경 변수를 설정하여 EE 모드에서 실행하도록 강제할 수 있습니다.
FOSS_ONLY=1
일 때 FOSS처럼 행동하기
- JH 리포지토리의 경우,
jh/
가 존재하지만FOSS_ONLY
환경 변수를 설정하여 FOSS(CE) 모드에서 실행하도록 강제할 수 있습니다.
JH 맥락에서의 CI 파이프라인
EE 리포지토리에는 jh/
디렉토리가 없으므로, EE 리포지토리에서 JH 파이프라인을 실행할 방법이 없습니다. 모든 JH 테스트는 JH 리포지토리로 가야 합니다.
최상위 JH CI 구성은 jh/.gitlab-ci.yml
에 위치하며(EE 리포지토리에는 존재하지 않음), 이에 따라 EE CI 구성을 포함할 것입니다. 때때로 JH를 보다 쉽게 사용자 정의할 수 있도록 EE CI 구성을 업데이트해야 할 필요가 있습니다.
JH 기능은 CE 또는 EE 기능을 기반으로 합니다
기존 CE/EE 기능을 기반으로 하는 기능의 경우, CE/EE 클래스/모듈에 주입된 JH
네임스페이스의 모듈이 필요합니다. 이는 EE 기능에 대해 우리가 하고 있는 작업과 일치합니다.
자세한 내용은 EE 백엔드 코드를 사용하여 CE 기능 확장을 참조하세요.
예를 들어, User
클래스에 모듈을 추가하려면 다음과 같은 접근 방식을 사용해야 합니다:
class User < ActiveRecord::Base
# ... 여기에 많은 코드가 있습니다 ...
end
User.prepend_mod
EE에서 User.prepend_mod
는 다음을 시도합니다:
- EE 모듈 로드
JH에서 User.prepend_mod
는 다음을 시도합니다:
- EE 모듈 로드, 그리고:
- JH 모듈 로드
prepend
, extend
, include
와 같은 메서드는 사용하지 마세요. 대신 prepend_mod
, extend_mod
, 또는 include_mod
를 사용하세요. 이 메서드는 수신 모듈의 이름으로 관련 EE 및 JH 모듈을 찾으려고 합니다.
해당 JH 파일을 검토해야 하는 경우, JH 저장소에서 찾을 수 있습니다.
참고:
일부 경우, JH가 필요하지 않은 것을 재정의해야 할 필요가 있을 수 있으며, 이 경우 모듈에 prepend_mod
를 추가하는 것도 괜찮습니다. 우리가 이렇게 할 때, 그것을 언급하는 주석과 함께 그것을 사용하는 JH 모듈에 대한 링크를 추가해야 합니다. 이렇게 하면 어디에서 사용되었는지, 언제 더 이상 필요하지 않을 수 있는지를 알 수 있으며, 단순히 사용하지 않는 것만으로 그것들을 제거하지 않아 JH가 우연히 깨지는 일이 없도록 할 수 있습니다. 이와 같은 예입니다:
# JiHu를 위해 추가됨
# https://jihulab.com/gitlab-cn/gitlab/-/blob/main-jh/jh/lib/jh/api/integrations.rb에서 사용됨
API::Integrations.prepend_mod
JH 확장 작성에 대한 일반 안내
일반 안내는 Enterprise Edition 기능 구현을 위한 가이드라인을 참조하세요.