이번 포스팅에서는 코딩 컨벤션 체크에서부터, 단위 테스트, 코드 사이닝, iOS 앱 빌드, TestFlight에 앱을 배포한 것에 이르는 일련의 과정을 자동화하는 GitLab CI/CD 파이프라인을 구성하는 방법에 대해 알아보겠습니다.
“GitLab과 Fastlane으로 iOS 앱 빌드 및 배포 자동화하기” 시리즈의 지난 두 개의 포스팅에서 다루었던 macOS Runner와 Fastlane으로 구성했던 각 Lane을 활용하여 GitLab CI/CD 파이프라인을 구성하고 실행합니다.
이번 글에서 설명하는 내용을 이해하기 위해서는 AWS EC2 Mac 인스턴스에 GitLab Runner 설치하기와 iOS 앱 배포 자동화를 위한 Fastlane 설치 및 구성을 먼저 읽어 보는 것이 좋습니다.
macOS Runner 확인
GitLab CI/CD 파이프라인을 구성하고 실행하기 전에, 프로젝트에서 사용할 수 있는 하나 이상의 Runner가 등록되어 있는지 확인해야 합니다. GitLab에서 Runner는 CI/CD Job을 실행하는 에이전트입니다.
iOS 앱을 빌드하고 배포하기 위해서는 macOS Runner가 필요합니다.
macOS Runner에 Xcode도 설치되어 있어야 합니다.
아래와 같이 수행하면 프로젝트에서 사용할 수 있는 macOS Runner가 있는지 확인할 수 있습니다.
- GitLab 프로젝트의 왼쪽 사이드 바에서 Settings > CI/CD 선택
- Runners 섹션에서 Expand 버튼 클릭
- Specific runners, Group runners 또는 Shared runners 영역의 사용 가능한 러너 목록에 macOS Runner가 있는지 확인
아래 이미지처럼 Runner 번호 옆에 녹색 원 아이콘이 있으면 사용 가능 상태이고, Runner를 등록할 때 지정한 태그 ios 또는 monterey를 포함하면 macOS Runner입니다.

사용 가능한 macOS Runner가 없으면, AWS EC2 Mac 인스턴스에 GitLab Runner 설치하기를 참고하여 macOS Runner를 설치하고 등록합니다.
참고로 GitLab에는 액세스 가능한 범위에 따라 세 가지 유형의 Runner가 있으며, 이 중에 하나 이상의 사용 가능한 macOS Runner가 있으면 됩니다.
- 공유 러너(Shared runners)는 GitLab 인스턴스의 모든 그룹 및 프로젝트에서 사용할 수 있습니다. (Admin Area의 Overview > Runners)
- 그룹 러너(Group runners)는 그룹의 모든 프로젝트와 하위 그룹에서 사용할 수 있습니다. (그룹의 Settings > CI/CD > Runners 섹션)
- 특정 러너(Specific runners)는 특정 프로젝트와 연결됩니다. 일반적으로 특정 러너는 한 번에 하나의 프로젝트에 사용됩니다. (프로젝트의 Settings > CI/CD > Runners 섹션)
.gitlab-ci.yml 파일 생성
.gitlab-ci.yml 파일은 GitLab CI/CD에 대한 특정 지침을 구성하는 YAML 파일입니다.
이 파일에서 러너가 실행해야 하는 작업(Job)의 구조와 순서, 특정 조건이 발생할 때 러너가 내려야 하는 결정 등을 정의합니다.
iOS 앱을 빌드 및 배포 자동화하는 GitLab CI/CD 파이프라인을 구성하기 위해 .gitlab-ci.yml 파일을 생성하고, 첫 번째로 lint Job을 정의합니다. fastlane/Fastfile 파일에 Swift 스타일 및 코딩 컨벤션을 체크하는 Lint Lane 이 정의되어 있습니다. lint Job은 이 Lint Lane을 실행합니다.
-
GitLab 프로젝트 페이지에서 Web IDE 버튼을 클릭합니다.
-
왼쪽 사이드 바에서 New file 아이콘을 클릭합니다.
-
Create new file 모달 창에서
.gitlab-ci.yml을 클릭합니다. -
Choose a template…을 클릭한 후, Search 입력란에ios을 입력하고 iOS-Fastlane을 선택합니다. -
아래와 같이 수정하고 Create commit… 버튼을 클릭합니다.
stages:
- lint
variables:
LC_ALL: 'ko_KR.UTF-8'
LANG: 'ko_KR.UTF-8'
GIT_STRATEGY: clone
cache:
key:
files:
- Gemfile.lock
- Podfile.lock
paths:
- .bundle
- Pods
- vendor/bundle
lint:
stage: lint
before_script:
- bundle install --path vendor/bundle
- bundle exec fastlane pod_install
script:
- bundle exec fastlane lint
tags:
- ios -
Commit to main branch을 선택하고, Commit Message에Add lint job을 입력한 후, Commit 버튼을 클릭합니다. -
프로젝트 아이콘(Go to project)을 클릭하여 프로젝트 페이지로 이동한 후, 프로젝트 사이드 바에서 CI/CD를 선택합니다.
-
실행 중인 파이프라인을 클릭하면,
lintJob이 실행되는 것을 확인할 수 있습니다. -
lintJob을 클릭하면 로그를 확인할 수 있습니다.