본문으로 건너뛰기

빌드 시간 줄이기

잡마다 새 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>로 나중에 확인합니다

다음 단계