1. 서버 기본 환경 변수 및 설정 파일 위치
Gerrit 인스턴스의 주 설정은 기본적으로 $GERRIT_SITE/etc/gerrit.config 경로에 위치한 파일에서 정의됩니다. 이 파일에는 경청 포트, 인증 방식, 색인 저장소 타입 등 핵심 동작 매개변수가 포함됩니다.
[gerrit]
basePath = git
canonicalWebUrl = http://192.168.1.50:8083/
serverId = {uuid}
[index]
type = lucene
[auth]
type = HTTP
[sshd]
listenAddress = *:29418
또한, Java 가상머신 특정 옵션이나 캐시 경로 또한 동일한 설정 영역 내에서 제어할 수 있습니다.
2. 접근 제어 모델과 기본 권한 그룹
시스템의 보안 모델은 역할 기반에 기반을 둡니다. 각 사용자는 하나 이상의 보안 그룹에 소속되며, 해당 그룹이 프로젝트 내 작업 범위를 결정합니다.
- System Defined Groups:
- Registered Users: 로그인 상태의 모든 사용자. 보통 일반적인 투표(+/-1) 권한을 가짐.
- Project Owners: 특정 리포지토리의 수정 가능 권한을 소유.
- Administrators: 전체 시스템 범위 내에서 프로젝트 생성 및 정책 제정 가능.
3. 데몬 실행 제어 및 상태 확인
서버의 시작, 종료 또는 재부팅은 제공되는 쉘 스크립트를 통해 관리됩니다. 터미널에서 직접 명령을 실행하여 서비스를 제어할 수 있습니다.
예를 들어, 사이트 빌드 스크립트의 존재 여부와 실행 권한을 확인 후 다음 형태의 명령어를 입력하여 상태를 조회하거나 재시작시킬 수 있습니다.
# 서비스 상태 확인
$GERRIT_SITE/bin/gerrit.sh status
# 데amon 프로세스 재시동
$GERRIT_SITE/bin/gerrit.sh restart
4. 문제 해결을 위한 로그 분석
시스템의 이상 동작 발생 시, 디버깅 정보는 주로 logs/ 하위에 기록됩니다. 주요 진단 파일들은 다음과 같이 분류되어 저장됩니다.
error_log: JVM 예외 및 내부 오류 사항httpd_log: 웹 요청 및 API 트랜잭션 기록gc_log: 가비지 컬렉션 상태 모니터링용
5. 유지보수 목적의 WAR 명령어 사용법
Gerrit 배포본인 .war 파일은 명령줄 인터페이스를 통해 다양한 유지보수 유틸리티를 노출시킵니다. Java 런타임과 결합하여 초기화나 인덱스 재구축 등이 가능합니다.
sudo java -jar gerrit-3.1.0.war init [--dev] [--batch] --site-path=/path/to/site
--dev 플래그는 개발 환경을 위해 기본값으로 서버를 세팅하며, --batch 모드는 대화형 확인 없이 일괄 처리가 필요한 경우에 유용합니다.
6. 병합 충돌 (Merge Conflict) 해결 워크플로우
다수의 기여자가 동일 파일을 수정 시 충돌이 발생하면 Push 가 차단되고 시스템은 'Conflicts With' 상태를 반환합니다. 이를 해결하기 위한 표준 Git 워크플로우는 다음과 같습니다.
- 원격 리모트 최신 상태로 동기화:
git fetch origin - 현재 브랜치를 상류 커밋으로 이동 시도 (Rebase):
git rebase upstream_branch_name - 충돌 발생 시 에디터가 열리거나,
git mergetool을 활용하여 수동 병합 진행. - 충돌 제거 후 변경사항 추가:
git add conflicted_file.txt - 중단되었던 Rebasing 완료:
git rebase --continue
7. 브랜치 생명 주기 관리
외부 SCM(예: GitLab)과의 연동 시 주의점이 필요합니다. 일반적으로 메타데이터 흐름은 Gerrit → 외부 SCM 방향으로만 자동으로 전파됩니다.
- 생성: Gerrit UI 에서 새 브랜치 생성 시, 연동된 원격 저장소에 자동 복제됨.
- 삭제: 웹 UI 상에서 대상 행의 DELETE 버튼을 눌러 영구 제거 처리.
- 확인: 기존 분기 목록은 탐색 필터를 통해可随时 조회 가능.
- 지원되는 버전의 플러그인 JAR (예: reviewers.jar) 를 공식 빌드 페이지에서 검색.
- 다운로드된 라이브러리를
$GERRIT_SITE/plugins디렉토리로 복사합니다. - 변경 사항이 적용되도록 Gerrit 데몬을 재부팅해야 합니다.
8. 기능 확장: 자동 Code Reviewer 지정
각각의 푸시 요청마다 리뷰어를 수기로 선택하는 불편함을 없애기 위해, 플러그인 시스템을 활용할 수 있습니다.
설정이生效后, PR 제출 시 특정 태그나 이메일 형식을 만족하는 사용자에게 자동으로 검토 요청이 발송됩니다.
9. 외래 저장소로부터의 수동 동기화
만약 외부에서 직접 Git 명령어로 코드가 push 되었더라도, Gerrit 측에서는 해당 정보가 즉시 반영되지 않을 수 있습니다. 이 경우 콘솔에서 명시적으로 가져오기 작업을 수행해야 합니다.
cd $GERRIT_DIR/git/TargetProject
git fetch origin +refs/heads/*:refs/heads/* --prune
위 명령어는 원 distant 의 모든 추론 가능한 ref 을 현재 작업장소로 강제로 다시 가져오고, 더 이상 존재하지 않는 레퍼런스를 정결 정리(-prune) 합니다.
10. 프로젝트 완전 제거 절차
웹 UI 단말점에서의 삭제를 방지하기 위해, 백엔드 파일시스템 레벨에서 개입이 요구됩니다.
- 관련 데이터가 저장된 물리적 디렉토리 (
testrepo.git등) 를 삭제. - 메타데이터 불일치를 막기 위해 캐시 강제 새로고침 명령어 실행.
gerrit flush-caches --all명령을 통해 내부 인덱스를 재정리합니다.