GitLab Shell 개발 가이드라인
GitLab Shell의 작동 방식, 아키텍처, 기여 방법, 속도 제한, 로그 구조에 대해 설명합니다.
GitLab Shell은 GitLab의 Git SSH 세션을 처리하고 인증된 키 목록을 수정합니다. GitLab Shell은 Unix 셸이 아니며 Bash나 Zsh의 대체제도 아닙니다. GitLab은 SSH를 통해 Git LFS 인증을 지원합니다. 요구 사항 # GitLab Shell은 Go로 작성되어 있으며, 빌드하려면 Go 컴파일러가 필요합니다. 빌드 및 테스트에는 여전히 Ruby가 필요하지만, 실행에는 필요하지 않습니다. GitLab Shell은 Linux 패키지 설치 시 port 22 에서 실행됩니다. 일반 SSH 서비스를 사용하려면 다른 포트로 구성하세요. 현재 버전의 Go 를 다운로드하여 설치하세요. Go 릴리즈 정책 을 따르며 다음을 지원합니다: 현재 안정 버전. 이전 두 메이저 버전. 버전 # GitLab Shell과 관련된 두 가지 버전 파일: 안정 버전 GitLab.com에 배포된 버전 GitLab 팀 구성원은 #announcements 내부 Slack 채널을 모니터링할 수도 있습니다. GitLab Shell 작동 방식 # SSH를 통해 GitLab 서버에 접근하면 GitLab Shell은 다음을 수행합니다: 사전 정의된 Git 명령어( git push , git pull , git fetch )로 제한합니다. GitLab Rails API를 호출하여 인가 여부와 리포지터리가 있는 Gitaly 서버를 확인합니다. SSH 클라이언트와 Gitaly 서버 사이에서 데이터를 복사합니다. HTTP(S)를 통해 GitLab 서버에 접근하면 gitlab-workhorse 로 연결됩니다. SSH를 통한 git pull # %%{init: { "fontFamily": "GitLab Sans" }}%% graph LR A[Git pull] --> |via SSH| B[gitlab-shell] B -->|API call| C[gitlab-rails authorization] C -->|accept or decline| D[Gitaly session] SSH를 통한 git push # git push 명령어는 gitlab-rails 가 푸시를 수락한 이후에 실행됩니다: %%{init: { "fontFamily": "GitLab Sans" }}%% graph LR subgraph User initiates A[Git push] -->|via SSH| B[gitlab-shell] end subgraph Gitaly B -->|establish Gitaly session| C[gitlab-shell pre-receive hook] C -->|API auth call| D[Gitlab-rails] D --> E[accept or decline push] end 전체 기능 목록 authorized_keys 수정 # GitLab Shell은 클라이언트 머신의 authorized_keys 파일을 수정합니다. GitLab Shell에 기여하기 # GitLab Shell에 기여하려면: GitLab API 접근 및 내부 API를 통한 Redis에 연결 가능한