Android 기반의 게임 프로젝트를 오픈하면서 구축한 빌드 시스템을 간
략하게 소개합니다.
osx 기반에서 Jenkins를 이용하여 Unity3D와 Android Native
Code와 설정 방법에 대해 다루고 있습니다.
세부적인 코드보다는 전체적인 흐름에 초점을 맞췄으므로
참고용으로 보시기 바랍니다.
2. 목표 설정
▪ Unity3D와 Jenkins를 이용해서 자동 빌드 시스템을 구축하자.
▪ Unity3D에서 export 되는 프로젝트도 Jenkins와 연동하자.
▪ AndroidManifest.xml에 기입될 versionName 책정도 Jenkins와 연동하자 .
▪ 할 수 있는 모든걸 다 자동화 하자.!
3. Jenkins 설치
▪ https://Jenkins-ci.org 에서 Mac OSX 버전 다운로드
▪ 기본 생성 되는 ‘Jenkins’ 계정은 사용하지 말자
▪ Unity3D 빌드 연동시 WindowServer 시스템에 접근
할 수 없는 문제가 발생하여 Hang이 걸려버린다.
▪ 해당 문제를 해결하기 위한 방법이 여러 가지 있으나
여기선 ‘Jenkins’ 계정을 사용하지 않는 방법으로 진행하자.
▪ 설치 과정 중 오른쪽 이미지를 참고로 Customize 메뉴에서
Start at boot as “Jenkins”를 해제하자.
4. Jenkins Plugin 설치
▪ 우리를 도와 줄 Plugin을 설치하자
▪ Unity3d Builder
▪ https://wiki.jenkins-ci.org/display/JENKINS/Unity3dBuilder+Plugin
▪ Subversion
▪ https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin
▪ Environment Injector
▪ https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin
▪ 지정된 환경 변수에 값을 설정해 주는 Plugin 으로 용도는 이따가 공개…
5. Unity3D Plugin 설정
▪ 빌드 머신에 설치된 Unity3D에 대해 Jenkins에서 사용될 별칭을 지정하자.
▪ 여러 버전의 Unity3D를 설치해서 사용할 수 있다.
▪ ‘Jenkins 관리’ > ‘시스템 설정‘ 에서
설정 가능.
6. Jenkins Workspace 구조
▪ Workspace 구조를 아래와 같이 설정 (어디까지나 저희 기준.)
build
- 빌드 결과물(apk) 파일 생성 위치
builder
- ant 기반의 빌드 설정 파일
src
- 실제 project 소스
versioning
- application 버전 갱신 스크립트
7. Jenkins Workspace 구조
▪ src/native_android
▪ 연동 대상이 되는 Android Library 및 외부 프로젝트 위치.
▪ Unity3D에서 export 되는 Project 또한 위치함.
▪ src/temp_android
▪ Unity3D 빌드 진행시 생성되는 임시 디렉토리.
▪ Asset Data 생성 후 src/native_android/wtrio로 복사.
▪ src/unity
▪ 실제 Unity3D 기반 코드 위치.
8. 여기까지 짚고 넘어가자.
▪ Unity3D로 Export 한 Project를 기반으로 기본적으로 추가해야 되는 코드(Google Billing
Service 등)를 추가한 후 해당 Project를 svn에 등록
▪ 여기선 native_android/wtrio
▪ 최초 한번만 등록하면 된다.
이후는 Unity3D Export되는 파일들을 그대로 덮어쓰면 된다.
▪ Environment Injector Plugin은 어따 쓰지?
▪ Unity3D Export 대상 Path를 지정할 때 사용.
9. Android 기본 설정
▪ Unity3D에서 Export된 Project와 Native Code 연동이 목표
▪ 기본 설치 대상
▪ ANT
▪ Android SDK
▪ Unity3D에서 Android Platform으로 빌드하기 위한 빌드 스크립트 준비
▪ http://docs.unity3d.com/ScriptReference/BuildPipeline.html
▪ http://docs.unity3d.com/Manual/CommandLineArguments.html
▪ 우린 ergBuild.cs에 BuildClient method를 만들어서 사용
10. Android 기본 설정
▪ 연동 대상 Android Project
▪ appcompat_v7
▪ google-play-service_lib
▪ wtrio
▪ 실제 제품
▪ Unity3D에서 Export된 결과물
11. Android 기본 설정
▪ Library 대상 Project 빌드 설정 파일 생성
▪ appcompat_v7, google-play-services_lib 각각의 위치에서 아래 명령어 실행
▪ android update lib-project –t [API LEVEL] –p .
▪ build.xml, project.properties 생성됨
▪ 생성된 project.properties를 열어 아래의 구문 추가
▪ android.library = true
12. Jenkins Item 생성
▪ Jenkins 좌측 메뉴의 ‘새로운 Item’ 선택
▪ Item 이름에 대상 Project 이름 입력
▪ Freestyle project 선택
13. Jenkins 설정
▪ Build Paramater 설정
▪ Application 버전 정보를 입력 받아 적용하기 위해 사용
▪ 변수 이름은 ‘VERSION’ 으로 설정
▪ 설정된 변수는 환경 변수로 취급됨
환경변수 설정 화면 설정 후 생성된 메뉴와 사용 화면
16. Jenkins Build Step 설정
▪ 5단계로 Build Step이 구성됨
1. Unity3D Version 정보 파일 생성
▪ Unity3D에서 사용할 Version.cs 생성
▪ AndroidManifest.xml에서 사용될 version.xml 생성
2. UNITY_EXPORT_PATH 환경 변수 설정
3. Unity3D 빌드 스크립트 호출
4. Android Application에서 사용될 version.xml 생성 및 AndroidManifest.xml의
versionName 필드 갱신
5. Android 빌드 실행
▪ 내부적으로 signing 까지 처리
17. Jenkins Build Step 설정
▪ Unity3D Version 정보 파일 생성
▪ UNITY_EXPORT_PATH 환경 변
수 설정