macOS에서 호스팅되는 러너

Tier: Premium, Ultimate Offering: GitLab.com Status: Beta

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

macOS에서 호스팅되는 러너는 Beta 상태이며, Premium 및 Ultimate 플랜의 오픈 소스 프로그램 및 고객을 대상으로 제공됩니다. macOS에서 호스팅되는 러너의 General availabilityepic 8267에서 제안되었습니다.

macOS용 사용 가능한 머신 유형

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

Runner Tag vCPUS Memory Storage
saas-macos-medium-m1 4 8 GB 25 GB

지원되는 macOS 이미지

Linux에서 호스팅되는 러너와는 달리 GitLab은 macOS용 VM 이미지 세트를 제공합니다.

.gitlab-ci.yml 파일에서 지정하는 macOS 및 Xcode의 특정 버전을 실행하는 다음 이미지 중 하나에서 빌드를 실행할 수 있습니다.

VM 이미지 상태  
macos-12-xcode-14 Deprecated (GitLab 16.10에서 제거 예정)
macos-13-xcode-14 GA 설치된 소프트웨어
macos-14-xcode-15 GA 설치된 소프트웨어

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

macOS 이미지 업데이트 정책

이미지와 설치된 컴포넌트는 각 GitLab 릴리스와 함께 업데이트되어, 미리 설치된 소프트웨어를 최신 상태로 유지합니다. GitLab은 일반적으로 미리 설치된 소프트웨어의 여러 버전을 지원합니다. 자세한 정보는 미리 설치된 소프트웨어 전체 디렉터리을 참조하십시오.

macOS와 Xcode의 주요 및 마이너 릴리스는 Apple의 릴리스 후 2주 이내에 제공됩니다.

새로운 주요 릴리스 이미지는 처음 마이너 릴리스가 출시되면 처음에 베타로 제공되고, 첫 번째 마이너 릴리스의 출시와 함께 일반적으로 사용 가능한 상태 (GA)가 됩니다. GA 이미지는 한 번에 두 개의 이미지만 지원하므로, 가장 오래된 이미지는 사용이 중단되며 지원 이미지 라이프사이클에 따라 3개월 후에 제거됩니다.

예제 .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}"

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 앱 스토어에 배포하기 전에 애플리케이션을 코드 서명해야 합니다.

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(Content Delivery Network) 액세스를 사용하여 전체 프로젝트 리포지터리를 클론할 필요 없이 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. 작업 스크립트를 업데이트하여 pod install을 호출하기 전에 설치된 의존성을 확인하도록 만들어주십시오:

     bundle exec pod check || bundle exec pod install
    

소스 컨트롤에 pods 포함

또한 소스 컨트롤에 pods 디렉터리를 포함하여 CI 작업의 일부로 pods를 설치하지 않도록 할 수 있습니다. 그러나 이로 인해 프로젝트 리포지터리의 전체 크기가 증가하게 됩니다.

알려진 문제 및 사용 제한

  • VM 이미지에 필요한 소프트웨어 버전이 포함되지 않은 경우 해당 소프트웨어를 가져와 설치해야 합니다. 이로 인해 작업 실행 시간이 늘어납니다.
  • 사용자 gitlab의 키체인은 공개적으로 사용할 수 없습니다. 대신에 키체인을 직접 생성해야 합니다.