2026년 기업 Mac CI에서 병렬 codesign, 키체인·프로비저닝 프로파일 격리

한 풀에서 여러 잡이 동시에 codesign하면 키체인 경합, UUID가 겹친 프로비저닝 프로파일, 공유 DerivedData 접두사가 흔한 원인입니다. 설계 핵심은 신뢰 상태를 잡 경계로 나누는 것입니다. 키체인·프로파일·워크스페이스와 롤아웃·FAQ를 정리했습니다. 디스크·캐시 레이스는 다중 Mac 자체 호스팅 Runner·Actions Cache·영구 디스크 FAQ와 함께 보고, 러너를 여러 대로 나누는 오케스트레이션은 OpenClaw·GitHub Actions 다중 러너 실전을 참고하세요.

1. 막으려는 실패 패턴

중복 키체인 임포트, UUID 충돌 프로파일, 단일 HOME 가정, 임시 파일 경쟁이 대표적이며 GUI 대기는 큐를 멈춥니다. 잡마다 비밀·가변 트리를 분할하고 무인이면 UI 프롬프트를 끄며, 레인마다 키가 남지 않게 삭제하세요.

경험칙: 두 잡이 같은 키체인 파일이나 같은 프로파일 파일명을 만질 수 있다면, 부하가 실제로 걸리는 순간에는 반드시 만집니다.

2. 키체인: 공유 로그인 vs 잡별 키체인

공유 로그인 키체인은 동시성이 낮을 때까지는 통하지만, 병렬이 높아지면 잠금·배타에 자주 걸립니다. RUN_ID별 키체인 파일을 잡 동안만 열고 finally에서 지우면 신원·감사 경계가 잡에 맞춰집니다. 중간안은 서비스 계정당 키체인 하나와 낮은 병렬입니다. GUI 디버깅 호스트와 무인 CI는 분리하세요.

3. 프로비저닝 프로파일: 경로와 충돌

프로파일은 UUID 파일이라 중복이면 codesign이 간헐 실패합니다. 워크스페이스 로컬 설치와 명시 지정을 선호하고, 전역 폴더는 잡별 복사본으로만 쓰세요.

4. 서명 너머의 워크스페이스 격리

DerivedData·SPM/Pods 캐시·낫터 스테이징을 /Volumes/builds/<job> 루트와 TMPDIR로 묶고, 잡 후 스크럽하세요. 워밍 캐시는 Xcode 버전 키로 분리합니다.

5. FAQ: 패턴을 한눈에

Q: 하나의 Apple ID 키체인을 여러 저장소가? 결합도가 큽니다. 파일 주입 후 잡별 키체인으로 임포트하세요.

Q: VM vs 상시 Mac mini? VM은 초기화가 깔끔하고 미니는 증분에 유리합니다. 등급이 다르면 키체인을 호스트 간 재사용하지 마세요.

Q: Match 복호화? 잡 워크스페이스와 일회 키체인만 씁니다.

6. 보안 검토를 통과하는 롤아웃 순서

  1. 인증서·프로파일·Fastlane 경로를 목록화합니다.
  2. 잡별 키체인을 카나리아로 도입합니다.
  3. 프로파일을 워크스페이스 로컬로 옮기고 중복 UUID는 CI 실패로 막습니다.
  4. 잡마다 OBJROOT/SYMROOT/DSTROOT를 고유화합니다.
  5. 폐기·drain 순서를 런북에 적습니다.

7. 동시성을 올리기 전 운영 체크리스트

  • 각 잡이 결정적인 경로에 자체 키체인 파일을 만들고 삭제하는가?
  • 프로비저닝 프로파일이 버전 고정되어 병렬 UUID 충돌 없이 설치되는가?
  • HOME 또는 서명 관련 환경 변수가 잡 단위로 스코프되는가?
  • 중간 실패 시에도 디스크에서 개인 키가 남지 않는가?
  • 같은 러너 클래스에서 동시에 두 개의 아카이브를 검증했는가?

서명 부하가 큰 풀에 Mac mini·macOS가 남는 이유

서명 스택은 지원 Mac 하드웨어 전제가 분명합니다. Mac mini급 Apple Silicon은 통합 메모리와 낮은 유휴 전력(예: M4급 약 4W)으로 워밍 풀에 적합하고, Gatekeeper·SIP·FileVault는 무인 호스트 설명을 단순화합니다.

격리 규칙을 Mac mini M4 단독 노드에 표준화해 가로 확장하면 세션 과밀을 줄이기 쉽습니다. 본문과 같은 서명·빌드 흐름을 가장 매끄럽게 돌리려면 Mac mini M4가 여전히 현실적인 출발점입니다. 리전·모델은 Macstripe 홈에서 비교한 뒤 지금 구성을 맞춰 보세요.