[Jenkins] Unity 안드로이드 빌드

이준영·2026년 1월 5일

Jenkins로 Unity 안드로이드 빌드

이제 Jenkins로 Unity 안드로이드 빌드를 해보기로 했다.

Environment.GetCommandLineArgs() 메서드로 -BuildTarget Windows 또는 Android로 선택하여 빌드 하는 방법을 생각했다.

BuildScript 수정

  1. 열거형으로 빌드 플랫폼 설정
  2. '-BuildTarget' 뒤에 단어를 열거형으로 변경
  3. 열거형으로 Windows또는 Android 빌드 선택해서 빌드하기

열거형으로 빌드 플랫폼 설정

BuildPlatform 열거형
  • 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'을 추가하여 빌드할 플랫폼을 설정하였다.

생성된 파일

사진
  • 잘 생성되었다.

겪은 오류들

  1. '-BuildTarget' 충돌
  2. JDK, SDK, NDK 경로 설정 문제
  3. JDK 버전 충돌 문제 (11, 21)
  4. 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에 정보가 출력된다.
참고용
  • 선배가 주신 보고서 양식은 이렇다. 확실히 이 선배님이 해당 코드를 사용하시는 이유를 알 수 있었다.
profile
게임 개발자가 되기 위해서 공부하는 중입니다.

0개의 댓글