Maven, SVN 을 이용한 개발서버(Tomcat) 자동배포 하기

이것저것 개발하기도 바쁜데 개발한것들을 자꾸 개발서버에 배포해 달라고 보채면 평온하던 마음에 욱 하는 마음이 살포시 자리잡게 된다.

나의 평온한 마음을 계속 유지하기 위해서 일정시간 마다 개발서버에 자동배포 되도록 잔머리를 굴려 보았다.

소스를 SVN으로 관리하고 있고 프로젝트가 Maven 프로젝트이고, 톰캣이 윈도우 서비스로 등록되 있어야 요렇게 하는것이 가능하다. 

개발서버가 윈도우기 때문에 배치파일과 윈도우  보조프로그램 > 시스템 도구 > 작업스케쥴러를 활용하기로 했다.

※ 만약 리눅스나 유닉스 같은 경우는 배치파일을 리눅스용 스크립트로 작성하고 고것을 cron 으로 돌리면 될것이다.

먼저 배치파일 스크립트 소스는 다음과 같다.
@echo off

:: 변수 설정 시작

set temp_build_dir=c:\tmp2\

:: SVN 에 등록된 프로젝트 이름
set project_name=MyProject

:: SVN 정보 설정
set svn_repository=https://xxx.xxx.xxx.xxx/svn/%project_name%
set svn_user=xxxxx
set svn_passowrd=xxxxxx

:: Maven에서 빌드후 생성해주는 war 파일,  보통 xxxx-0.0.1-SNAPSHOT.war 로 생성됨
set to_gen_war=xxxxxxx.war

:: 빌드후 생성된 war 파일을 복사할 대상 war 파일, 톰캣에서 바라보는 webapps 디렉토리
set target_webapp_dir=C:\webapps\xxxx\

:: 프로젝트의 컨텍스트 패스, / 면 ROOT 라고 적어주면 됨
set target_webapp_war_name=ROOT


:: service 에 등록된 톰캣 서비스이름으로 바꿔주셈~
set tomcat_service_name=tomcat6


:: 변수 설정 끝




:: 배포시작
:: 톰캣 정지
net stop %tomcat_service_name%


:: 기존 배포된 디렉토리 지우기
rd /s /q %target_webapp_dir%%target_webapp_war_name%


::체크아웃 받을 디렉토리가 존재하지 않으면 맨듬
IF NOT EXIST %temp_build_dir% (
	mkdir %temp_build_dir%
)

cd %temp_build_dir%

:: svn 에서 프로젝트를 CHECKOUT 받는다.
svn co %svn_repository% --username %svn_user% --password %svn_passowrd%

cd %project_name%

:: maven 으로 war 파일 생성될때까지 기다림
start /wait cmd /c mvn clean package

cd target

:: war 파일을 개발서버 톰캣 webapps 폴더로 복사
copy %to_gen_war% %target_webapp_dir%%target_webapp_war_name%.war /y

:: 톰캣 시작
net start %tomcat_service_name%

개발서버배포.bat


상단에 있는 변수 설정하는 부분을 프로젝트에랑 개발서버 환경에 맞게 바꿔주면 된다.

스크립트를 보면 알겠지만 매우간단하다.


1. 톰캣 STOP
2. 기존 배포된 디렉토리 지우기 
3. SVN 으로 소스 체크아웃
4. Maven으로 war 파일 생성
5. 생성된 war 파일 복사
6. 톰캣 START

요런 과정을 거친다.



위 스크립트가 실행되기 위해서는 svn, mvn 명령어가 아무데서나 실행될수 있도록 시스템 환경변수 PATH 에 해당경로를 추가해 줘야 한다. 

죠래 만든 스크립트를 이제 윈도우에 있는 기능인 작업 스케쥴러에 등록해서 원하는 시간에 실행되도록 추가해 주기만 하면 된다.

윈도우2008 이나 윈도우7 인 경우 대략 아래와 같을 것이고, XP 도 찾아보면 비슷한게 있을 것이다.


1. 새작업 만들기



2. 일반설정



 3. 트리거 설정(트리거탭)

매일 언제 실행할건지 설정한다.


4. 실행할 스크립트 설정(동작탭)

어떤 스크립트를 실행할것인지 선택


죠렇게 설정해 주고 스케쥴에 추가를 해주면 이제부터 설정한 시간마다 SVN에서 소스를 체크아웃 받아 서버에다 자동 배포를 시켜줄것이다.