rein's world

팀 릴리즈 서버 준비

지지난 주에 적당한 CPU 파워의 잉여 머신이 하나 생겨서, 시험 삼아 릴리즈 서버를 하나 구축했다. OS 새로 올리고 프로그램 좀 설치하다 보면 부팅도 안되더라고 Orz

그래서 지난 주에 머신을 교체하고 (E8400이 Q8300이 되었다?), 이번 주 목요일에 설정을 끝냈다. 대략 다음의 툴을 깔아야 했다.

개발 도구 위주로 쓰면,

  • VS 2005/2008/2010 및 여기에 해당하는 Service Pack과 hotfix
  • Collabnet Subversion Server (Client 모듈만)
  • Debugging Tools For Windows (x64)
  • ActivePerl1
  • CruiseControl.NET 1.5 ((1.6이 Release가 있긴 한데, 뉴스 페이지엔 없어서 일단 1.5))

…이 대부분은 Azyu 군이 고생함.

릴리즈 서버라고 거창하게 써놓긴 했지만 하는 일은 매우 단순하다. 모든 작업은 CCNet에 forced-build trigger로만 일어나게 하고, 다음 작업을 한다.

  1. 변경 없는 저장소 – 팀 내 기준으로는 주로 subersion – 코드를 가지고 release 할 설정으로 빌드하고 (msbuild 혹은 .bat 사용)
  2. 이에 대해서 소스 코드 인덱싱을 하고 (ssindex.cmd)
  3. 이 정보를 포함한 .pdb 및 바이너리 정보를 심볼 서버에 저장하고 (symstore)
  4. 적당한 디렉터리에 배포할 파일들을 모으거나 / 파일 목록을 받아서 이를 묶어 배포할 형태로 만들어, 적당한 레이블을 붙여서 .zip 형태로 다운로드 할 수 있게 만들기

…로 끝?

변경사항 마다 빌드하지 않는 건, 일단 release 빌드는 시간이 오래 걸리고, symstore를 압축 옵션을 주고 해도 하드 디스크 용량이 좀 빨리 줄어드는 문제가 있어서. 예전에도 한 번 당했고. 그리고 빌드에는 기능이 하나 더 들어갈 예정인데 – 특정 형태의 .rc와 .h를 조작해서 svn revision 정보를 넣을 예정; 코드 테스트는 끝났고 적용만 남은 상태 – 여하튼 변경 없는 코드를 clean;build 하는 형태로 동작하게 했다.

그리고 이에 대해서 소스 서버 정보와 심볼 서버 정보를 남기고 묶는다는 것.

.zip 형태로 묶는 기능을 CCNet의 Package publisher가 처리해줘서 매우 간단히 했음. 다만 이게 1.6에서 바뀌는 거긴 한데, <file>???</file> 하는 식으로 파일 목록을 받는데, 이게 특정 디렉터리와 그 하위 디렉터리를 전부 포함하라는 문법이 dir-name\**\*.* 이라서 (백 슬래시인가?) 좀 헤맸다.

Subversion revision을 label로 붙이려 했더니 CCNet 자체 기능으론 없더라. 대략 major#.minor#.patch#.rev 정도로 하려고 했는데 안되더라고; 하지만 CCNet 용으로 이런 기능을 하는 모듈을 svnrevisionlabeller라는 이름의 오픈 소스로 만들고 있더라. 원저자는 요즘 작업을 안 하는 듯 하지만 다른 사람들이 이슈에 패치 달고 있는 거 보니 재미있음. 이 모듈 써서 label 달고, 패키지 이름도 이걸로 처리되게 했다.

의외로 오래 안 걸리고 설정이 끝나서 흡족한 상태 XD


  1. 소스 인덱싱에서 사용함. ↩︎