실패가 조용한 이유부터 잡습니다
배치모드 빌드가 실패하면 아무 말도 없이 끝납니다. 에디터라면 창이 뜨고 오류가 눈에 들어오는데, 배치모드는 프로세스만 종료되고 남는 건 파일이 없다는 사실 하나입니다. 그래서 인수 조합을 만지기 전에 로그 파일 경로와 종료 코드, 이 두 개를 먼저 확정합니다.
Unity.exe -quit -batchmode \
-projectPath C:/project \
-executeMethod BuildScript.BuildAndroid \
-logFile C:/logs/build.log \
-buildTarget Android인수 순서보다 이 세 개가 먼저입니다
-logFile이 없으면 로그를 찾는 데 시간을 다 씁니다.-quit이 없으면 에디터가 살아남아서 CI가 멈춘 것처럼 보입니다.-executeMethod가 가리키는 정적 메서드에서 예외가 나면 종료 코드가 0이 아닙니다. 이걸 안 읽으면 실패를 성공으로 읽습니다.
로컬에서 되고 CI에서만 씬이 빠지는 자리
BuildPipeline.BuildPlayer에 넘기는 씬 목록이 Build Settings의 체크 상태를 그대로 쓰는지, 코드에서 따로 만드는지에 따라 결과가 갈립니다. 이 사고는 거의 항상 여기서 납니다.
같은 커밋에서 로컬 빌드와 명령줄 빌드가 같은 산출물을 내면 여기까지는 맞습니다. 산출물 크기가 다르면 씬 목록이나 스크립팅 정의가 갈렸다는 뜻이라, 로그 앞부분의 대상 플랫폼과 정의 목록을 봅니다.
var scenes = EditorBuildSettings.scenes
.Where(scene => scene.enabled)
.Select(scene => scene.path)
.ToArray();
var report = BuildPipeline.BuildPlayer(
scenes,
"build/android/game.aab",
BuildTarget.Android,
BuildOptions.None);
if (report.summary.result != BuildResult.Succeeded)
EditorApplication.Exit(1);검증 범위
공식 문서 대조
검증일
Unity 공식 문서와 본문의 코드·절차를 대조해 공개 준비 상태로 전환했습니다. 별도 Unity 프로젝트나 실기기에서 직접 재현한 결과는 아니며, 특정 버전·기기 문의가 들어오면 해당 환경에서 후속 확인합니다.
확인한 공식 문서Unity 명령줄 인수 ↗