작년에 프로젝트(이하 projectx)를 수행하던 중에 작성했던 것들을 정리하여 공개합니다.
SI 프로젝트들이 늘 그렇듯이 쪼들리는 일정과 반복되는 요구사항 변경, 그리고 환경이 개판이지요. 그 전까지만 해도 몇년을 자동화된 툴을 사용하지 않고 ftp와 터미널을 사용하는 환경이었습니다. 개발툴이야 당연 eclipse였지만요. 그런데 projectx를 수행할 때는 제가 개발리더 역할을 맡았고, 서버 조정이나 환경등을 제가 설정해야 했습니다. 기회는 이때다 싶었죠. svn 설치, 설정을 하고 각 개발자들에게 사용법을 알려주었습니다. 그리고 마구 바뀌는 요구사항을 수용하기 위해 custom tag들을 만들었죠. svn 덕분에 소스 덮어치기 사고는 일어나지 않았지만, 하루에도 수십번을 빌드할 수 있는 상황은 바뀌지 않았습니다. 제가 cvs보다 svn을 좋아하는 이유는 svn이 event를 지원하는 것 때문이었는데, 그것을 이용해서 자동빌드/적용 환경을 꾸미게 되었습니다.
svn repository에서 source root를 보면 hooks 라는 디렉토리가 있습니다. 그 안에는
[$SOURCE_ROOT/hooks ]$ ls
post-lock.tmpl pre-commit.tmpl pre-unlock.tmpl
post-revprop-change.tmpl pre-lock.tmpl start-commit.tmpl
post-commit.tmpl post-nlock.tmpl pre-revprop-change.tmpl
라는 파일들이 있습니다. 이것들은 각 이벤트에 반응할 스크립트들의 템플릿인데요, 위의 파일에서 “.tmpl”을 빼서 저장하면 svnserve가 알아서 해당 스크립트를 실행합니다. 그 중 post-commit 스크립트는 커밋 이후에 실행되는 스크립트입니다. 저걸 수정하면 되지요.
[$SOURCE_ROOT/hooks ]$ vi post-commit
#!/bin/sh
/home/svn/sample_script_post_commit.sh
위와같이 post-commit 파일을 생성해줍니다. 그 다음에 /home/svn/sample_script_post_commit.sh를 만들면 됩니다. 스크립트 기능은 “목표 바이너리 삭제 -> svn export -> build -> 바이너리 copy” 면 충분합니다.
[$SOURCE_ROOT/hooks ]$ vi /home/svn/sample_script_post_commit.sh
#!/bin/sh
mkdir $APP_ROOT/WEB-INF/classes
svn export svn://$SOURCE_ROOT $APP_ROOT/$SOURCE_ROOT –force –username $USERNAME –password $USERPASSWORD
/home/svn/build.sh
date > /home/svn/backup_gos_dev/lastbackup.log
/home/svn/build.sh 는 ant를 이용한 빌드 스크립트입니다. 간단하죠.
#!/bin/sh
cd /home/svn
export JAVA_HOME=/usr/java5
ant
build.xml은 각자 프로젝트에 맞에 생성해주시면 됩니다.
No related posts.
Related posts brought to you by Yet Another Related Posts Plugin.