프로그래밍 일반 2014. 10. 24. 11:28

통합 빌드 시스템(Unity Build) 허드슨에 구축하기

예전에 통합 빌드 시스템(Unity Build)에 관한 이야기를 한적이 있었다.


링크 : 통합 빌드 시스템(Unity Build)


이번에는 통합 빌드 시스템을 허드슨 msbuild 에서 사용하는 방법에 대한 이야기해보려고 한다.


Pre-Build Event 명령어

$(SolutionDir)externals\UnityMaker\UnityMaker.exe $(ProjectPath) IndonesiaRelease UnityBuild 2


우선 빌드전 이벤트 명령어가 달라졌는데 개발 환경에 따라 유연하게 대처하기 위한 매개변수들이 늘어났을 뿐이다.


로컬에서 개발하는 경우에는 해당 명령어가 잘 동작하지만 허드슨에서는 빌드 환경 설정에 따라 문제가 발생할 수도 있는데


허드슨 MSBuild 를 사용하는 경우 VS와 매크로가 다르기 때문이다.


로컬 빌드에서는 VS Pre-Build Event 에 실행 명령어를 작업하면 되고 라이브 배포용 빌드에서는 해당 이벤트 명령어를 빌드에서 제외 시킨다.





허드슨 빌드 환경에서 프로젝트 빌드 전에 Execute windows batch command를 하나 추가한다.


build step를 하나 추가하고 'Build a Visual Studio project or solution using MSBuild' 위로 추가한 build step을 드래그해서 올린다.


@rem UnityMaker 실행

SET SOLUTION_DIR=%CD%\

SET PROJECT_XML=%CD%\src\Client.vcproj

%SOLUTION_DIR%externals\UnityMaker\UnityMaker.exe %PROJECT_XML% %_JOBS_PROJECTBUILD% UnityBuild 2

SET ERR_LEVEL=%errorlevel%


@rem UnityMaker.exe 처리 성공한다면 .vcproj 변경 커밋

IF "%ERR_LEVEL%"=="0" (

 svn commit %PROJECT_XML% -m "hudson unity build"

)


exit /b %ERR_LEVEL%


build step에 로컬빌드와 같은 의미의 명령어를 환경에 맞도록 작성해주면 허드슨 셋팅은 끝이다.


이 단계에서 고려할 사항이 혹시라도 기존에 작성한 통합 빌드 시스템 구축하기에 첨부한 소스를 참고해서 Unitymaker를 만들었다면 허드슨 빌드 환경에서 빌드에 실패할 것이다.


그 이유는 UnityMaker의 리턴 값 때문인데..기본적으로 명령 프롬프트 상에서 어떤 프로그램이나 명령어를 실행시킬 때, 프로그램이 성공적으로 끝나면 정수 0(제로)을 OS에 반환하며 끝낸다는 룰 때문이다. 


이것을 Error Level 이라고 하는데 %ERRORLEVEL% 이라는 환경 변수 안에 최근에 종료된 프로그램/명령어가 돌려준 값이 들어 있다.


BuildLog.htm 파일을 확인하면 아래와 같다.





이런 문제는 UnityMaker 프로그램이 정상적으로 종료될 때 0을 리턴하도록 수정하고 실패 리턴값을 세분화하면 된다.