잡 VM의 실행 환경, 시간과 크기 한도, 동시 실행과 과금 규칙을 수치로 정리합니다
아래 표의 한도는 모두 서버가 요청 시점에 검사하는 값입니다
러너 이름, 요금, 지원 Xcode와 시뮬레이터 런타임은 러너 개요에 있습니다
| 항목 | 값 |
|---|
| 호스트당 잡 VM | 최대 2개 |
| 작업 디스크 | 30GB |
| 아키텍처 | arm64 (Apple Silicon) |
| 도구 | CocoaPods, fastlane, Node.js LTS, Ruby 3.4, Flutter, Homebrew |
전체 도구 목록은 베이스 이미지에 있습니다
| 항목 | 값 |
|---|
| 셸 | bash -eo pipefail |
| 작업 폴더 | 소스 루트 (업로드를 푼 폴더 또는 저장소 루트) |
| 미리 설정된 변수 | CI=true, DEVELOPER_DIR, LANG, LC_ALL, HTTPS_PROXY, HTTP_PROXY, NO_PROXY, PATH |
| 외부 접속 | 프록시 경유, 허용되지 않은 호스트는 403 |
| 들어오는 접속 | 없음 |
| 멈출 때 신호 | 프로세스 그룹에 SIGTERM, 30초 뒤 SIGKILL |
| 항목 | 값 |
|---|
| 스크립트 길이 | 1~65,536자 |
| 제한 시간 | 1~360분, 기본 60분 |
| 환경 변수 | 최대 100개, 이름 128자, 값 32,768자 |
| 결과물 패턴 | 최대 50개, 각 200자 |
| 모으는 결과물 | 파일과 폴더 합쳐 최대 20개, 총 2GiB |
| 결과물 보관 | 잡 종료 후 7일 |
| 결과물 다운로드 링크 | 15분 |
| 로그 | 잡당 5MiB, 넘으면 잘림 |
| 업로드 크기 | 2GiB |
| 업로드 파일 수 | 200,000개 |
| 업로드 보관 | 24시간, 잡 하나에만 사용 |
| 배치 | 잡 20개, 축당 Xcode 10개와 시뮬레이터 20개와 스킴 20개 |
| 잡 목록 페이지 | 1~100, 기본 20 |
| 멱등 키 | 1~255자, 24시간 |
| 항목 | 값 |
|---|
| 동시 실행 한도 | 조직 티어에 따름 GET /v1/tiers와 콘솔 분석 → 한도에서 확인 |
| 한도 초과 | 대기열 (queued_reason: tier_concurrency_limit) |
| 대기열 가득 | 429 tier_concurrency_limit, Retry-After: 60 |
| 월 한도 도달 | 새 잡 402 tier_monthly_limit, 실행 중 잡은 계속 |
| 배정 순서 | 실행 중 잡이 가장 적은 조직, 같으면 가장 오래 기다린 잡 |
| 선점 | 없음 |
| 항목 | 값 |
|---|
| 분당 요금 | US$0.0396 (부가세 포함) |
| 정가 | US$0.078 |
| 요율 고정 시점 | 잡이 대기열을 떠날 때 |
| 과금 시작 | 스크립트 시작 (started_at) |
| 과금 종료 | 스크립트 종료, 취소 결정 시각, 제한 시간 경계, 잔액 소진 경계 중 먼저 오는 것 |
| 올림 | ceil(run_seconds / 60), 0초는 0분 |
| 플랫폼 오류 | 0 |
| 제출 조건 | 사용 가능 잔액 ≥ 1분 요금 |
| 실행 중 소진 | 다음 분을 확보하지 못하면 분 경계 5초 전에 멈춤 |
| 최소 충전 | US$5, 프리셋 US$5, 20, 50, 100 |
| 크레딧 만료 | 충전 건별 1년, 만료가 이른 것부터 사용 |
xenocast build --script 'sysctl -n hw.ncpu; sysctl -n hw.memsize; df -h /; sw_vers; xcodebuild -version' --timeout 5