독자:이미 GitHub Actions 또는 GitLab을 싱가포르, 도쿄, 서울, 홍콩, 미 동부, 미 서부의 Apple Silicon 호스트에서 돌리고 있으며, 승인 부담이 큰 파이프라인이나 연동이 많은 큐를 위해 Jenkins 또는 Buildkite가 필요하지만 두 스케줄러가 동일 NVMe와 서명 컨텍스트를 동시에 포화시키고 싶지 않은 팀을 위한 글입니다.결과:UTC 교차 창, 기능 라벨, DerivedData 네임스페이스를 문서화한 계약과, 예측 가능한 릴리스 스파이크에만 일·주 단위 버스트 대여를 쓸지에 대한 기준입니다.구성:여섯 가지 함정 → 의사결정 표 두 개 → 붙여 넣기 스니펫 → 여섯 단계 Runbook → 세 가지 KPI → 마무리 지침입니다.셀프호스트 러너 라벨 및 교차 시간대 릴레이 CI와 함께 읽어 주십시오.
2026년 원격 Mac에는 대화형 작업, 야간 CI, 서명 허용 목록이 자주 섞입니다. GitHub Actions와 GitLab은 저장소 이벤트와 큐를 이미 깔끔히 연결합니다. Jenkins 컨트롤러나 Buildkite 큐를 추가하면 동일 실행 평면에 두 번째 제어 루프가 생깁니다. 시간으로 나누고 디스크 경로를 분리하지 않으면 중첩 상태가 됩니다. 컨트롤러 A는 호스트가 유휴라고 보는 동안 컨트롤러 B는 같은 사용자 아래에서 네 개의 동시 xcodebuild 잡을 돌립니다. 아래 여섯 가지는 「셀프호스트 신뢰」를 가장 빨리 깎아 내는 경로입니다.
mac이나 ios 같은 태그는 Xcode 마이너, 서명 요구, UI 세션 허용 여부를 담지 못해 Jenkins와 Actions가 같은 맥락으로 맹목 배치합니다.max-parallel은 다른 컨트롤러가 같은 macOS 계정에서 잡을 띄우는 것을 막지 못합니다.러너 라벨과 시크릿 격리가 아직 문서화되지 않았다면 두 번째 컨트롤러를 온보딩하기 전에 GitHub Actions와 GitLab 러너 체크리스트로 돌아가십시오. 본 글은 재현 가능 빌드 스냅샷 게시물과 짝을 이루며 동일 베이스라인 페이지에 컨트롤러별 DerivedData 접두사를 적습니다.
아키텍처 리뷰용입니다. 간격은 일반적인 공학적 트레이드오프이며 벤더 SLA가 아닙니다.
| 차원 | Jenkins(전형적 셀프호스트 제어 평면) | Buildkite(호스트형 제어 평면·셀프호스트 에이전트) | Actions·GitLab과의 공존 |
|---|---|---|---|
| 큐·승인 | 매개변수 릴리스용 플러그인이 성숙 | 파이프라인과 멀티 저장소 큐 가시성이 분명 | 기본 라벨 집합은 공유하지 않음. bk- 또는 jk- 접두 태그 사용 |
| 실행 결합 | 컨트롤러와 에이전트 버전을 맞추는 것은 운영 측 | 에이전트 업그레이드는 SaaS 릴리스와 독립적으로 움직일 수 있음 | 동시성을 올리기 전에 교차 창 안에서 에이전트를 업그레이드 |
| 운영 부담 | 높음(플러그인, 백업, 업그레이드) | 중간(에이전트·부트스트랩 시크릿) | 어떤 UTC 시각 이후 누가 macOS 잡을 예약할 수 있는지 문서화 — 구두 정책만 두지 말 것 |
참고:Buildkite는 큐 이름과 에이전트 태그로 친화성을 표현하고, Jenkins는 라벨과 노드 속성을 씁니다. 용어는 다르지만 목표는 같습니다. Xcode 메이저·마이너, 서명 필요성, UI 세션 정책을 인코딩해 스케줄러가 추측하지 않게 합니다.
전용 베어메탈, 건강한 NVMe, 장시간 LLM 게이트웨이 같은 무거운 사이드카가 없다고 가정합니다. 자체 컴파일 그래프로 조정하십시오. 수치는 계획용 앵커이지 벤치마크가 아닙니다.
| 하드웨어 | 전형적 비 UI 병렬 빌드 | 다중 Simulator·UI 테스트 포함 | 6지역 힌트 |
|---|---|---|---|
| Mac mini M4 | 무거운 컴파일은 보통 1~2개에 가벼운 작업이 더해짐 | 무거운 컴파일에서 UI 테스트를 시간 분할해 큐 깊이를 안정적으로 유지 | 주 Git 리전에 두어 좁은 교차 창 안에서 fetch 꼬리를 짧게 |
| M4 Pro | 모듈 그래프에 따라 보통 2~3개 병렬 빌드 | Simulator 워커를 더 둘 수 있으나 컨트롤러별 캐시 루트 분리 필요 | 리전이 갈릴 때 긴 아티팩트 업로드와 짧은 내부 루프 빌드를 대여 풀에서 나눔 |
mac-01 같은 즉흥 라벨을 금지합니다.~/DerivedData-gha와 ~/DerivedData-bk, -derivedDataPath를 명시합니다.m4-signing을 UTC 10:00~14:00에만」. 릴레이 CI의 비즈니스 시간대 표와 맞춥니다.burst를 큐에 붙이지 않습니다.# Buildkite 예: 큐 + 에이전트 태그(네임스페이스는 변경)
steps:
- label: "iOS build (교차 풀)"
agents:
queue: "mac-m4"
os: "darwin"
xcode: "16.2"
controller: "buildkite"
commands:
- xcodebuild -scheme App -destination 'generic/platform=iOS' -derivedDataPath "$BUILDKITE_BUILD_PATH/DerivedData-bk"
# Jenkins: 노드 라벨 + 파이프라인 환경의 DERIVED_DATA로 대칭
임계값은 경험적 가드레일이며 Apple이나 클라우드 SLA가 아닙니다. SRE 스택과 맞추어 중복·침묵 알림을 피하십시오.
제어 이론 관점에서 두 번째 컨트롤러는 또 하나의 피드백 루프입니다. NVMe와 서명 컨텍스트가 공유되면 정교한 제어 평면도 부하에서 결합합니다. 캐시의 논리·물리 격리가 에이전트 등록보다 중요합니다. 여섯 지역에서는 Git과 아티팩트 배치도 함께 설계하고, CPU만 나눠도 리전 간 대량 전송은 고쳐지지 않습니다.
이중 컨트롤러는 감사 가능성의 문턱을 높입니다. 교차 창, 라벨 사전, 시크릿 주입 순서가 검토 가능해야 합니다. 전용 테넌시나 대여 상한 없는 기회적 공유는 장애 대응 시 Jenkins와 Actions를 같은 대화형 사용자로 몰아 컴플라이언스와 분류 비용을 키웁니다.
개인 노트북과 비공식 공유 호스트는 안정적인 이그레스, 키체인 경계, 문서화된 교차 정책을 동시에 맞추기 어렵습니다. 조직이 APAC과 북미에서 컴파일 풀과 승인·서명 풀을 나눌 때, 거버넌스된 베어메탈 Mac 클라우드의 다지역 발자국과 예측 가능한 월간·분기 대여가 애드혹 조정보다 보통 낫습니다.MACCOME은 여섯 지역에서 Apple Silicon 베어메탈 노드와 유연한 스토리지 티어를 제공합니다. 동시성을 넓히기 전에 라벨로 에이전트 풀을 분리하는 데 활용하십시오. 공개 대여 요금을 검토한 뒤 아티팩트 경로에 맞는 지역 페이지를 고르십시오.
파일럿 패턴: 주 Git과 주 협업 리전 근처에서 호스트 두 대를 고르고 한 컨트롤러만 KPI와 함께 이 주를 돌린 뒤 두 번째 컨트롤러의 교차 창을 엽니다. 같은 릴리스 밤에 컨트롤러 변경과 용량 변경을 겹치지 마십시오.
FAQ
Jenkins와 GitHub Actions가 하나의 macOS 사용자를 공유할 수 있나요?
가능하지만 약한 목표 상태입니다. 계정과 DerivedData를 나누십시오. 노드·대여 베이스라인은 다지역 노드 가이드를 참고합니다.
비즈니스가 교차 창을 깼습니다. 어떻게 하나요?
KPI 사건으로 기록하고 라벨 대 용량을 검토합니다. 무제한 동시성 대신 승인 체인용 전용 M4 Pro 월간 풀에 예산을 넣으십시오. 도움말: 고객 센터.
에이전트 업그레이드와 Xcode 업그레이드를 같은 밤에 넣어야 하나요?
권장하지 않습니다. 같은 밤 변경은 깔끔한 이분 탐색을 막습니다. 여섯 단계 Runbook의 동결 순서를 따르고 러너 라벨 플레이북과 교차 검토하십시오.