메뉴 건너뛰기

Gerrit Slave/Mirror 구성하기

Gerrit은 소스코드 변경 권한 관리 목적으로 미러링 구성 그리고 부하 분산을 위해 여러개의 Gerrit slave 서버 구성이 가능하다. 동기화 이후 원본 서버서 merge가 발생하면 설정된 mirror/slave 서버에 변경 내용이 자동으로 갱신된다.

Replication plugin을 이용해 구성하는 방법을 정리한다.

replication.png




순서 요약:

  • Gerrit 계정 설정
  • SSH 접속 환경 구성
  • 미러/Slave에 repository 생성
  • replication.config 구성
  • replication 시작
본문에서 "# >" 는 shell prompt 를 뜻한다.

Step 1) Gerrit 계정 설정

Replication 플러그인이 사용할 mirror/slave Gerrit 서버측의 계정을 준비한다.
  • account: Gerrit의 super administrator 계정 또는 Administrator's 계정을 이용하면 권한 문제를 신경쓰지 않아도 된다.
  • ssh key 등록: 원본 Gerrit 서버의 gerrit 실행 계정으로 ssh key를 생성해서 public key를 Gerrit account (admin)에 등록한다.

Step 2) SSH 접속 환경 구성

SSH로 원본 서버에서 Mirror/Slave 서버로 접속할 때 password를 입력하지 않고 ssh public key 방식으로 로그인 할 수 있도록 구성한다. Replication 과정에서 접속 방향은 원본 Gerrit 서버에서 (⇒) Mirror/Slave 이다.

Mirror/Slave 서버 known_hosts 등록

  • known_hosts 등록: 원본 서버에서 Mirror/Slave 서버들을 known_hosts에 등록합니다. 아래의 명령어를 수행하면 known_hosts에 등록할 것인지 물어볼 때 "yes" 라고 입력한다.
    # > ssh gerrit@<Mirror/Slave ip 또는 domain name> -p 29418
  • Mirror/Slave들에 대해 반복한다.

SSH password 입력하지 않도록 설정

Replication 수행할 때 password 입력을 할 수 없으므로 password 없이 ssh 접속할 수 있도록 설정한다. 적용이 필요한 계정은 Mirror/Slave 서버의 Gerrit 실행 계정으로 Mirror/Slave에 존재하지 않는 repository를 동기화할 때 repository 생성을 위해 ssh로 접속할 때 사용된다. 따라서 Gerrit 내의 계정이 아닌 Mirror/Slave 서버의 시스템 계정에 적용한다.

  • 원본 서버의 gerrit 실행 계정으로 다음 절차를 수행한다. 이 절차는 <home>/.ssh 폴더에 id_rsa, id_rsa.pub가 존재한다고 가정한다. 예) account (gerrit), ip address (192.168.0.101)
    # > ssh-copy-id -i ~/.ssh/id_rsa.pub gerrit@192.168.0.101
    gerrit@192.168.0.1's password:     ←192.168.0.1 서버의 gerrit 계정 비밀번호 입력 (Gerrit 서버에서 생성한 계정 아님)
  • 정상으로 설정되었는지 확인한다
    # > ssh gerrit@192.168.0.101
  • Mirror/Slave 서버에 대해 반복적으로 수행한다.

Step 3) Mirror/Slave Gerrit의 Repository 생성

Replication 플러그인 가이드에 따르면 동기화될 레파지토리가 Mirror/Slave Gerrit 서버에 존재하지 않으면 replication 플러그인이 ssh 로 Mirrow/Slave 서버에 접속하여 자동으로 레파지토리를 생성한다. 

Version 2.12는 replication 플러그인이 새로운 형식으로 생성된 known_hosts 을 이해하지 못해서 수동으로  Mirror/Slave 에 repository를 생성해야 한다.

  

Step 4) Replication 플러그인 설정

Replication 플러그인 설정 파일을 작성한다. 자세한 항목별 설명은 요기를 참조한다.
주요 설정 항목은 다음과 같다.
  • [remote "slaves"]: 원격 Mirror/Slave 서버 정의 그룹, "slaves" 부분은 구미에 맞게 작성
  • url: 동기화 작업에서 사용할 주소/저장소 정보, ${name} 필수
    - admin: 동기화 작업에 사용할 Gerrit 계정, 자신의 system에 맞게 변경
    - 29418: Gerrit ssh 포트, 자신의 system에 맞게 변경
    - ${name}.git: replication 플러그인이 원본 repository 이름으로 치환
  • push: 동기화할 refspec 정의
  • threads: 동기화에 사용할 thread 개수, 일반적으로 동기화할 서버의 개수와 동일하게 설정
  • authGroup: 동기화할 그룹 이름
  • adminUrl: Mirror/Slave에 repository가 존재하지 않을 때 ssh로 접근해서 repository를 만들기 위해 사용되는 정보
    - gerrit: Mirror/Slave 서버에서 Gerrit 을 실행한 계정 이름, Step 2)에서 사용했던 계정
    - 22: ssh port 이름, default (22)
    - home/gerrit/git/${name}.git: repository를 생성할 위치로 gerrit이 설치된 홈의 git 폴더. ${name}은 필수
  • projects: 동기화할 Gerrit 저장소 정의
    - regular expression, 와일드 카드 (*), 문자열 세가지로 정의 가능

원본 서버의 전체 repository 동기화 설정 예)

[remote "slaves"]
  url = ssh://admin@192.168.0.101:29418/${name}.git
  url = ssh://admin@192.168.0.102:29418/${name}.git
  push = +refs/heads/*:refs/heads/*
  push = +refs/tags/*:refs/tags/*
  threads = 2
  authGroup = Public Mirror Group
  authGroup = Second Public Mirror Group
  adminUrl = ssh://gerrit@192.168.0.101:22/home/gerrit/git/${name}.git
  adminUrl = ssh://gerrit@192.168.0.102:22/home/gerrit/git/${name}.git


원본 서버의 특정 repository 동기화 설정 예)

[remote "slave"]
  url = ssh://admin@192.168.0.101:29418/${name}.git

  projects = hellogerrit
  projects = sample*
  projects = ^foo/(bar|baz)

  push = +refs/heads/*:refs/heads/*
  push = +refs/tags/*:refs/tags/*

  threads = 3

  authGroup = Public Mirror Group
  authGroup = Second Public Mirror Group

  adminUrl = ssh://gerrit@192.168.0.101:22/home/gerrit/git/${name}.git


Mirroring 설정 예)

  • mirror: true이면 원본 서버에 존재하지 않는 branch가 원격 (Mirror) 서버에 존재하면 삭제함, default (false)

[remote "slave"]
  url = ssh://admin@192.168.0.101:29418/${name}.git

  push = +refs/heads/*:refs/heads/*
  push = +refs/tags/*:refs/tags/*

  mirror = true
  threads = 1

  authGroup = Public Mirror Group
  authGroup = Second Public Mirror Group

  adminUrl = ssh://gerrit@192.168.0.101:22/home/gerrit/git/${name}.git

Step 5) Replication 시작

Replicaton.config 변경사항 반영

replication.config 파일에 gerrit section에 autoReload (true) 정의하면 replication.config가 변경되면 이전 동기화를 모두 취소하고 변경된 설정이 자동으로 반영된다.
[gerrit]
  autoReload = true

수동으로 반영하는 명령은 아래와 같다.

# > ssh -p 29418 localhost gerrit plugin reload replication


Replication 시작

아래 명령은 replication.config 내에 정의된 replication 설정 모두 ( [remote "~~~"] section) 시작하는 예 이다.

# > ssh -p 29418 admin@localhost replication start --all


원격에서 replication을 제어하려면 gerrit config에 원격 관리를 enable 해야 한다.

[plugins]

    allowRemoteAdmin = true


Gerrit을 재 시작해도 replication이 동작한다.

</끝>

TAG •
?

 


  1. No Image

    도커 내에서 도메인 접근이 안될 때 해결 방법

    도커 내에서 도메인 접근이 안될 때 해결 방법도커를 구성했는데, 도커 내에서 도메인 이름을 가진 주소에 접근이 안되어 당황스러울 때가 있습니다. 도인 이름 (예: www.example.com)을 IP 주소로 변경하지 못하는 것이 원인입니다. 해결 방법은 의외로 간...
    Date2019.01.30 ByTerry Reply0 Views190
    Read More
  2. No Image

    Git 원격 저장소에서 삭제된 branch를 로컬 저장소에서 자동으로 지우기

    Git 원격 저장소에서 삭제된 branch를 로컬 저장소에서 자동으로 지우기Git의 특성으로 로컬과 원격 저장소에 많은 브랜치들이 생성된다. 원격 저장소의 경우 팀원들이 공유해서 사용하므로 원격 저장소에서 삭제된 브랜치를 로컬 저장소에서 매번 삭제하는게 ...
    Date2018.12.22 ByTerry Reply0 Views260
    Read More
  3. CollabNet Subversion Edge 관리자 암호 초기화 방법

    CollabNet Subversion Edge의 관리자 암호 초기화 방법Edge의 관리자 암호 기준이 까다롭기 때문에 복잡한 암호를 설정해야 하기 때문에 자칫 설정했던 암호가 생각나지 않는 경우가 있다. 간단하게 암호를 초기화 할 수 있으니 다행 :) Step 1) ...
    Date2018.03.24 ByTerry Reply2 Views979
    Read More
  4. No Image

    인터넷 연결 안되는 서버에 MySQL 설치하기 (Off-line 설치)

    인터넷 연결이 허락되지 않는 환경에 MySQL을 설치해야 하는 경우가 있습니다. 훌륭한 개발자들이 방법을 만들어 놓았으니 당황하지 않습니다. 이 방법은 MySQL 뿐 아니라 다른 패키지 설치에 적용 가능합니다. 인터넷 연결 안되는 서버에 MySQL 설치하...
    Date2018.02.26 ByTerry Reply0 Views5217
    Read More
  5. No Image

    SVN 저장소를 Git으로 옮기는 방법

    SVN 저장소를 Git으로 옮기는 방법기존 Subversion으로 관리하던 소스코드를 Git으로 관리하는 것이 대세이다. 이 게시물은 svn으로 관리하던 소스코드를 Git으로 옮기는 방법을 정리 한다. 02-2.svg 사전 준비: - Subversion client 설치 - Git 설...
    Date2017.02.03 ByTerry Reply0 Views3078
    Read More
  6. Gerrit Slave/Mirror 구성하기

    Gerrit Slave/Mirror 구성하기Gerrit은 소스코드 변경 권한 관리 목적으로 미러링 구성 그리고 부하 분산을 위해 여러개의 Gerrit slave 서버 구성이 가능하다. 동기화 이후 원본 서버서 merge가 발생하면 설정된 mirror/slave 서버에 변경 내용이 자동으로 갱...
    Date2016.11.24 ByTerry Reply0 Views2851
    Read More
  7. H2 embedded database 접속 방법

    H2 embedded database 접속 방법 샘플로 제공되는 도구들은 배포의 편리함을 고려해서 embedded DB를 주로 사용합니다. DB 테이블의 내용을 참조하거나 일부 값을 수정하기 위해 H2 database 파일에 접속하는 방법을 정리합니다. Command line ...
    Date2016.11.05 ByTerry Reply0 Views6178
    Read More
  8. 여러개의 Git 저장소 (repository)로 이루어진 프로젝트 관리하기

    여러개의 Git 저장소 (repository)로 이루어진 프로젝트 관리하기프로젝트를 진행하다보면 여러 프로젝트에서 사용하는 공통 모듈이 존재하곤 합니다. Git은 이를 대비해 submodule 기능을 제공합니다. Submodule은 subversion의 external link 와 유사한 개...
    Date2016.11.01 ByTerry Reply0 Views6088
    Read More
  9. Gerrit 플러그인 빌드 방법

    Gerrit Plugin Build 2016년 7월을 기준으로 Gerrit 플러그인은 100여개에 달합니다. Gerrit 공식 페이지에서는 실행 가능한 플러그인을 제공하지 않기 때문에 운영중인 Gerrit version에 맞게 스스로 빌드 해야 하겠습니다. 본 문서는 Gerrit 플러그인을...
    Date2016.08.12 ByPSEG Reply2 Views3298
    Read More
  10. IBM Rational DOORS 프로젝트(DPA) 내보내기

    이 게시물은 IBM Rational DOORS에서 확장가 dpa(DOORS Project Archive) 파일을 Import/Export하는 방법에 대한 간단한 가이드를 제공한다. DOORS Project Archive Export 먼저 DOORS의 프로젝트를 내보내기 위해 DOORS 데이터베이스에서 해당 프로젝트...
    Date2016.06.24 ByTom Reply0 Views2114
    Read More
Board Pagination Prev 1 2 3 4 5 Next
/ 5