macOS용 호스팅 러너
GitLab v19.5Offering: GitLab.com
요약
macOS용 호스팅 러너는 GitLab CI/CD와 완전히 통합된 온디맨드 macOS 환경을 제공합니다. macOS용 호스팅 러너는 베타 단계이며, 오픈소스 프로그램과 Premium 및 Ultimate 플랜 고객이 사용할 수 있습니다.
macOS용 호스팅 러너는 GitLab CI/CD와 완전히 통합된 온디맨드 macOS 환경을 제공합니다. 이 러너를 사용하여 Apple 생태계(macOS, iOS, watchOS, tvOS)용 앱을 빌드, 테스트, 배포할 수 있습니다. 모바일 DevOps 섹션에서는 iOS용 모바일 애플리케이션을 빌드하고 배포하는 기능, 문서, 가이드를 제공합니다.
macOS용 호스팅 러너는 베타 단계이며, 오픈소스 프로그램과 Premium 및 Ultimate 플랜 고객이 사용할 수 있습니다. macOS용 호스팅 러너의 정식 출시는 에픽 8267에서 제안되었습니다.
macOS용 호스팅 러너를 사용하기 전에 이에 영향을 미치는 알려진 문제 및 사용 제약 조건 목록을 검토합니다.
macOS에서 사용 가능한 머신 유형#
GitLab은 macOS용 호스팅 러너에 대해 다음 머신 유형을 제공합니다. x86-64 타깃용으로 빌드하려면 Rosetta 2를 사용하여 Intel x86-64 환경을 에뮬레이션할 수 있습니다.
| Runner Tag | vCPUS | Memory | Storage |
|---|---|---|---|
saas-macos-medium-m1 |
4 | 8 GB | 50 GB |
saas-macos-large-m2pro |
6 | 16 GB | 50 GB |
지원되는 macOS 이미지#
모든 Docker 이미지를 실행할 수 있는 Linux용 호스팅 러너와 달리, GitLab은 macOS용으로 정해진 VM 이미지 세트를 제공합니다.
다음 이미지 중 하나를 사용하여 빌드를 실행할 수 있으며, 이는 .gitlab-ci.yml
파일에서 지정합니다. 각 이미지는 특정 버전의 macOS와 Xcode를 실행합니다.
| VM image | Status | |
|---|---|---|
macos-15-xcode-16 |
GA |
사전 설치된 소프트웨어 |
macos-26-xcode-26 |
GA |
사전 설치된 소프트웨어 |
macos-27-xcode-27 |
beta |
사전 설치된 소프트웨어 |
이미지를 지정하지 않으면 macOS 러너는 macos-26-xcode-26을 사용합니다.
macOS 이미지 업데이트 정책#
사전 설치된 소프트웨어를 최신 상태로 유지하기 위해 이미지와 설치된 구성 요소는 각 GitLab 릴리스마다 업데이트됩니다. GitLab은 일반적으로 사전 설치된 소프트웨어의 여러 버전을 지원합니다. 자세한 내용은 사전 설치된 소프트웨어 전체 목록을 참조합니다.
macOS 및 Xcode의 주요 및 부 릴리스는 Apple 릴리스 이후 다음 마일스톤에서 제공됩니다.
새로운 주요 릴리스 이미지는 처음에는 베타로 제공되며, 첫 부 릴리스가 출시되면 정식 출시됩니다. 한 번에 두 개의 정식 출시 이미지만 지원되므로, 지원되는 이미지 수명 주기에 따라 가장 오래된 이미지는 지원 종료 상태가 되며 3개월 후 제거됩니다.
새로운 주요 릴리스가 정식 출시되면 모든 macOS 작업의 기본 이미지가 됩니다.
.gitlab-ci.yml 파일 예시#
다음 샘플 .gitlab-ci.yml 파일은 macOS용 호스팅 러너를 사용하기 시작하는 방법을 보여줍니다.
.macos_saas_runners:
tags:
- saas-macos-medium-m1
image: macos-26-xcode-26
before_script:
- echo "started by ${GITLAB_USER_NAME} / @${GITLAB_USER_LOGIN}"
build:
extends:
- .macos_saas_runners
stage: build
script:
- echo "running scripts in the build job"
test:
extends:
- .macos_saas_runners
stage: test
script:
- echo "running scripts in the test job"
fastlane으로 iOS 프로젝트 코드 서명하기#
Apple 서비스와 GitLab을 통합하거나, 기기에 설치하거나, Apple App Store에 배포하기 전에 애플리케이션을 코드 서명해야 합니다.
각 macOS용 러너 VM 이미지에는 모바일 앱 배포를 간소화하는 것을 목표로 하는 오픈소스 솔루션인 fastlane이 포함되어 있습니다.
애플리케이션의 코드 서명을 설정하는 방법에 대한 자세한 내용은 모바일 DevOps 문서의 안내를 참조합니다.
관련 주제:
- Apple Developer Support - Code Signing
- Code Signing Best Practice Guide
- fastlane authentication with Apple Services guide
Homebrew 최적화#
기본적으로 Homebrew는 모든 작업을 시작할 때 업데이트를 확인합니다. Homebrew의
릴리스 주기는 GitLab macOS 이미지의 릴리스 주기보다 더 빈번할 수 있습니다. 이러한
릴리스 주기 차이로 인해 brew를 호출하는 단계가 Homebrew의 업데이트가 진행되는 동안
완료하는 데 추가 시간이 걸릴 수 있습니다.
의도하지 않은 Homebrew 업데이트로 인한 빌드 시간을 줄이려면 .gitlab-ci.yml에서 HOMEBREW_NO_AUTO_UPDATE 변수를 설정합니다.
variables:
HOMEBREW_NO_AUTO_UPDATE: 1
CocoaPods 최적화#
프로젝트에서 CocoaPods를 사용하는 경우, CI 성능을 개선하기 위해 다음 최적화를 고려해야 합니다.
CDN 액세스 활성화#
전체 프로젝트 리포지터리를 클론하는 대신 콘텐츠 전송 네트워크(CDN) 액세스를 사용하여 CDN에서 패키지를 다운로드할 수 있습니다. CDN 액세스는 CocoaPods 1.8 이상에서 사용 가능하며 모든 GitLab macOS용 호스팅 러너에서 지원됩니다.
CDN 액세스를 활성화하려면 Podfile이 다음으로 시작하는지 확인합니다.
source 'https://cdn.cocoapods.org/'
GitLab 캐시 사용하기#
pod가 변경될 때만 pod install을 실행하도록 GitLab에서 CocoaPods 패키지에 캐시를 사용하면
빌드 성능을 개선할 수 있습니다.
프로젝트에 대해 캐시를 설정하려면 다음을 수행합니다.
-
.gitlab-ci.yml파일에cache설정을 추가합니다.cache: key: files: - Podfile.lock paths: - Pods -
프로젝트에
cocoapods-check플러그인을 추가합니다. -
pod install을 호출하기 전에 설치된 의존성을 확인하도록 작업 스크립트를 업데이트합니다.bundle exec pod check || bundle exec pod install
소스 관리에 pod 포함하기#
소스 관리에 pods 디렉터리를 포함할 수도 있습니다. 이렇게 하면 CI 작업의 일부로 pod를 설치할 필요가 없어지지만, 프로젝트 리포지터리의 전체 크기가 증가합니다.
알려진 문제 및 사용 제약 조건#
- VM 이미지에 작업에 필요한 특정 소프트웨어 버전이 포함되어 있지 않으면 필요한 소프트웨어를 가져와 설치해야 합니다. 이로 인해 작업 실행 시간이 늘어납니다.
- 자체 OS 이미지를 가져와 사용할 수 없습니다.
- 사용자
gitlab의 키체인은 공개적으로 사용할 수 없습니다. 대신 키체인을 직접 생성해야 합니다. - macOS용 호스팅 러너는 헤드리스 모드로 실행됩니다.
testmanagerd와 같이 UI 상호작용이 필요한 워크로드는 지원되지 않습니다. - Apple 실리콘 칩에는 효율 코어와 성능 코어가 있으므로 작업 실행 간에 작업 성능이 달라질 수 있습니다. 코어 할당이나 스케줄링을 제어할 수 없으므로 일관성이 떨어질 수 있습니다.
- macOS용 호스팅 러너에 사용되는 AWS 베어메탈 macOS 머신의 가용성은 제한되어 있습니다. 사용 가능한 머신이 없으면 작업의 대기 시간이 길어질 수 있습니다.
- macOS용 호스팅 러너 인스턴스는 요청에 응답하지 않는 경우가 있으며, 이 경우 작업이 최대 작업 지속 시간에 도달할 때까지 중단된 상태로 유지됩니다.
- macOS는 기본적으로 대소문자를 구분하지 않는 파일 시스템을 사용합니다. 이러한 동작으로 인해 대소문자만 다른 동일한 파일 경로가 있는 경우 예기치 않은 오류가 발생할 수 있습니다. 이러한 중복 경로는 Git 작업 트리나 브랜치 및 태그가 저장되는 Git 참조에 존재할 수 있습니다.