Push Rules 개발 가이드라인
이 문서는 Push Rules의 코드 디자인을 이해하는 데 도움을 주기 위해 작성되었습니다. 이 기능의 코드를 변경하기 전에 이 문서를 읽어야 합니다.
이 문서는 코드가 자주 변경될 수 있으므로 코드의 개요에만 초점을 맞추고 의도적으로 제한되었습니다. 특정 기능이 작동하는 방식을 이해하려면 코드와 스펙을 확인해야 합니다. 여기에 있는 세부 정보는 Push Rules 기능의 주요 구성 요소가 작동하는 방식을 설명합니다.
참고: 이 문서는 참조된 코드베이스의 일부가 업데이트되거나 제거되거나 새로운 부분이 추가될 때 업데이트되어야 합니다.
비즈니스 논리
비즈니스 논리는 두 가지 주요 장소에 포함되어 있습니다. PushRule
모델은 규칙의 설정을 저장하고 그 설정을 사용하여 푸시 동작을 변경하는 체크를 사용합니다.
-
PushRule
: 각 푸시 규칙의 구성을 저장하는 데 사용되는 주요 모델입니다.-
ee/app/models/push_rule.rb
에 정의되어 있습니다.
-
-
EE::Gitlab::Checks::DiffCheck
: Diff 체크는 푸시 규칙의file_name_regex
와 일치하는 파일 이름 및id_rsa
와 같은 알려진 비밀 파일과 일치하는 파일을 방지합니다.-
ee/lib/ee/gitlab/checks/diff_check.rb
에 정의되어 있습니다.
-
-
EE::Gitlab::Checks::PushRuleCheck
: 여러 푸시 규칙 체크를 실행합니다.-
ee/lib/ee/gitlab/checks/push_rule_check.rb
에 정의되어 있습니다.
-
-
EE::Gitlab::Checks::PushRules::BranchCheck
: 브랜치 규칙과 관련된 푸시 규칙 체크를 실행합니다.-
ee/lib/ee/gitlab/checks/push_rules/branch_check.rb
에 정의되어 있습니다.
-
-
EE::Gitlab::Checks::PushRules::CommitCheck
: 커밋 규칙과 관련된 푸시 규칙 체크를 실행합니다.-
ee/lib/ee/gitlab/checks/push_rules/commit_check.rb
에 정의되어 있습니다.
-
-
EE::Gitlab::Checks::PushRules::FileSizeCheck
: 파일 크기 규칙과 관련된 푸시 규칙 체크를 실행합니다.-
ee/lib/ee/gitlab/checks/push_rules/file_size_check.rb
에 정의되어 있습니다.
-
-
EE::Gitlab::Checks::PushRules::TagCheck
: 태그 규칙과 관련된 푸시 규칙 체크를 실행합니다.-
ee/lib/ee/gitlab/checks/push_rules/tag_check.rb
에 정의되어 있습니다.
-
Entrypoints
다음 컨트롤러 및 API는 모두 푸시 규칙 로직에 대한 진입점입니다.
-
Admin::PushRulesController
:이 컨트롤러는 전역 푸시 규칙을 관리하는 데 사용됩니다. -
Group::PushRulesController
:이 컨트롤러는 그룹 수준의 푸시 규칙을 관리하는 데 사용됩니다. -
Project::PushRulesController
:이 컨트롤러는 프로젝트 수준의 푸시 규칙을 관리하는 데 사용됩니다. -
Api::Internal::Base
: GitLab SSH로 푸시할 때 호출되는/internal/allowed
엔드포인트로, 사용자가 푸시할 수 있는지 확인합니다./internal/allowed
엔드포인트는Gitlab::Checks::DiffCheck
를 수행합니다. EE에서는 푸시 규칙 체크가 포함됩니다.-
lib/api/internal/base.rb
에 정의되어 있습니다.
-
-
Repositories::GitHttpController
: 변경 내용이 HTTP를 통해 GitLab에 푸시되면, 컨트롤러는 사용자가 푸시할 수 있는지 확인하는 액세스 체크를 수행합니다. 이 체크는Gitlab::Checks::DiffCheck
를 수행합니다. EE에서는 푸시 규칙 체크가 포함됩니다.-
app/controllers/repositories/git_http_controller.rb
에 정의되어 있습니다.
-
플로우
다음 플로우차트는 컨트롤러에서 모델로의 플로우를 설명하는 데 도움이 될 것입니다.
SSH를 통한 Git 푸시
참고:
PushRuleCheck
는 parallel_push_checks
피처 플래그가 활성화된 경우에만 병렬로 체크를 트리거합니다. 그렇지 않으면 태그 또는 브랜치 체크가 먼저 실행된 후 파일 크기가 실행됩니다.