2009년에 개발된 프로젝트를 맡게 되었다.
헌데 이 프로젝트 개발 장비 및 상용 장비 빌드 처리 방식이 웃긴다.
ant를 이용하는데 로컬 이클립스의 프로젝트 소스를 기반으로 war를 생성한 후 개발 장비 및 상용 장비에 FTP접근하여 war를 업로드 하는 식이다.
간단하게 설명하면 다음과 같은 방법으로 빌드를 한다.
로컬 이클립스에서 ant 스크립트를 이용하여 war 생성
개발 장비 FTP 로그인 후 war 업로드
tomcat shutdown
업로드 된 war 디렉토리에 존재하는 shell을 실행하면 기존 소스 백업 후 war를 푼다.
tomcat startup
위와 같이 빌드를 하면 수작업으로 처리해야 할 일들이 많아지고, 결국 빌드 하는데 손이 많이 간다.
더군다나 상용 장비는 총 4대이므로 한 장비 배포하는데 5번 손이 간다고 하면 무려 20번이나 손이 가는 것과 같다.
이 얼마나 비효율적이고, 위험한 빌드 과정인가?
결국 엄청난 수작업을 통해서만 배포를 할 수 있으며 까딱 실수 하면 특정 장비에는 소스 배포를 누락하는 경우가 생길 수도 있을 것이고, 결정적으로 난 이렇게 노가다 하기 싫다.
그래서 소스 빌드 작업을 아래와 같이 단순화 시켰다.
1. 개발 장비 telnet 연결
2. 빌드 shell 실행
– 기존 소스 백업
– tomcat shutdown
– SVN 서버에 저장되어 있는 소스 다운로드
– 소스 배포
– tomcat startup
큰 작업은 위의 2가지 항목이 전부다.
개발 장비에 소스 배포할 때를 기준으로 설명하자면 telnet을 이용하여 개발 장비에 접속 후 특정 shell을 실행하면 작업이 완료 된다.
- 로컬 환경 셋팅
아래는 ant 스크립트이며 로컬 PC 기준으로 테스트 환경을 구축했다.
cfile23.uf.135ABA4D5110C8D50A027F.properties
cfile24.uf.1743114D5110C8D5360DD3.xml
가장 먼저 해야 할 것은 SVN에서 소스를 체크 아웃 받기 위해서 SVN 서버의 버전을 알아야 한다.
$ svn –version
svn, 버젼 1.4.2 (r22196)
버전 확인 후 http://subclipse.tigris.org/svnant.html 사이트에 접속하여 SVN server의 버전에 따른 SvnAnt 1.x.x를 다운로드 받는다.
다운받는 압축 파일을 해제하면 lib 디렉토리에 svnant.jar, javasvn.jar, svnjavahl.jar 등이 있는데 모든 jar 파일을 ant 홈 디렉토리의 lib에 copy한다.
로컬에서 테스트를 할 때 한 가지 유의 사항은 properties에 작성하는 디렉토리 경로를 \가 아닌 /로 해야 한다는 것이다.
svn task에서 \를 인식하지 못한다.
svn task를 실행해보면 Problem: failed to create task or type svnSetting 이런 메시지가 나오던데 원래는 다음과 같이 셋팅이 되어 있었다.
<svnSetting id=”svn.settings” javahl=”false” svnkit=”true” username=”${svn.username}” password=”${svn.password}” />
<svn refid=”svn.settings”>
<checkout url=”${svn_repository_url}” revision=”HEAD” destPath=”${checkout.dir}/${project_name}” />
</svn>
원인을 확인해 보니 svnant 버전에 따른 에러로 확인되었으며 이럴 때에는 아래와 같이 설정해야 한다.
<svn javahl=”false” username=”${svn.username}” password=”${svn.password}”>
<checkout url=”${svn_repository_url}” revision=”HEAD” destPath=”${checkout.dir}/${project_name}” />
</svn>
현재 해당 프로젝트에서 사용하는 SVN 서버의 버전은 1.4.x 버전대이다. 만약 SVN 서버의 버전이 1.6 대이면 위와 같이 svnSetting을 이용하여 설정하면 된다.
여기까지가 로컬 환경을 위한 테스트 구축 방법이다.
- 개발 환경 셋팅
다음은 개발 장비에서의 ant 환경 구축에 대해서 정리를 해본다.
http://ant.apache.org 에서 ant 다운로드
.bash_profile에 아래 패스 등록
export JAVA_HOME=/usr/java/jdk1.6.0_38
export PATH=$JAVA_HOME/bin:$PATH
export ANT_HOME=/svc/idp/build/apache-ant-1.8.4
export PATH=$PATH:$ANT_HOME/bin
위의 로컬 개발 환경에서와 같이 svnant jar파일 들을 다운로드 받은 후 $ANT_HOME/lib 디렉토리에 copy 한다.
$ ant -f build.xml 실행 시 아래와 같은 에러 메시지 발생하면 http://sourceforge.net/projects/ant-contrib/files/ant-contrib/ant-contrib-0.6/ 페이지에서 ant-contrib-0.x.jar 를 다운로드 받은 후 $ANT_HOME/lib 디렉토리에 copy한다.
[taskdef] Could not load definitions from resource net/sf/antcontrib/antcontrib.properties. It could not be found.
<taskdef resource=”net/sf/antcontrib/antcontrib.properties” classpathref=”ant_classpath” /> 는 collection task를 사용하기 위해서 정의한 것이며 이를 사용하기 위해서는 ant-contrib-0.x.jar가 필요하다.
상용 장비 4대에 대한 배포 전략은 좀 더 고민한 후 다시 정리해야 겠다.