멤베이스의 개인 개발 모델에 대한 정보를 공유해야겠다고 생각했습니다.

저는 다음 명령을 사용하여 모든 개발을 수행하는 '샌드박스'를 설정했습니다:

트론드@오픈솔라리스> pfexec zfs 생성 -o 마운트포인트=/소스 rpool/source
트론드@오픈솔라리스> pfexec chown 트론드:직원 /소스
trond@opensolaris> mkdir /source/membase
트론드@오픈솔라리스> cd /소스/멤베이스
trond@opensolaris> git clone git://github.com/trondn/tools.git
트론드@오픈솔라리스> CD 도구/멤베이스

저는 변경 사항을 가능한 한 분리하여 변경 사항 간의 종속성을 줄이는 것을 좋아합니다. 버그 리포트를 수정할 때마다 저는 다음과 같은 작업을 수행합니다:

trond@opensolaris> mkdir bugnnn
트론드@오픈솔라리스> cd bugnnn
트론드@오픈솔라리스> ln -s ../메이크파일
trond@opensolaris> make

그러면 전체 Membase 스택을 빌드하고 파일을 /tmp/membase-build. 그런 다음 작업 디렉터리를 버그를 수정할 모듈로 변경하고 (희망적으로) 버그를 수정합니다.

버그를 수정한 후(그리고 테스트 케이스를 작성했습니다!) 다음 명령을 사용하여 변경 사항을 커밋하고 검토를 위해 푸시합니다:

trond@opensolaris> git add -p (그리고 포함할 변경 사항 선택)
trond@opensolaris> git commit -m "bugnnn: 어쩌구 저쩌구"
trond@opensolaris> git for-review

마지막 명령은 변경 사항을 검토 시스템으로 푸시하여 Dustin이나 다른 사람이 Diff를 읽고 마음에 들면 패치를 수락할 수 있도록 합니다.

위의 워크플로우를 보면 꽤 쉬워 보이지만, 한 가지 정말 귀찮은 점이 있습니다... 바로 Membase는 크로스 플랫폼 프로젝트이기 때문에 코드가 모든 플랫폼에서 컴파일되고 작동하는지 확인해야 한다는 점입니다. 위의 방법을 사용하면 다른 시스템에 로그인하여 모든 것을 설정하고 변경 사항을 복사하여 작동하는지 확인해야 합니다. 하나의 모듈에만 영향을 미치는 간단한 변경 사항의 경우 언제든지 빌드봇이나 허드슨을 사용하여 모든 플랫폼에서 테스트할 수 있지만, 모든 모듈에 영향을 미치는 인터페이스 변경을 수행하는 경우에는 이 방법이 작동하지 않습니다.

저는 게으른 편이라 그런 지루한 작업을 항상 하고 싶지 않았기 때문에 대신 모든 플랫폼에서 동일한 소스 트리를 쉽게 빌드할 수 있도록 소스를 설정하고 메이크파일을 만드는 스크립트를 작성했습니다.

이 기능을 사용하려면 파일 시스템에서 공유를 설정해야 합니다:

trond@opensolaris> pfexec zfs set sharenfs=on rpool/source
trond@opensolaris> pfexec zfs set sharesmb=name=소스 rpool/source

예를 들어 버그 9999에 대한 트리를 설정하려면 다음과 같이 실행합니다:

trond@opensolaris> ./setup.sh bug_9999
커밋 후크 다운로드 - 확인.
libmemcached(바자) 확인 - 확인.
  구성 스크립트 생성 - 확인.
bucket_engine(git) 체크아웃 - 확인.
ep-engine(git) 확인 - 확인.
  구성 스크립트 생성 - 확인.
libconflate(git) 체크아웃 - 확인.
  구성 스크립트 생성 - 확인.
라이브러리버킷(git) 체크아웃 - 확인.
  구성 스크립트 생성 - 확인.
멤캐시드(git) 체크아웃 - 확인.
  구성 스크립트 생성 - 확인.
뜸(git) 확인 - 확인.
  구성 스크립트 생성 - 확인.
vbucketmigrator(git) 확인 - 확인.
  구성 스크립트 생성 - 확인.
멤베이스-cli(git) 체크아웃 - 확인.
ns_server(git) 체크아웃 - 확인.
멤캐시테스트(git) 확인 - 확인.
  구성 스크립트 생성 - 확인.
SunOS용 빌드 구성

그러면 다음에서 멤베이스를 "멀티 아이사"(32비트 및 64비트 모두) 스택으로 빌드하는 Solaris용 빌드 환경이 설정됩니다. /tmp/membase. 하지만 MacOSX, 우분투 및 데비안 박스에 대한 지원도 추가해 보겠습니다. 모든 코드가 제 오픈솔라리스 박스에 있기 때문에 -s 옵션을 사용하여 소스가 어디에 있는지 알려줍니다:

trond@opensolaris> ./setup.sh -s /net/opensolaris/source/membase/tools/membase -p Ubuntu bug_9999
우분투용 빌드 구성
trond@opensolaris> ./setup.sh -s /net/opensolaris/source/membase/tools/membase -p Darwin bug_9999
Darwin용 빌드 구성
trond@opensolaris> ./setup.sh -s /net/opensolaris/source/membase/tools/membase -p Debian bug_9999
Debian용 빌드 구성

이제 내부를 살펴 보겠습니다. bug_9999 디렉터리로 이동합니다:

trond@opensolaris> ls -l bug_9999
총 15
DRWXR-XR-X 13 트론드 직원 14 Oct 12 13:35 다윈
DRWXR-XR-X 13 트론드 직원 14 Oct 12 13:35 데비안
DRWXR-XR-X 13 트론드 스태프 14 Oct 12 13:33 SRC
drwxr-xr-x 4 트론드 직원 5 Oct 12 13:33 SunOS
DRWXR-XR-X 13 트론드 직원 14 Oct 12 13:35 우분투

모든 소스는 src 디렉터리에 있으며, 다양한 플랫폼의 모든 메이크파일은 해당 코드를 참조합니다.

모든 플랫폼을 기반으로 구축하기 위해 실행 중입니다:

트론드@오픈솔라리스> ssh 우분투 "cd /넷/오픈솔라리스/소스/메베이스/도구/메베이스/버그_9999/우분투 && 만들기" > 우분투.로그 2>&1 &
trond@opensolaris> ssh debian "cd /net/opensolaris/source/membase/tools/membase/bug_9999/Debian && make" > debian.log 2>&1 &
trond@opensolaris> ssh darwin "cd /net/opensolaris/source/membase/tools/membase/bug_9999/Darwin && make" > darwin.log 2>&1 &

물론 스크립트에도 있습니다:

trond@opensolaris> cat bug_9999/build.sh
#! /bin/ksh
cd SunOS && gmake > sunos.log 2>&1 &
ssh ubuntu "cd /net/opensolaris/source/membase/tools/membase/bug_9999/Ubuntu && make" > ubuntu.log 2>&1 &
ssh debian "cd /net/opensolaris/source/membase/tools/membase/bug_9999/Debian && make" > debian.log 2>&1 &
ssh darwin "cd /net/opensolaris/source/membase/tools/membase/bug_9999/Darwin && make" > darwin.log 2>&1 &
xterm -T SunOS -e tail -f sunos.log &
xterm -T Ubuntu -e tail -f ubuntu.log &
xterm -T Debian -e tail -f debian.log &
xterm -T MacOS -e tail -f darwin.log &

안타깝게도 방금 설치한 멤베이스를 시작할 수 없습니다. /tmp/membase하지만 노력 중입니다!

작성자

게시자 트론드 노비, 선임 개발자, Couchbase

트론드 노비는 카우치베이스의 소프트웨어 아키텍트입니다. Couchbase 및 Memcached 프로젝트의 핵심 기여자입니다. C/C++ 및 node.js Couchbase 클라이언트 라이브러리를 만들었습니다.

댓글 남기기