트리별 빌드 루트 · 러너 경계 · 6단계 런북 · 의사결정 매트릭스
소규모 Mac 메시 풀에서 릴리스, 핫픽스, 장수명 기능을 동시에 운영하는 플랫폼 리드와 모바일 Tech Lead는 CI와 사람이 동일한 체크아웃을 경쟁하고, 브랜치 간에 DerivedData와 패키지 캐시를 공유하며, 워크트리 경로 없이 시트 잠금이 걸리는 세 가지 장애 클래스를 반복해서 처리합니다. 이 글은 감사 가능한 Git worktree 레이아웃, 트리별 빌드 및 캐시 루트, 트리 이름이 포함된 리스 필드를 사용해 병렬성을 검토 가능하게 만드는 결론을 제시합니다. 공유 빌드 풀 SSH와 러너, 시트 잠금과 TTL, 영향받는 빌드와 캐시 키, 골든 이미지 드리프트 체크리스트를 함께 참고하세요.
팀은 원격 Mac을 메시로 취급하면서도단일 작업 복사본호스트당. 핫픽스와 장기 기능을 출시한 후 동일한 결제를 두고 경쟁하세요. 아래의 5가지 패턴은 2026년 티켓에 지속적으로 나타납니다. README 및 실행기 문서에 작성하는 것이 추론할 수 없는 다른 머신을 추가하는 것보다 낫습니다.
경마git checkoutCI 대비:엔지니어는 분기를 전환하고 자체 호스팅 실행자는 동일한 경로에 설정된 다른 개체를 가져옵니다. 컴파일러는 절반만 작성된 모듈 맵을 읽습니다. 테스트에서 설비가 누락되었습니다. 사후 조사에서는 아무도 나무 경로를 기록하지 않았기 때문에 유령을 비난합니다.
공유 파생 데이터 및 패키지 캐시:병렬 분기는 여전히 하나의 물리적 루트에서 Xcode, SwiftPM 또는 CocoaPods 캐시를 가리킵니다. 하나의 공격적인 정리가 다른 분기 증분 상태를 삭제합니다.
작업 트리 ID가 없는 좌석 잠금 장치:뮤텍스 레코드에는 호스트 이름과 PID가 나열되지만 생략됩니다.worktree path그리고 짧다HEAD. 대기열 지표는 구체적인 트리에 조인할 수 없으므로 대기 중인 SSH 및 추측입니다.
대화형 세션과 겹치는 러너 기본 경로:무인xcodebuild아카이브 및 장치 프롬프트와 동일한 로그인 세션을 공유합니다. GUI 정지 및 헤드리스 작업이 야간 시간 초과로 증폭됩니다.
지역 간 가져오기 및 좌석 확보:캐시 생성을 고정하지 않고 원격으로 컴파일하는 메시 토폴로지는 좌석이 확보된 동안 종속성 재시도가 급증하여 에 설명된 병합 레인 부족 현상을 반영합니다.대기열 및 실행기 레이블 병합CPU가 유휴 상태로 보일 때에도 마찬가지입니다.
세금을 결과물에 매핑합니다.기계가 읽을 수 있는 작업 트리 목록, 트리별 파생 및 종속성 루트, 실행기 체크아웃 허용 목록, 잠금 튜플(호스트, 트리 경로, 임대 ID, 도구 체인 지문) 및 하나의 최소 클린 대 증분 재생산 쌍. 이러한 아티팩트가 없으면 공유 풀에서 병렬 분기를 약속하지 마십시오.
조직 관점 추가: 노드가 공동 인프라인 경우 검토에서는 변경 후에도 다음 엔지니어가 등록된 다른 트리에 계속 구축할 수 있는지 여부에 대해 답변해야 합니다. 변경 티켓에는 전역 정리 묵시 여부와 단일 트리 모드로의 롤백 여부에 관계없이 영향을 받는 경로가 필요합니다.
병렬성을 하나의 변경 가능한 기본 디렉터리를 공유하는 것과 동일시하지 마십시오. 디스크 압박 하에서도 평가git worktree전체 클론을 두 번째 지역에 복제하기 전에 개체 데이터베이스를 공유합니다. 그렇지 않으면 경합을 Git에서 rsync 및 tarball 캐시로만 이동합니다. 다음과 페어링아티팩트 팬아웃 및 rsync바이트가 컴파일 호스트를 떠날 때.
세금이 지정되면 팀은 다중 복제, 결제 중단 또는 작업 트리 채택 여부를 묻습니다. 다음 섹션에서는 한 페이지에서 디스크, 가져오기 비용, 운영 위험을 비교합니다.
보편적인 답은 없고, 딱 맞는 답이 있을 뿐이다.분기 병렬성, 디스크 예산 및 Git 활용 능력. 분기에 대한 행렬을 인쇄합니다. 에스컬레이션할 때 하나의 기본값과 문서를 선택하세요.
| 방법 | 맞을 때 | 위 | 위험 |
|---|---|---|---|
| 단일 디렉터리, 빈번한 체크아웃 | 솔로 노드, 시리얼 릴리스, CI 및 인간 중복 없음 | 가장 낮은 인지 부하; 가장 작은 디스크 | 주자와 인간과의 경쟁; 감사하기 어렵다 |
| 다중 전체 클론 | 낮은 병렬성, 충분한 디스크, 후크에 대한 하드 격리 필요 | 명확한 폭발 반경; 강력한 규정 준수 스토리 | 더 높은 가져오기 및 드리프트 유지 관리 |
| 객체 저장소를 공유하는 Git 작업 트리 | 2~6개의 활성 분기, 중간 디스크, 감사 가능한 병렬 처리 필요 | 공유됨.git/objects; 한 트리를 전환해도 다른 작업 트리가 파괴되지 않습니다. | 경로 및 정리 정책은 명시적이어야 합니다. 초보자는 피해를 입을 수 있습니다.git/worktrees메타데이터 |
병렬성 요구정확히 하나의 트리에 매핑된 모든 쓰기 가능한 빌드 아티팩트; 그렇지 않으면 빨간색 빌드는 행운에 기인합니다.
작업 트리를 선택하는 경우 트리를 다음과 같이 정의하세요.네 배로: 베어 또는 기본 저장소 경로, 트리별HEAD, 파생된 데이터 루트, 종속성 캐시 루트. 세 줄로 쓰지 못하면 끝이 아닙니다.
가장 저렴한 수표부터 먼저 확인하세요. 실패 시 로그를 중지하고 저장합니다. 호스트 별칭과 실행기 레이블을 다음과 같이 정렬합니다.공유 빌드 풀 SSH 및 실행기 오케스트레이션.
베어 저장소 위치 고정:하나의 기본 작업 복사본 또는 기본 작업 복사본을 개체 권한으로 선택합니다. 암묵적으로 금지하다git clone러너 스크립트의 목록에 없는 경로로.
모든 나무를 등록합니다:내보내다git worktree list --porcelain내부 저장소에 필드에는 경로, 분기, HEAD가 포함되어야 합니다.
파생 및 종속성 루트 바인딩:트리별로 설정OBJROOT, SYMROOT, DerivedData 또는 SwiftPM 캐시 디렉토리; 이름은 분기 슬러그와 짧은 해시를 인코딩해야 클린 스크립트가 이웃에 영향을 미치지 않습니다.
러너 체크아웃 격리:CI 작업 전용 작업 트리 또는 복제 루트를 지정합니다. 다음과 같은 모호한 기본값을 공유하지 마십시오.~/Projects/main대화형 세션을 통해
메타데이터에 임대를 삽입합니다.좌석 잠금 장치를 사용할 때 트리 경로, 도구 체인 지문 및 예상 기간을 기록합니다. 필드 일치좌석 잠금 장치 및 TTL매달린 자물쇠를 피하기 위해.
정리하고 회수하는 연습:무대 준비, 리허설git worktree remove고아 스캔을 수행하므로 대기 중인 작업에서 여전히 참조하는 디렉터리를 삭제하지 않습니다.
~/mesh/repos/acme.git # bare recommended ~/mesh/wt/acme-release-2a9f # worktree: release/* ~/mesh/wt/acme-hotfix-7c1e # worktree: hotfix/* ~/mesh/ci/acme-merge # dedicated runner root DerivedData example: ~/mesh/dd/acme--release--2a9f ~/mesh/dd/acme--hotfix--7c1e
메모:영향을 받는 모노레포 빌드가 이미 있는 경우 트리 경로를 캐시 키로 접습니다.영향을 받는 빌드 가이드따라서 그래프 승리는 디스크에서 취소되지 않습니다.
경로 및 잠금 필드에는 사실만 이름을 지정할 수 있습니다. 주관적인 Xcode 느낌을 피하십시오. 이미지 배치 및 스냅샷 롤백 언어의 경우 다음을 사용합니다.골든 이미지 드리프트 체크리스트.
xcodebuild clean트리별 증분 정리와 비교. 모든 전역 정리 목록은 영향을 받은 트리 및 작업 ID 범위를 나타냅니다.경고:하나의 유지 관리 창에서 주요 Xcode 범프를 굴리고, DerivedData 루트를 이동하고, 실행기에 태그를 다시 지정하지 마십시오. 삼각 측량 블록은 롤백을 이등분합니다.
병렬성을 체크박스로 바꾸세요. 하나라도 실패하면 직렬 릴리스로 돌아가거나 용량을 추가하십시오. 이 테이블을 대기열 정책과 병합합니다.좌석 뮤텍스 가이드.
| 대본 | 기본 | 엄격한 전제 조건 | 실패 신호 |
|---|---|---|---|
| 소규모 팀, 낮은 병렬성, 중복 없음 | 단일 디렉토리와 달력 | 전용 노드 또는 명시적 예약 | 핫픽스 주 동안 신비한 빨간색 |
| 소규모 팀, 중간 병렬성, 중복 | 2~4개의 작업 트리와 격리된 러너 루트 | 트리별 파생 루트; 잠금에는 트리 경로가 포함됩니다. | 클린 스크립트는 이웃 아티팩트를 삭제합니다. |
| 플랫폼 팀, 높은 병렬성, 다중 영역 메시 | 전용 CI 팬아웃과 휴먼 파티션 | 라벨 라우팅, 시트 캡, 캐시 생성 정렬 | CPU가 유휴 상태인 동안 대기열 깊이가 증가합니다. |
하나의 엔지니어 정신 지도에 의존하면 사람들이 교체될 때 위험이 중앙 집중화됩니다. Mac Mesh가 민속이 아닌 인프라가 되도록 작업 트리 목록과 경로 테이블을 확인하세요.
일반적인 실수:모든 레드 빌드에서 글로벌 클린을 달성합니다. 먼저 공유된 DerivedData 루트나 아직 자리가 남아 있는 반쯤 완료된 작업을 확인하세요.
티켓이 없는 임시 디렉터리는 어느 트리가 언제 어느 디스크를 소유했는지 묻는 감사에서 살아남는 경우가 거의 없습니다. 병렬 분기가 필요한 경우전용 노드, 예측 가능한 지역 및 계약 친화적인 SLA, 개인용 노트북 및 비공식 공유 호스트는 부족합니다. iOS CI, 핸드오프 및 좌석 격리의 경우클라우드 문서화할 수 있는 Mac Mini 용량, 일반적으로 VpsMesh Mac Mini 클라우드 대여가 더 적합합니다.: 지역 및 사양별로 풀을 확장하고 경로, 잠금 및 실행자 전반에 걸쳐 하나의 운영 언어를 사용합니다. 보다가격, 도움말 센터, 그리고주문하다추가 CI 전용 노드가 필요한 경우.
일반적으로 단일 DerivedData 루트, 단일 CocoaPods 또는 SwiftPM 캐시 및 대화형 세션과 겹치는 실행기 체크아웃입니다. 각 트리에 분기 슬러그가 있는 예측 가능한 하위 경로를 제공하고 필드를 정렬합니다.좌석 잠금 메타데이터.
공유 객체를 통한 디스크 및 가져오기 시간 더 엄격한 경로 위생과 더 높은 Git 활용 능력으로 비용을 지불합니다. 출시 전에 결정표를 검토하세요. 와 짝을 이루다공유 풀 SSH 가이드러너 토폴로지의 경우.
대기열 및 실행기 레이블 병합트렁크 병합 기아 문제를 해결합니다. 이 문서에서는 단일 호스트 작업 트리 격리 및 캐시 생성에 대해 설명합니다. 동일한 변경 티켓에 두 가지를 모두 연결합니다.