호스팅된 macOS 러너

Tier: 프리미엄, 얼티메이트 Offering: GitLab.com Status: Beta

호스팅된 macOS 러너는 GitLab CI/CD와 완전히 통합된 온디맨드 macOS 환경을 제공합니다. 이러한 러너를 사용하여 Apple 생태계 (macOS, iOS, watchOS, tvOS)용 앱을 빌드, 테스트 및 배포할 수 있습니다. Mobile DevOps 섹션에서 iOS용 모바일 애플리케이션을 빌드하고 배포하는 기능, 문서 및 지침을 제공합니다.

macOS에서 호스팅된 러너는 베타 상태이며 오픈 소스 프로그램 및 프리미엄 및 얼티메이트 플랜을 가입한 고객을 대상으로 제공됩니다. 호스팅된 macOS 러너의 일반 공개에픽 8267에서 제안됩니다.

macOS용 사용 가능한 머신 유형

GitLab은 macOS용 호스팅된 러너를 위해 다음과 같은 머신 유형을 제공합니다. x86-64 타깃을 빌드하기 위해서는 Rosetta 2를 사용하여 Intel x86-64 환경을 에뮬레이트할 수 있습니다.

러너 태그 vCPU 메모리 스토리지
saas-macos-medium-m1 4 8 GB 25 GB

지원되는 macOS 이미지

Linux에서 호스팅된 러너와 달리 macOS를 위해 Docker 이미지를 실행할 수 있는 환경이 제공되지 않습니다. 대신 GitLab은 macOS용 VM 이미지 세트를 제공합니다.

다음 이미지 중 하나에서 빌드를 실행할 수 있으며, 해당 이미지는 .gitlab-ci.yml 파일에서 지정합니다. 각 이미지는 특정 버전의 macOS와 Xcode를 실행합니다.

VM 이미지 상태  
macos-13-xcode-14 GA 사전 설치된 소프트웨어
macos-14-xcode-15 GA 사전 설치된 소프트웨어

이미지를 지정하지 않은 경우 macOS 러너는 macos-14-xcode-15를 사용합니다.

macOS 이미지 업데이트 정책

이미지와 설치된 구성요소는 GitLab 릴리스마다 업데이트되어 사전 설치된 소프트웨어를 최신 상태로 유지합니다. GitLab은 일반적으로 사전 설치된 소프트웨어의 여러 버전을 지원합니다. 자세한 정보는 사전 설치된 소프트웨어의 전체 목록을 참조하시기 바랍니다.

macOS 및 Xcode의 주요 및 마이너 릴리스는 Apple의 릴리스 후 2주 이내에 사용할 수 있습니다.

새로운 주요 릴리스 이미지는 초기에 베타로 제공되며, 첫 번째 마이너 릴리스가 출시될 때 일반적으로 사용 가능 상태(GA)로 전환됩니다. 가장 오래된 이미지는 두 개의 GA 이미지만 지원되므로, 가장 오래된 이미지는 지원 중단되며 지원되는 이미지 수명주기에 따라 3개월 후에 제거됩니다.

새로운 주요 릴리스가 GA 상태가 되면 해당 이미지는 모든 macOS 작업의 기본 이미지로 설정됩니다.

예시 .gitlab-ci.yml 파일

다음 예시 .gitlab-ci.yml 파일은 macOS 호스팅 러너를 사용하는 방법을 보여줍니다:

.macos_saas_runners:
  tags:
    - saas-macos-medium-m1
  image: macos-14-xcode-15
  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 프로젝트 코드 서명

GitLab을 Apple 서비스와 통합하거나 장치에 설치하거나 애플 앱 스토어에 배포하기 전에 응용 프로그램을 코드 서명해야 합니다.

각 macOS VM 이미지에는 fastlane이 포함되어 있으며, 모바일 애플리케이션 배포를 간소화하는 오픈 소스 솔루션입니다.

애플리케이션에 코드 서명 설정에 대한 자세한 정보는 Mobile DevOps 문서의 지침을 참조하세요.

관련 주제:

Homebrew 최적화

기본적으로 Homebrew는 모든 작업 시작 시 업데이트를 확인합니다. Homebrew의 릴리스 주기는 GitLab macOS 이미지 릴리스 주기보다 더 자주 발생할 수 있습니다. 릴리스 주기의 차이로 인해 brew를 호출하는 단계가 업데이트를 진행하는 동안 추가 시간이 걸릴 수 있습니다.

의도하지 않은 Homebrew 업데이트로 인한 빌드 시간을 줄이려면 .gitlab-ci.yml에서 HOMEBREW_NO_AUTO_UPDATE 변수를 설정하세요:

variables:
  HOMEBREW_NO_AUTO_UPDATE: 1

CocoaPods 최적화

프로젝트에서 CocoaPods를 사용하는 경우 CI 성능을 향상시키기 위해 다음 최적화를 고려해야 합니다.

CocoaPods CDN

전체 프로젝트 리포지토리를 복제할 필요 없이 CDN(콘텐츠 전달 네트워크) 액세스를 사용하여 패키지를 다운로드할 수 있습니다. CDN 액세스는 CocoaPods 1.8 이상에서 사용할 수 있으며, GitLab 호스팅된 macOS에서 모두 지원됩니다.

CDN 액세스를 활성화하려면 Podfile이 다음과 같이 시작되도록 하세요:

source 'https://cdn.cocoapods.org/'

GitLab 캐싱 사용

프로젝트의 CocoaPods 패키지에 캐싱을 사용하여 pod install을 실행해야 하는 경우에만 빌드할 수 있습니다.

프로젝트에 캐싱을 구성하려면:

  1. .gitlab-ci.yml 파일에 cache 구성을 추가하세요:

    cache:
      key:
        files:
         - Podfile.lock
    paths:
      - Pods
    
  2. 프로젝트에 cocoapods-check 플러그인을 추가하세요.
  3. Job 스크립트를 업데이트하여 pod install을 호출하기 전에 설치된 종속성을 확인하도록 합니다:

    bundle exec pod check || bundle exec pod install
    

소스 컨트롤에 팟 포함

CocoaPods 디렉토리를 소스 컨트롤에 포함하여 CI 작업의 일부로 팟을 설치할 필요가 없습니다. 그러나 프로젝트 리포지토리의 전체 크기가 증가하게 됩니다.

알려진 문제 및 사용 제한 사항

  • VM 이미지에 작업에 필요한 특정 소프트웨어 버전이 포함되어 있지 않으면, 필요한 소프트웨어를 가져와 설치해야 합니다. 이로 인해 작업 실행 시간이 증가됩니다.
  • 사용자 고유의 OS 이미지를 가져올 수 없습니다.
  • 사용자 gitlab의 키체인은 공개적으로 사용할 수 없습니다. 대신 키체인을 생성해야 합니다.
  • macOS에서 호스팅된 러너는 무모드(headless mode)에서 실행됩니다. testmanagerd와 같은 UI 상호작용이 필요한 작업은 지원되지 않습니다.