이천이십육 공유 원격 Mac 결정 매트릭스: Fastlane Match 동시 pull·키체인 분할·Codesign 큐 타임아웃
2026.05.19
Meshmac Team
10분 읽기
이에서 팔인 iOS 엔지니어가 한 대의 공유 원격 Mac에서 Fastlane Match git pull이 겹치고, 배포 인증서가 잘못된 login 키체인에 들어가며, Codesign 큐가 타임아웃 없이 멈출 때 시간이 새어 나갑니다. 본문은 결정 매트릭스·flock·큐 파라미터 표·다섯 단계·FAQ로 Match·서명·감사를 런북에 붙일 수 있게 정리합니다.
풀드 Mac에서 Match가 깨지는 세 가지
- 첫째 두 레인이
match development를 동시에 push해 암호화 git 저장소가 깨집니다 - 둘째 배포 인증서가 GUI
login.keychain에 들어가 SSH 잡과 섞입니다 - 셋째 Codesign이
flock대기 없이 멈추고 락 보유자가 로그에 없습니다
결정 매트릭스: 레인 레이아웃 vs 영향 범위
MeshMac M4 풀에서 이에서 팔인 시트는 기본으로 레인 키체인·직렬 쓰기를 선택합니다
| 패턴 | Match + 레인 키체인 | 공유 login만 |
|---|---|---|
| 동시 pull | shallow fetch + 읽기 락, 쓰기 직렬 | push 경쟁·인증서 유실 |
| Codesign 큐 | 호스트당 archive 1, CI 레인 대기 | 병렬 archive가 USB 인증 경쟁 |
| 프로덕션 | 권장 | 랩 전용 |
Match git 동시성과 shallow 클론 전략
인증서 저장소는 프로덕션 데이터입니다. 읽기는 겹쳐도 되고, 쓰기는 한 번에 하나만 허용합니다.
- Shallow
git clone --depth 1·git fetch --depth 1후 Match - 읽기 병렬 쓰기 락 없을 때 development fetch 병렬 허용
- 쓰기 직렬 development·appstore·nuke는
match-repo.lock하나로 감쌉니다
MATCH_GIT_URL=git@github.com:org/certificates.git export GIT_SSH_COMMAND="ssh -o ControlMaster=auto -o ControlPath=/tmp/ssh-%r@%h:%p" flock -w 180 /var/run/meshmac/match-repo.lock \ fastlane match development --readonly false
login 키체인 분할(헤드리스 서명)
SSH 사용자 격리는 서명 파티션을 대체하지 않습니다. archive 단계는 Xcode Codesign 큐 매트릭스와 맞추세요.
- 레인 파일
/srv/keychains/team-a-ci.keychain-db앱·테넌트별 - Unlock Codesign 래퍼 안에서만
security unlock-keychain - 환경
MATCH_KEYCHAIN_NAME·비밀번호는 레인 env, 공유 login 금지
security list-keychains -s "$LANE_KEYCHAIN" login.keychain-db security set-keychain-settings -lut 21600 "$LANE_KEYCHAIN" security find-identity -v -p codesigning "$LANE_KEYCHAIN"
빌드 락·flock 대기·Codesign 큐 타임아웃
아래 기본값을 런북에 붙인 뒤 실제 빌드의 lock-wait 백분위로 조정하세요
| 리소스 | flock / 큐 | 잡 타임아웃 |
|---|---|---|
| Match git 쓰기 | flock -w 180 | 레인 15분 상한 |
| Codesign archive | flock -w 600 | 45~90분 |
| DerivedData | flock -w 60 | 35~60분 통합 |
| 대기 깊이 | 레인당 최대 12잡 | 디스크 15% 미만 fail-fast |
실패 재시도·감사 필드·운영 신호
- 재시도 git fetch 일시 오류 최대 2회, 키체인 unlock 실패는 0회
- 감사 JSON
lane·match_git_sha·keychain_path·lock_wait_ms - 알림 archive 연속 3회 lock-wait p95 > 120초면 당번 호출
MeshMac 다섯 단계 롤아웃
- 하나 archive 배수·공유 호스트
match nuke차단 - 둘
MATCH_GIT_BRANCH고정·/var/run/meshmac/락 설치 - 셋 레인 keychain 생성·레인당 배포 인증서 1회 import
- 넷 archive를
codesign.queueflock으로 감싸고 표의 타임아웃 적용 - 다섯 JSON 감사를 채팅 웹훅으로 보내고 unlock 실패 드릴 1회
설계 리뷰에 붙일 인용 수치
- Shallow 병렬 읽기 M4 풀에서 Match 콜드스타트 git 시간을 줄이고 쓰기 경쟁은 넓히지 않습니다
- 레인 키체인 배포 인증서를 권한 FAQ의 GUI login 세션 밖에 둡니다
- flock -w 600 두 레인이 한 빌더를 쓸 때 archive 45~90분 기준 합리적 기본값입니다
FAQ
- 두 명이 동시에 match development?
- shallow fetch·읽기 락·쓰기 flock 직렬화일 때만. nuke·비밀번호 회전은 병렬 금지.
- CI가 login.keychain을 풀까?
- 아니요. 레인 keychain-db를 Codesign 래퍼 안에서만 unlock. VNC GUI는 SSH 대 VNC대로 별도 계정.
- 두 번째 MeshMac 노드는 언제?
- 튜닝 후 lock-wait p95가 2분을 넘거나 archive를 동시에 2개 돌려야 할 때. flock만 늘리지 말고 레인을 노드로 분리.
요약: Match 쓰기 직렬화·키체인 분할
MeshMac 다중 노드는 큐가 포화될 때 레인마다 Apple Silicon을 나눕니다. 공개 요금·로드밸런스·페일오버·홈에서 노드를 예약한 뒤 Match 마이그레이션을 진행하세요.