ant 빌드 방법에 대해서 정리

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대에 대한 배포 전략은 좀 더 고민한 후 다시 정리해야 겠다.