VPSSpark 블로그
← 개발 일기로 돌아가기

2026년 단주기 버스트 빌드: GitLab CI 셀프 호스팅 macOS Runner를 클라우드 Mac에 붙일 때의 Shell Executor, 캐시 키와 태그 전략——GitHub Actions와 혼용할 때의 의사결정 매트릭스와 실행 가능한 파라미터 FAQ

서버 노트 · 2026.04.25 · 약 7분 소요

GitLab CI 셀프 호스팅 macOS Runner와 클라우드 Mac shell 빌드

단주기 버스트 빌드에서 가장 무서운 것은 둘입니다. 대기열이 짧은 릴리스 창을 밀어버리는 것, 그리고 캐시가 환경을 조용히 오염시키는 것입니다. GitLab Runner를 클라우드 Mac에 등록하고 shell 실행기를 쓰면, 이미 로컬에서 검증한 Xcode·Ruby/CocoaPods·서명 키체인을 그대로 재사용할 수 있어 Docker on Mac이나 SSH 래퍼를 한 겹 덜 쌓습니다. 대신 동일 사용자 홈 아래의 전역 상태는 태그와 캐시 키로 통제해야 합니다. 아래는 운영에서 자주 고치는 파라미터 위주이며, 저장소의 .gitlab-ci.yml에 붙여 바로 시험할 수 있습니다. 원격 캐시와 로컬 디스크 트레이드오프는 2026 단주기 클라우드 Mac CI: 원격 빌드 캐시(DerivedData/Pods/sccache)와 노드 로컬 디스크 비교—콜드 스타트·동기 대역폭·재사용 결정 매트릭스(실행 가능한 파라미터 목록)와 같이 읽으면 키 설계가 빨라집니다.

shell
실행기: 로컬에 가까운 빌드
files
캐시 키는 잠금 파일 지문
tags
burst / steady 분리

Shell Executor: 클라우드 Mac에 붙일 만한 때

잡이 주로 xcodebuild·Archive·notary 또는 키체인에 의존하는 스크립트라면, shell이 컨테이너 실행기보다 단순합니다. 경로·권한·(필요 시) GUI 세션이 사람이 로그인해 고치는 것과 같아서요. Runner용으로 별도 macOS 사용자나 최소한 독립 Home을 두고, 사람이 쓰는 데스크톱과 DerivedData를 나누세요. 동시성이 1보다 크면 디스크 IO와 codesign 락 경합으로 꼬리 지연이 커질 수 있습니다.

Runner 측 실행 파라미터(config.toml 요지)
클라우드 Mac의 gitlab-runnerconcurrent를 고정하고, shell executor에 environmentCI_DERIVED_DATA_PATH·FASTLANE_SKIP_UPDATE_CHECK 등을 주입하면 YAML은 단계만 말하고, 환경 차이는 Runner 설정에 모읍니다. 버스트로 노드를 늘릴 때는 Runner만 갈아끼우고 저장소는 그대로 둘 수 있습니다.

캐시 키: 빠름과 정확함 둘 다

cache:key:files에는 Gemfile.lock·Podfile.lock·컴파일에 관여하는 Package.resolved를 넣는 편이 안전합니다. Xcode 메이저 업 시에는 MACOS_CI_IMAGE_ID 같은 변수를 prefix에 붙여, 옛 DerivedData가 새 툴체인에 섞이지 않게 하세요. 정책은 pull-push가 메인·고빈도 브랜치에 잘 맞고, 릴리스나 nightly만 전체 push를 열면 오브젝트 스토리지 쓰기 폭주를 줄일 수 있습니다. GitHub Actions 쪽 탄력 풀과 상주 노드 선택은 2026년 단주기 피크 빌드: GitHub Actions 자체 호스팅 macOS Runner는 클라우드 Mac 탄력 풀과 상주 노드 중 무엇을 쓸까? 지연·캐시·대기열 결정 매트릭스(실행 가능한 파라미터 목록)와 짝을 이룹니다.

.gitlab-ci.yml 캐시 키(예시)
cache:
  key:
    files:
      - Gemfile.lock
      - Podfile.lock
      - YourApp.xcworkspace/xcshareddata/swiftpm/Package.resolved
    prefix: "${CI_COMMIT_REF_SLUG}-xcode${XCODE_VERSION}"
  paths:
    - .cocoapods/
    - ~/Library/Developer/Xcode/DerivedData/
  policy: pull-push

태그 전략: burst·steady·「클라우드 Mac만」

tagsmac-burst(탄력 클라우드, 짧은 타임아웃·선점 허용)와 mac-steady(고정 쿼터, 서명·스토어 업로드)를 나눕니다. 기본 파이프라인은 burst만 태우고, 키체인 잠금 해제나 사람이 지켜야 하는 단계는 steady 전용 잡으로 빼서 버스트가 핵심 경로를 밀지 않게 하세요.

태그 조합 전형 잡 타임아웃·재시도
mac-burst + shell 단위 테스트, 정적 분석, 무서명 Archive timeout: 25m, 네트워크류만 retry: 1
mac-steady + shell notary, TestFlight 업로드 긴 타임아웃, burst와 동시 슬롯 공유 금지
mac-m4(기종 태그, 선택) 대형 링크 피크 리소스 풀 매수·임대 정책과 연동

GitHub Actions와 혼용: 의사결정 매트릭스(요약)

흔한 이유는 공개는 GitHub, 사내 아티팩트·내부 의존성은 GitLab에 있다는 절입니다. 원칙은 「코드와 시크릿에 더 가까운 쪽이 무거운 잡을 집는다」입니다. GitHub에 이미 익숙한 macOS workflow가 있으면 Actions에 가벼운 검사만 두고, 내부 캐시나 GitLab Registry가 필요한 단계는 셀프 호스팅 Runner로 옮깁니다. 양쪽 모두 캐시를 켤 때는 버킷 prefix와 키를 분리해 이름 충돌을 막으세요.

시나리오 우선 GitLab(클라우드 Mac shell) 우선 GitHub Actions
주 저장소가 GitLab 예, 이미지·서브모듈 이중 pull 감소 커뮤니티 PR 빠른 검사만
GitHub Packages·OIDC 의존 id_tokens 또는 PAT로 내부 미러 후 무거운 작업 네이티브 연동이 단순
PR 폭주 burst Runner·큐 상한 larger runner 과금·쿼터 별도 평가
FAQ: 자주 바꾸는 세 가지
Q: 잡이 엉뚱한 Runner로 간다? 기본 tags가 비었는지, 태그 없는 Runner의 Run untagged가 꺼져 있는지 확인하세요. Q: 캐시 히트인데 전체 컴파일? Xcode 소버전이 바뀌었는데 키에 안 넣은 경우가 많습니다. xcodebuild -version을 artifact로 남겨 대조하세요. Q: Actions와 이중 실행? rules:changes나 경로 필터로 트리거 면을 줄이고, 「권위 있는 green」은 한쪽에만 묶으세요.
버스트 빌드 최소 잡 뼈대(stage만 바꿔 쓰기)
ios_burst:
  stage: build
  tags: [mac-burst, shell]
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
  variables:
    GIT_STRATEGY: fetch
    FASTLANE_OPT_OUT_USAGE: "1"
  script:
    - xcodebuild -version
    - bundle exec fastlane ci_unit

클라우드 Mac mini에서 이 흐름이 더 매끄럽습니다

셀프 호스팅 GitLab Runner가 안정하려면 YAML 트릭보다 밑단 하드웨어가 더 큽니다. Apple Silicon 통합 메모리는 Xcode 링크와 Swift 컴파일 피크를 한결 부드럽게 만들고, macOS에서는 Homebrew·키체인·codesign 체인이 한 번에 이어져 다른 OS를 흉내 내느라 쓰는 시간을 줄입니다. VPSSpark 클라우드 Mac mini M4는 대기 전력이 약 4W 수준이라 shell Runner를 장시간 켜 두기에도 부담이 적습니다. GatekeeperSIP가 겹치면 악성코드 표면이 일반 Windows 조립 PC에 같은 부하를 얹는 경우보다 훨씬 작습니다.

총소유비용 관점에서는 먼저 본체를 사지 않아도 됩니다. 프로젝트마다 burst 노드를 켜고, steady 잡은 태그로 격리하면 단주기 빌드의 대기열과 인증서 리스크를 한꺼번에 누를 수 있어, 이 글의 캐시 키·태그 전략과 같은 축에서 확장됩니다.

GitLab과 GitHub 혼합 파이프라인을 지켜 보기 쉽고 늘리기 쉬운 하드웨어에 올리고 싶다면, VPSSpark 클라우드 Mac mini M4는 지금 시점에 가성비 좋은 출발점입니다——플랜·요금 확인하기로 Runner 등록 이후에는 파이프라인에만 집중하세요.

한정 특가

클라우드 Mac에 Runner만 올리면 버스트 빌드가 덜 밀립니다

Apple Silicon 전용 · shell로 Xcode 직행 · 태그로 burst/steady 분리

홈으로
한정 혜택 플랜 확인하기