빌드 시간 줄이기
잡마다 새 VM에서 도는 환경에서 준비 시간과 실행 시간을 줄이는 방법
잡마다 새 VM이 만들어지므로 이전 잡의 캐시가 남지 않습니다, 과금은 스크립트가 시작한 뒤부터이니 준비 시간은 돈이 아니라 대기 시간의 문제이고, 실행 시간은 둘 다입니다
어디서 시간이 가나
| 구간 | 과금 | 줄이는 방법 |
|---|---|---|
대기 (queued) | 없음 | 동시 실행 한도 안에서 제출, 티어 상향 |
VM 준비 (preparing) | 없음 | 플랫폼이 담당, 분석 → 준비 시간에서 평균과 p95 확인 |
| 소스 내려받기 | 없음 | 업로드 크기 줄이기 |
스크립트 실행 (running) | 있음 | 아래 전부 |
| 정리 | 없음 | 플랫폼이 담당 |
업로드를 작게
xenocast build는 현재 폴더를 통째로 tar.gz로 올립니다,node_modules,build,DerivedData,.git처럼 빌드에 필요 없는 큰 폴더는 빼세요- 깨끗한 폴더를
--dir로 지정하거나 공개 저장소면--repo owner/name --ref main으로 VM이 직접 받게 하세요 - 업로드 상한은 2 GiB입니다
의존성 해석을 줄이기
Package.resolved,Podfile.lock,package-lock.json,pubspec.lock을 커밋하세요, 해석 단계가 짧아지고 결과가 같아집니다- CocoaPods는
pod install --deployment로 잠금 파일 그대로 설치합니다 - Xcode SPM은
-clonedSourcePackagesDirPath SourcePackages로 경로를 고정하면 로그에서 받는 양을 확인하기 쉽습니다
xcodebuild 옵션
- 시뮬레이터 빌드에는
CODE_SIGNING_ALLOWED=NO를 붙여 서명 단계를 건너뜁니다 - 한 스킴만 빌드하고
-destination을 하나로 두세요, 여러 조합이 필요하면 배치로 잡을 나누면 동시 실행 한도 안에서 병렬로 돕니다 - 테스트는
-only-testing:으로 필요한 번들만 돌리고 UI 테스트는 따로 잡으로 나누세요 - 메모리가 부족하면
-jobs N,-parallel-testing-worker-count 2로 병렬도를 낮추는 쪽이 오히려 빠릅니다, VM은 vCPU 4와 메모리 7GB입니다
도구 설치 시간
- Ruby, CocoaPods, fastlane은 VM에 있고 Node와 Flutter는 없습니다, 받는 단계는 체크섬을 확인하면서 한 번만 두세요
- Homebrew 설치는 길어서 가능하면 피하고, 꼭 필요하면
HOMEBREW_NO_AUTO_UPDATE=1을 두세요
제한 시간
timeout_minutes(기본 60, 최대 360)는 실패한 빌드가 끝없이 과금되는 것을 막는 안전장치입니다, 평소 실행 시간의 두 배 정도로 두세요- 끝나기를 기다리지 않아도 되면
--no-wait로 접수만 하고xenocast wait <job_id>로 나중에 확인합니다