- 파일을 GitLab Inc. 리포지터리에 Merge하는 시점
- 프로세스 개요
jh/
가 존재하지 않거나EE_ONLY=1
이 필요한 경우 EE로 작동FOSS_ONLY=1
일 때 FOSS로 작동- JH 컨텍스트에서의 CI 파이프라인
JiHu (JH) Edition 관련 Merge Request 검토 지침
JH와 관련된 두 가지 종류의 변경 사항이 있습니다:
-
jh/
내부- 이것은 EE 리포지터리를 넘어서며, 이 문서의 취지와 일치하지 않습니다.
-
jh/
외부- 이러한 변경 사항은 EE 리포지터리에 있어야 하므로, EE 리포지터리의 리뷰어와 유지보수자가 리뷰하고 유지보수해야 합니다.
- 이에는
Gitlab.jh?
와 같이jh/
아래 코드를 로드하려는 코드가 포함됩니다. 우리가ee/
아래 코드를 로드하는 것처럼,jh/
아래 코드를 로드하기 위해 필요한 변경 사항을 이 문서가 안내합니다.
- 이에는
- 우리는 EE 및 JH 모두가 동일한 메커니즘을 공유할 수 있도록 이를 일반화할 것입니다. 그러면 둘을 다르게 다룰 필요가 없게 됩니다.
- JH 에디션 실행을 지원하기 위해 필요한 데이터베이스 마이그레이션 및 데이터베이스 스키마 변경에 대해 자세한 내용은 JiHu 데이터베이스 변경 지침을 참조하세요.
- 이러한 변경 사항은 EE 리포지터리에 있어야 하므로, EE 리포지터리의 리뷰어와 유지보수자가 리뷰하고 유지보수해야 합니다.
필요한 경우, JH 리포지터리에 있는 해당 JH Merge Request을 확인하세요.
파일을 GitLab Inc. 리포지터리에 Merge하는 시점
jh/
외부에 추가된 파일은 GitLab JH 리포지터리에도 동일하게 추가되어야 합니다.
GitLab Inc. 리포지터리에 추가된 코드가 (예: render_if_exists
) GitLab JH 코드베이스에 존재하지 않는 경우, 해당하는 JiHu Merge Request 또는 파일 링크가 포함된 코멘트를 추가하세요. 이렇게 함으로써 해당 참조가 누락된 부분으로 오인되어 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 구성을 업데이트해야 할 필요가 있습니다.
CE 또는 EE 기능에 기반한 JH 기능
기존 CE/EE 기능을 기반으로 하는 기능에는 CE/EE 클래스/모듈에 주입된 JH
네임스페이스의 모듈이 필요합니다. 이는 EE 기능과 일치합니다.
더 자세한 내용은 CE 기능을 EE 백엔드 코드로 확장를 참조하세요.
예를 들어, 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 리포지터리에서 찾을 수 있어야 합니다.
prepend_mod
를 추가하는 것도 괜찮습니다. 그러면 해당하는 JH 모듈이 어디에서 사용되는지 알 수 있으며, 더 이상 필요하지 않을 때를 알 수 있도록 코멘트와 해당 JH 모듈에 대한 링크를 추가하세요. 우연히 JH를 깨뜨리지 않도록 하기 위해 우리가 사용하지 않기 때문에 삭제하지 마세요. 이에 대한 예시:# JiHu를 위해 추가됨
# https://jihulab.com/gitlab-cn/gitlab/-/blob/main-jh/jh/lib/jh/api/integrations.rb에서 사용됨
API::Integrations.prepend_mod
JH 확장 작성에 대한 일반 지침
일반적인 지침은 기업용 기능 구현 지침을 참조하세요.