macOS에서 호스팅된 러너

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

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

macOS에서 호스팅된 러너는 베타 상태이며, 오픈 소스 프로그램 및 Premium 및 Ultimate 요금제의 고객에게 제공됩니다.
macOS에서 호스팅된 러너의 일반 가용성epic 8267에서 제안됩니다.

macOS용 사용 가능한 머신 유형

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

러너 태그 vCPUS 메모리 저장소
saas-macos-medium-m1 4 8 GB 25 GB

지원되는 macOS 이미지

Linux에서 호스팅된 러너와 비교했을 때, 이곳에서 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"

iOS 프로젝트에 대한 코드 서명 with fastlane

Apple 서비스와 GitLab을 통합하거나, 장치에 설치하거나, Apple App Store에 배포하기 전에 애플리케이션에 대해 코드 서명해야 합니다.

macOS VM 이미지의 각 러너에는 모바일 앱 배포를 단순화하는 오픈 소스 솔루션인 fastlane가 포함되어 있습니다.

애플리케이션에 대한 코드 서명을 설정하는 방법에 대한 정보는 Mobile DevOps 문서에서 지침을 참조하십시오.

관련 주제:

Homebrew 최적화

기본적으로 Homebrew는 모든 작업 시작 시 업데이트를 확인합니다. Homebrew는 GitLab macOS 이미지 릴리스 주기보다 더 잦은 릴리스 주기가 있을 수 있습니다. 이러한 릴리스 주기 차이는 Homebrew가 업데이트를 하는 동안 brew를 호출하는 단계가 완료되는 데 추가 시간이 걸릴 수 있습니다.

원치 않는 Homebrew 업데이트로 인한 빌드 시간을 줄이기 위해 .gitlab-ci.yml 파일에서 HOMEBREW_NO_AUTO_UPDATE 변수를 설정하십시오:

variables:
  HOMEBREW_NO_AUTO_UPDATE: 1

Cocoapods 최적화

프로젝트에서 Cocoapods를 사용하는 경우 CI 성능을 개선하기 위한 다음 최적화를 고려해야 합니다.

Cocoapods CDN

전체 프로젝트 리포지토리를 클론하는 대신 CDN에서 패키지를 다운로드하기 위해 콘텐츠 전송 네트워크(CDN) 액세스를 사용할 수 있습니다. CDN 액세스는 Cocoapods 1.8 이상에서 사용 가능하며, macOS에서 모든 GitLab 호스팅 러너에서 지원됩니다.

CDN 액세스를 활성화하려면 Podfile이 다음으로 시작하는지 확인하십시오:

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

GitLab 캐싱 사용

Cocoapods 패키지에서 GitLab의 캐싱을 사용하여 pods가 변경될 때만 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 이미지에 작업에 필요한 특정 소프트웨어 버전이 포함되어 있지 않으면 필요한 소프트웨어를 가져와 설치해야 합니다. 이로 인해 작업 실행 시간이 증가합니다.
  • 자신의 OS 이미지를 가져오는 것은 불가능합니다.
  • 사용자 gitlab의 키체인은 공개적으로 이용할 수 없습니다. 대신 키체인을 만들어야 합니다.
  • macOS의 호스팅 러너는 헤드리스 모드에서 실행됩니다. testmanagerd와 같은 UI 상호작용이 필요한 모든 작업은 지원되지 않습니다.