iOS 파이프라인이 xcodebuild 아카이브를 일주일에 12번 실행하면 GitHub Actions macOS 호스팅 분 청구서가 엔지니어링보다 먼저 손상됩니다. 플랫폼 팀에 실제로 필요한 것은 안정적인 키체인, 파생 데이터 경로 및 감사 가능한 송신 IP를 갖춘 자체 호스팅 macOS 실행기를 실행하는 전용 클라우드 Mac 빌드 머신입니다. 이 게시물에서는 “Windows의 xcode”가 아닌 해당 착륙 패턴만 다룹니다. TestFlight 업로드 시트 플레이북(캐나다 M4 TestFlight 레인).
호스팅과 자체 호스팅을 선택하기 전에 다음 세 가지 아이디어를 고려하세요.
-
호스팅 macOS: 분당 지불
무거운 파이프라인은 비용을 먼저 부풀립니다. 공개 가격은 분당 몇 센트인 경우가 많습니다. 인보이스에서 확인하세요.
© $0.08/분
-
하나의 Cloud Mac, 하나의 대기열로 시작하세요
단일 작성자에 대한 배포 인증서 및
일치를 유지하고 호스트 간 키체인 싸움이 없습니다. -
연중무휴 야간 배치를 위해 제작
무인 보관 및 매치 동기화가 매주 재설정되는 풀을 능가합니다.
1. 호스팅된 macOS 실행기를 전환해야 하는 경우
호스팅된 GitHub Actions macOS 실행기는 제로 작업이며 대기열 관리됩니다. 숨겨진 비용: 피크 분 청구서, 아티팩트 보존, 로그 조각에 대한 태평양 횡단 디버깅만 해당됩니다. 다음과 같은 경우 클라우드 Mac 빌드 머신에서 자체 호스팅 macOS 실행기를 고려하세요.
- 한 리포지토리는 콜드 파생 데이터가 벽 시간을 지배하면서 매월 최대 3,000분의 macOS 분을 초과합니다.
- ASC API, 웹훅 또는 기업 허용 목록을 위해서는 안정적인 호스트 이름/전용 IPv4가 필요합니다.
- 배포 인증서와
일치는 단일 작성자에 유지되어야 하며 공유 호스팅 풀 키체인은 절대 사용하지 마세요. - APAC 주간 약정은 공증 및 자체 호스팅 Runbook을 출시합니다.
2. 호스팅 시간과 클라우드 Mac 전용 시트
| 비교 | GitHub 호스팅 분당 · 제로 운영 | Cloud Mac 자체 호스팅 고정 좌석 · SSH 디버그 |
|---|---|---|
| 청구 | 분당 + 대기열 | 고정 월별 좌석 + 가벼운 작업 |
| 환경 | 이미지가 표류할 수 있음 | Xcode, Ruby, Fastlane을 고정 |
| 키체인 | 비밀 삽입; 제한된 잠금 해제 | 로그인 키체인 + 준비 실행 |
| 디스크 | 임시; 대용량 아카이브가 한도에 도달했습니다 | 파생 데이터의 경우 512GB–2TB |
| 디버그 | 대부분 로그 조각 | 동일한 호스트에서 SSH 및 재생 |
| 최적 | 가벼운 iOS 아티팩트, 산발적 빌드 | 주간 TestFlight, 병렬 구성표 |
봉투 뒷면: ~$0.08 ≈에 월 5,000분 macOS 분 $400/월 호스팅(비공개 저장소 승수 전). M4 24GB/512 클라우드 Mac 시트는 동일한 밴드에 있는 경우가 많으며 VNC 수용 및 Fastlane 업로드도 제공합니다. 이는 CI 전용 SaaS에 비해 클라우드 Mac 빌드 머신의 구조적 승리입니다.
3. 라벨, 동시성 및 단일 작성자 경계
동일한 키체인을 두고 싸우면서 컴파일, 서명 및 ASC 업로드를 하나의 작업에 혼합하지 마십시오. 2026년 안전한 분할:
- 레이블:
macos-m4-canada(지역),signing(일치만),build(24GB 이상인 경우 병렬 2). - 동시성: 서명 작업
동시성: 서명전역 1; 빌드 작업은 파생 데이터 격리를 통해 분기당 2번 실행될 수 있습니다. - 지역: 린트/단위용 APAC 러너; 캐나다
archive+exportArchive를 위한 cloud Mac 빌드 머신.
4. Cloud Mac에 실행자 등록(첫 번째 호스트)
GitHub → 설정 → 작업 → 주자들 → 새로운 자체 호스팅 실행자 → macOS. 클라우드 Mac에 SSH로 접속; 대화형 VNC 관리자와 별도로 전용 Unix 사용자 runner를 선호합니다.
mkdir -p ~/actions-runner && cd ~/actions-runner 컬 -o 액션-러너-osx-arm64.tar.gz -L \ https://github.com/actions/runner/releases/download/v2.319.1/actions-runner-osx-arm64-2.319.1.tar.gz tar xzf actions-runner-osx-arm64.tar.gz ./config.sh --url https://github.com/YOUR_ORG/YOUR_REPO \ --token YOUR_TOKEN --macos-m4-canada,arm64 라벨 --무인 sudo ./svc.sh 설치 && sudo ./svc.sh 시작 ./run.sh --check
sw_vers && xcodebuild -version을 실행하는 실행: [자체 호스팅, macos-m4-canada]를 사용한 Smoke 워크플로입니다. xcode-select를 통해 Xcode를 고정하고 README에 버전을 기록하세요.
5. 키체인, 성냥, 무인 잠금 해제
최고 자체 호스팅 오류: codedesign이 ID를 찾을 수 없습니다. 클라우드 Mac:
<올>codesign / 보안을 위한 ACL.동시성: 서명을 사용하여 일치 작업을 전용으로 지정합니다. 다른 작업은 프로비저닝 프로필만 읽습니다.security set-key-partition-list를 사용하고 노트북에는 복사하지 마세요.KEYCHAIN_PATH를 설정하세요.작업:
아카이브:
실행: [자체 호스팅, macos-m4-canada, 빌드]
단계:
- 용도: actions/checkout@v4
- 이름: 빌드 아카이브
실행: |
xcodebuild -scheme MyApp -구성 릴리스 \
-archivePath $RUNNER_TEMP/MyApp.xcarchive 아카이브
6. Cloud Mac Runner의 보안 강화
자체 호스팅 실행기는 저장소에서 임의의 코드를 실행합니다(잘못 구성된 경우 포크). 클라우드 Mac 빌드 머신을 취미용 VM이 아닌 프로덕션 서명 요새로 취급하세요.
- 저장소 범위: 명시적인 저장소 허용 목록이 있는 조직 수준 실행자를 선호합니다. 지점 보호를 신뢰하지 않는 한 포크 PR 워크플로를 비활성화하세요.
- 사용자 분리: 관리자가 아닌
runner로 서비스를 실행합니다. 해당 사용자의 VNC 로그인을 거부합니다. - 비밀: 필요한 검토자가 있는 GitHub 환경에 일치하는 비밀번호와 ASC API 키를 저장합니다. 분기별로 순환합니다.
- 네트워크: 아웃바운드 GitHub + Apple CDN을 허용합니다. 사무실 IP 또는 Tailscale의 SSH를 제외한 인바운드를 차단합니다.
- 디스크 암호화: 클라우드 Mac의 FileVault는 테이블 스테이크입니다. 스냅샷 내보내기는 볼트에 저장되어 암호화되지 않는 한
*.p12를 제외해야 합니다.
| 위험 | 클라우드 Mac의 완화 |
|---|---|
| 악성 포크 PR 워크플로 | 기고자 승인이 필요합니다. 공개 포크에서는 자체 호스팅이 불가능합니다 |
| 도난된 등록 토큰 | 단기 토큰; 메인트 기간 후 재등록 |
| 병렬 작업 디스크 소진 | 동시성 한도 + 디스크 워터마크(다음 섹션) |
| 유출된 파생 데이터 | 별도의 서명 라벨; RUNNER_TEMP 사후 작업 제거 |
7. Ops: 디스크 워터마크, Xcode 업그레이드, 러너 회전
| 레벨 | 디스크 사용 | 작업 |
|---|---|---|
| 녹색 | < 70% | 14일이 지난 파생 데이터 순환 |
| 노란색 | 70–85% | 병렬 2 삭제; 업로드된 아카이브 정리 |
| 빨간색 | > 85% | 새 아카이브를 차단합니다. VNC 확인 후 디스크 확장 |
Xcode 마이너 업그레이드: ./svc.sh stop, 업그레이드, smoke 워크플로, svc.sh start. 유지 관리 기간에 매월 범프 액션 러너 패키지; 롤백을 위해 이전 디렉토리를 유지하세요.
8. 조직 수준 실행자 및 저장소별 실행자
플랫폼 팀은 단일 저장소 등록 규모를 빠르게 초과합니다. GitHub Enterprise Cloud 및 GitHub 팀은 그룹 정책을 사용하여 조직에 실행자를 연결할 수 있습니다.
- 실행자 그룹은 환경에 매핑됩니다(예:
ios-release는서명레이블만 볼 수 있음). - 임시 실행기(라이센스가 있는 경우) 각 작업 후에 디스크를 지웁니다. 신뢰할 수 없는 빌드 작업에는 적합하지만 일치 캐시에는 좋지 않습니다. 서명 호스트를 일시적으로 차단하세요.
- 정책 팁: 저장소가 CODEOWNERS에서
실행: [자체 호스팅]을 설정할 수 있는 문서입니다. 악성 워크플로가 주요 유출 경로입니다.
두 제품 라인이 하나의 클라우드 Mac 빌드 시스템을 공유하는 경우 디스크 노란색 경고가 매주 실행될 때까지 두 번째 Mac을 구입하는 대신 레이블별로 분할합니다. 라인에 호환되지 않는 Xcode 버전이 필요한 경우 한 볼륨에 이중 xcode-select 해킹 대신 두 번째 시트를 추가하세요.
# .github/workflows/canada-archive.yml
에:
저장소_디스패치:
유형: [보관 준비]
직업:
아카이브:
실행: [자체 호스팅, macos-m4-canada, 빌드]
단계:
- 용도: actions/checkout@v4
와:
참조: ${{ github.event.client_payload.sha }}
- 실행: xcodebuild -scheme 앱 아카이브 -archivePath $RUNNER_TEMP/App.xcarchive
APAC Linux 실행자는 단위 테스트를 마친 후 커밋 SHA 및 아티팩트 URL과 함께 캐나다로 파견됩니다. 이 패턴은 북미의 Apple CDN 근처에서 보관 대기 시간을 유지하면서 Lint에 대해 macOS 분 비용을 지불하지 않도록 합니다.
9. 관찰 가능성: 작업이 실패할 때 기록할 내용
호스팅된 러너는 인프라를 숨깁니다. 자체 호스팅을 사용하면 신호를 소유하게 됩니다. 전체 Datadog 청구서 없이 실행 가능한 최소 관찰 가능성:
<올>~/actions-runner/_diag/Runner_*.log를 레드 빌드(rsync 또는 에이전트)의 로그 스택에 전달합니다.df -h / + ./run.sh --check > 10분.run-id로 워크플로에 주석을 달아 ASC 업로드 오류의 상관관계를 확인합니다.태평양 지역 팀은 GitHub API 지연 시간과 별도로 APAC 사무실에서 클라우드 Mac SSH로 RTT를 기록해야 합니다. 두 가지를 혼동하면 잘못된 확장 결정(더 많은 실행자 vs 더 나은 지역)이 발생하게 됩니다.
10. 첫 주 실행서 체크리스트
<올>실행 호스팅을 유지합니다.~/actions-runner/_diag 7일 유지14. FAQ
자체 호스팅 macOS 실행기가 허용되나요?
GitHub는 최고 수준의 자체 호스팅 지원을 문서화합니다. 당신은 패치와 비밀을 소유하고 있습니다. 신뢰할 수 없는 공유 호스트에 설치하지 마세요.
클라우드 Mac당 실행자는 몇 명입니까?
여러 폴더가 가능합니다. iOS 서명 및 디스크 I/O의 경우 실제 Mac당 하나의 대기열을 선호하고 작업 유형에 레이블을 사용합니다.
ARM64 러너와 x86 시뮬레이터 매트릭스?
Apple Silicon 기본 빌드가 기본값입니다. x86 시뮬레이터 그리드가 꼭 필요한 경우에만 Intel Cloud Mac 또는 호스팅 실행기를 추가하세요.
GitLab macOS 에이전트?
같은 패턴: macOS 호스트 + 에이전트를 수정했습니다. 이 문서는 GitHub Actions/워크플로 구문을 유지합니다.
비공개 저장소와 분당 가격이 있나요?
매월 최대 3,000분의 macOS 분을 초과하거나 고정 IP/키체인이 필요한 경우 2~3개월 이내에 전용 시트를 확보하는 경우가 많습니다.
러너 오프라인 알림?
GitHub 러너 API(Enterprise) 또는 cron ./run.sh --check를 외부 가동 시간 프로브와 함께 사용하세요.
Hashvps가 적합합니까?
예, 전용 IPv4, M4 베어메탈 및 다중 지역 캐나다/APAC 노드가 필요한 경우 결제하기 전에 지연 시간 가이드와 디스크 계층을 비교하세요.
자체 호스팅 실행기에서 파생 데이터를 캐시해야 하나요?
전용 클라우드 Mac에서는 예: /Users/runner/DerivedDataCache와 같은 안정적인 경로와 $(SWIFT_VERSION)-$(hash Package.resolved)를 통해 키 캐시를 마운트합니다. 종속성 충돌 시 무효화합니다. 호스팅된 러너는 이미 이 작업을 불투명하게 수행하고 있습니다. 자체 호스팅은 사용자의 책임이지만 증분 빌드에서 벽에 걸리는 시간을 30~50% 절약합니다.
병렬 iOS + watchOS 대상용 M4 Pro/32GB는 어떻습니까?
24GB의 병렬 xcodebuild는 서명이 직렬화된 상태로 유지되는 경우 두 개의 중형 앱에 작동합니다. 동일한 디스크에 두 번째 실행기 폴더를 추가하기 전에 RAM을 추가하세요. 메모리 부족은 명확한 경고가 아닌 시뮬레이터 플레이크 및 비밀스러운 clang OOM으로 나타납니다.
12. 호스팅된 macOS에서 3단계 마이그레이션 시간
빅뱅 컷오버로 출시 열차가 중단됩니다. 두 번의 스프린트에 걸쳐 단계적 마이그레이션을 사용하세요.
A단계(1주차): Cloud Mac Runner를 등록합니다. workflow_dispatch에서만 섀도우 워크플로를 실행합니다. 동일한 커밋에서 호스팅된 작업과 로그 및 타이밍을 비교합니다. 서명을 건드리지 마세요.
B단계(2주): 보관 작업을 실행: [자체 호스팅, 빌드]로 이동합니다. 키체인이 5일 연속 안정될 때까지 upload_to_testflight를 호스트 또는 수동으로 유지하세요.
C단계(3주 이상): 일치 + 서명 작업을 동시성 1이 포함된 서명 라벨로 이동합니다. 기본 분기에서 호스팅된 macOS를 비활성화합니다. 재해 복구를 위해 workflow_dispatch 뒤에 긴급 호스팅 작업 하나를 유지하세요.
개발자와 소통: 대화형 시뮬레이터는 APAC 노트북이나 VNC 클라우드 Mac에 유지됩니다. CI 레인은 데스크탑을 대체하지 않습니다. 그러한 기대 관리는 "CI가 느리기 때문에" 책상 위에 섀도우 IT Mac mini가 있는 것을 방지합니다.
롤백 트리거: 자체 호스팅 대기열 깊이가 2시간 동안 4개의 작업을 초과하거나 관련 없는 커밋에서 공동 설계가 두 번 실패하는 경우 SSH를 연결하는 동안 48시간 동안 호스팅된 archive를 다시 활성화합니다. 통화 중이 오전 2시에 Slack 기록을 수집하지 않도록 워크플로 README에 런북 링크를 유지하세요.
13. 12개월 TCO 워크시트(재무 부서에 복사)
재무팀에서는 적절한 수치를 요구할 것입니다. 이 테이블을 시작 템플릿으로 사용하세요. 조직의 분 계층과 Cloud Mac 견적을 연결하세요.
| 광고 항목 | 호스팅된 macOS(최대 5,000분/월) | 클라우드 Mac 시트 1개 |
|---|---|---|
| 컴퓨팅 | ~$400/월 가변 | ~$250–450/월 고정 |
| 운영 인력 | 거의 0 | ~4시간/월 패치 |
| 중단 위험 | GitHub 대기열 급증 | 런너 오프라인 = 릴리스 차단 |
| 서명 감사 | 고정 IP 증명이 더 어려움 | 전용 IPv4 + VNC 증거 |
| 손익분기 | macOS 분 > 3K와 매치는 안정적으로 유지되어야 합니다 | |
숨겨진 절감 효과 추가: “호스팅에서 작동하고 로컬에서 실패함” 후 재구축 횟수가 줄어듭니다. SSH가 실패한 xcodebuild 로그에서 하나의 명령으로 떨어져 있을 때 드리프트 및 더 빠른 사고 대응이 가능합니다.
재무팀에서는 마이그레이션 후에도 호스팅된 일부 시간에 대해 왜 여전히 비용을 지불하는지 물을 수 있습니다. 서명 호스트에서 원하지 않는 오픈 소스 미러, 포크의 긴급 PR 또는 Xcode 베타 카나리아를 위한 소규모 호스팅 풀을 유지하세요. 일반적으로 이전 지출의 5~10%이며 0이 아닙니다.
GitHub Actions를 실제 클라우드 Mac 빌드 시스템에 고정
자체 호스팅 macOS 실행기는 환경 주권을 구매합니다. M4 통합 메모리는 아카이브를 단축합니다. 기본 codesign 및 OpenSSH는 Fastlane/match를 GHA와 동일한 호스트에 유지합니다. ~4W 유휴 및 팬 없는 무음은 연중무휴 24시간 대기열에 적합합니다. Gatekeeper와 FileVault는 릴리스 게이트를 위해 매주 재설정되는 호스팅 풀보다 API 키와 인증서를 감사 가능한 송신으로 잠급니다.
분당 청구에서 릴리스 워크플로를 이동하시겠습니까? Mac 클라우드 요금제 비교 이번 주에 첫 번째 주자를 등록하세요.