Jenkins로 Unity 안드로이드 빌드
이제 Jenkins로 Unity 안드로이드 빌드를 해보기로 했다.
Environment.GetCommandLineArgs() 메서드로 -BuildTarget Windows 또는 Android로 선택하여 빌드 하는 방법을 생각했다.
BuildScript 수정
- 열거형으로 빌드 플랫폼 설정
- '-BuildTarget' 뒤에 단어를 열거형으로 변경
- 열거형으로 Windows또는 Android 빌드 선택해서 빌드하기
열거형으로 빌드 플랫폼 설정
| BuildPlatform 열거형 |
|---|
 |
'-BuildTarget' 뒤에 단어를 열거형으로 변경
| ParseBuildPlatform() |
|---|
 |
- '-BuildTarget'을 사용하려 했으나 유니티 자체 명령어 중에서 같은 명령어가 있어서 충돌이 일어났다.
- 그래서 '-CustomPlatform'을 사용해서 빌드하였다.
열거형으로 Windows또는 Android 빌드 선택해서 빌드하기
| PerformBuild(BuildPlatform platform) |
|---|
 |
- 열거형으로 Windows와 Android를 선택하여 targetDirectory, buildGroup, buildTarget을 설정하였다.
Jenkinsfile 수정
이제 수정된 BuildScript에 맞춰서 Jenkinsfile을 수정하였다.
환경설정
| environment |
|---|
 |
- BuildTarget을 Android로 설정하였다.
Unity Build Stage
| Unity Build |
|---|
 |
- 유니티 메서드를 실행하기 전에 set으로 자바경로를 바꿔줬다.
- 이를 하지 않으면 Unity 빌드에 필요한 JDK 버전은 11인데, 현재 Windows Batch에는 JDK 21버전을 사용하고 있기 때문이다.
- JDK 21버전은 Jenkins에 필요한 버전이다.
- '-CustomPlatform'을 추가하여 빌드할 플랫폼을 설정하였다.
생성된 파일
| 사진 |
|---|
 |
겪은 오류들
- '-BuildTarget' 충돌
- JDK, SDK, NDK 경로 설정 문제
- JDK 버전 충돌 문제 (11, 21)
- TargetSDK 설정 문제
'-BuildTarget' 충돌
| BuildScript |
|---|
 |
| Jenkinsfile |
|---|
 |
- 위에 서술한데로 '-BuildTarget' -> '-CustomPlatform'으로 수정하여 해결했다.
JDK, SDK, NDK 경로 설정 문제
- Jenkins로 빌드할 때에는 안드로이드 빌드에 필요한 JDK, SDK, NDK를 에디터에 설정한대로 가져오지 못하기 때문에 직접 코드로 경로를 설정해야함.
| Jenkinsfile |
|---|
 |
| BuildScript |
|---|
 |
 |
- Jenkinsfile에 환경변수를 설정하고 BuildScript에서 경로를 가져올 수 있게 설정하였다.
JDK 버전 충돌 문제 (11, 21)
| Jenkinsfile |
|---|
 |
- 위에 서술한 대로 해당문제는 Windows Batch에서 Set으로 자바 경로를 바꿔주었다.
TargetAPI 설정 문제
- Edit -> Project Settings -> Player -> 안드로이드 -> Other Setting -> Identification로 가면 해당 설정을 확인할 수 있다.
| Target API Level |
|---|
 |
- 해당 문제는 내가 SDK를 수동으로 설치하면서 생긴 문제이다.
- 수동으로 32버전을 설치했는데, 기존 설정인 Automatic으로 해두면 최신 버전을 찾기 때문에 최신 버전이 깔려있지 않으면 해당 오류가 발생한다.
- 그래서 나는 32로 직접 설정을 해주었다.
오류 분석을 위한 설정
| BuildScript |
|---|
 |
- 여러 테스트 중, Jenkins에서 Build는 성공했는데, 막상 apk 파일이 생성되지 않은 경우가 있었다.
- 이러한 에러는 이렇게 report 기능을 이용해서 확인할 수 있었다.
| Jenkinsfile |
|---|
 |
- 특히 중요한 것은 저 '-logFile -' 이었다. 저 명령어가 들어가야 Jenkins Console Output에 정보가 출력된다.
| 참고용 |
|---|
 |
- 선배가 주신 보고서 양식은 이렇다. 확실히 이 선배님이 해당 코드를 사용하시는 이유를 알 수 있었다.