Mobile DevOps
GitLab Mobile DevOps를 사용하여 Android 및 iOS용 네이티브 및 크로스 플랫폼 모바일 앱을 빌드, 서명 및 릴리스할 수 있습니다. GitLab CI/CD를 사용합니다. Mobile DevOps는 GitLab Incubation Engineering에서 개발한 실험적인 기능입니다.
Mobile DevOps는 아직 개발 중이지만 다음을 할 수 있습니다:
빌드 환경
GitLab.com SaaS 러너를 사용하여 빠르게 시작하거나 Self-managed 러너를 설정하여 빌드 환경을 완전히 제어하세요.
Android 빌드 환경
적절한 Docker 이미지를 선택하고 .gitlab-ci.yml
파일에 추가하여 Android 빌드 환경을 설정하세요. Fabernovel에서 다양한 Android 버전을 지원합니다.
예시:
test:
image: fabernovel/android:api-33-v1.7.0
stage: test
script:
- fastlane test
iOS 빌드 환경
macOS용 GitLab SaaS 러너는 베타 버전입니다.
이미지를 선택하여 macOS GitLab SaaS 러너에서 작업을 실행하고 .gitlab-ci.yml
파일에 추가하세요.
예시:
test:
image: macos-12-xcode-14
stage: test
script:
- fastlane test
tags:
- saas-macos-medium-m1
코드 서명
모든 Android 및 iOS 앱은 다양한 앱 스토어를 통해 배포되기 전에 안전하게 서명되어야 합니다. 서명을 통해 애플리케이션이 사용자 기기에 도달하기 전에 변조되지 않았음을 보장할 수 있습니다.
프로젝트 수준 보안 파일을 사용하여 GitLab에 다음을 저장할 수 있습니다. 이를 통해 CI/CD 빌드에서 앱을 안전하게 서명할 수 있습니다.
- 키스토어
- 프로비저닝 프로필
- 서명 인증서
개요는 프로젝트 수준 보안 파일 데모를 참조하세요.
fastlane 및 Gradle을 사용하여 Android 프로젝트 서명하기
Android의 코드 서명을 설정하려면:
- 프로젝트 수준 보안 파일에 키스토어 및 키스토어 속성 파일을 업로드하세요.
- Gradle 구성을 업데이트하여 해당 파일을 빌드에 사용하세요.
개요는 GitLab을 사용하여 Google Play에 Android 앱을 빌드하고 릴리스하는 방법을 참조하세요.
키스토어 생성
다음 명령을 실행하여 기존에 없는 경우 키스토어 파일을 생성하세요:
keytool -genkey -v -keystore release-keystore.jks -storepass password -alias release -keypass password -keyalg RSA -keysize 2048 -validity 10000
그런 다음, release-keystore.properties
라는 파일에 키스토어 구성을 넣으세요. 다음과 유사한 모양이어야 합니다:
storeFile=.secure_files/release-keystore.jks
keyAlias=release
keyPassword=password
storePassword=password
이 파일들이 생성되면:
- 버전 관리에 커밋되지 않도록 하기 위해 GitLab 프로젝트의 보안 파일로 업로드하세요.
-
.gitignore
파일에 이 파일을 추가하여 버전 관리에 커밋되지 않도록 하세요.
Gradle 구성
다음 단계는 새로 생성된 키스토어를 사용하도록 Gradle을 구성하는 것입니다. 앱의 build.gradle
파일에서:
-
플러그인 섹션 바로 다음에 다음을 추가하세요:
def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('.secure_files/release-keystore.properties') if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) }
-
android
블록 어디에서나 다음을 추가하세요:signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword keystoreProperties['storePassword'] } }
-
릴리스 빌드 유형에
signingConfig
를 추가하세요:signingConfig signingConfigs.release
이 구성을 적용하면, 보안 파일에 저장된 파일을 사용하여 fastlane을 사용하여 앱을 빌드하고 서명할 수 있습니다.
예시:
-
샘플
fastlane/Fastfile
파일:default_platform(:android) platform :android do desc "새로운 빌드 생성 및 서명" lane :build do gradle(tasks: ["clean", "assembleRelease", "bundleRelease"]) end end
-
샘플
.gitlab-ci.yml
파일:build: image: fabernovel/android:api-33-v1.7.0 stage: build script: - apt update -y && apt install -y curl - curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bash - fastlane build
fastlane을 사용하여 iOS 프로젝트 서명하기
iOS의 코드 서명을 설정하려면 다음을 수행해야 합니다:
- 로컬로 fastlane을 설치하여 서명 인증서를 GitLab에 업로드할 수 있도록 합니다.
- 빌드를 해당 파일을 사용하도록 구성하세요.
개요는 GitLab을 사용하여 Test Flight에 iOS 앱을 빌드하고 릴리스하는 방법을 참조하세요.
fastlane 초기화
fastlane이 설치되어 있으면 다음을 실행하여 시작합니다:
fastlane init
이 명령은 fastlane
폴더와 Appfile
및 미리 채워진 fastfile
을 프로젝트에 생성합니다.
이 프로세스 중에 App Store Connect 로그인 자격 증명을 묻힘으로써 앱 식별자 및 App Store 앱을 생성합니다. 이미 있는 경우 회색으로 표시됩니다.
다음 단계는 프로젝트의 코드 서명 파일을 관리하기 위해 fastlane match를 설정하는 것입니다.
다음 명령을 실행하여 구성된 Matchfile
을 생성하세요:
fastlane match init
이 명령을 실행하면 다음과 같은 것들을 입력하라고 안내받게 됩니다:
- 사용하려는 저장 백엔드를 선택하라.
gitlab_secure_files
를 선택해야 합니다. - 프로젝트 경로를 입력하라, 예를 들어
gitlab-org/gitlab
.
인증서 생성 및 업로드
다음 명령을 실행하여 Apple Developer 포털에서 인증서 및 프로필을 생성하고 이러한 파일들을 GitLab에 업로드합니다:
PRIVATE_TOKEN=YOUR-TOKEN bundle exec fastlane match development
이 예제에서:
-
YOUR-TOKEN
은 GitLab 프로젝트에 대한 Maintainer 역할이 있는 개인 또는 프로젝트 액세스 토큰이어야 합니다. -
development
을 사용하고 싶은 빌드 유형으로 대체하세요. 예를 들어appstore
또는ad-hoc
.
명령이 완료되면 프로젝트의 CI/CD 설정에서 파일을 볼 수 있습니다.
업로드 전용
프로젝트의 서명 인증서 및 프로비저닝 프로필을 이미 생성한 경우,
기존 파일을 GitLab에로드하기 위해 선택적으로 fastlane match import
를 사용할 수 있습니다:
PRIVATE_TOKEN=YOUR-TOKEN bundle exec fastlane match import
파일 경로를 입력하라는 안내를 받습니다. 해당 세부 정보를 제공한 후에 파일이 업로드되어 프로젝트의 CI/CD 설정에서 볼 수 있습니다.
가져올 때 git_url
을 입력하라는 메시지가 표시되면 비워두고 enter를 눌러도 됩니다.
이 설정을 하면 fastlane을 사용하여 안전한 파일에 저장된 앱을 빌드하고 서명할 수 있습니다.
예를 들어:
-
샘플
fastlane/Fastfile
파일:default_platform(:ios) platform :ios do desc "개발용으로 애플리케이션 빌드 및 서명" lane :build do setup_ci match(type: 'development', readonly: is_ci) build_app( project: "ios demo.xcodeproj", scheme: "ios demo", configuration: "Debug", export_method: "development" ) end
-
샘플
.gitlab-ci.yml
파일:build_ios: image: macos-12-xcode-14 stage: build script: - fastlane build tags: - saas-macos-medium-m1
배포
서명된 빌드를 Mobile DevOps 배포 통합을 사용하여 Google Play Store 또는 Apple App Store에 업로드할 수 있습니다.
Google Play 통합 및 fastlane을 사용한 Android 배포
Google Play 통합 및 fastlane을 사용하여 Android 배포를 생성하려면 다음을 해야 합니다:
- Google 클라우드 플랫폼에서 Google 서비스 계정을 생성하고 해당 계정을 Google Play의 프로젝트에 액세스 권한을 부여하세요.
- Google Play 통합을 활성화하세요.
- 파이프라인에 릴리스 단계를 추가하세요.
개요를 보려면 Google Play 통합 데모를 확인하세요.
Google Play 통합 활성화
Google Play 통합을 사용하여 CI/CD 파이프라인을 Google Play Console에 연결하여 Android 앱을 빌드하고 릴리스할 수 있습니다. 통합을 활성화하려면 다음을 수행하세요:
- 왼쪽 사이드바에서 검색 또는 이동하여 프로젝트를 찾습니다.
- 설정 > 통합을 선택합니다.
- Google Play을 선택합니다.
- 통합 활성화 아래에서 활성 확인란을 선택합니다.
-
패키지 이름에 앱의 패키지 이름을 입력하세요. 예를 들어
com.gitlab.app_name
. - 서비스 계정 키(.JSON)에 키 파일을 드래그하거나 업로드합니다.
- 변경내용 저장을 선택합니다.
통합이 활성화되면 fastlane을 사용하여 빌드를 Google Play에 배포할 수 있습니다.
예를 들어:
-
샘플
fastlane/Fastfile
:default_platform(:android) platform :android do desc "새 베타 빌드를 Google Play 스토어에 제출" lane :beta do upload_to_play_store( track: 'internal', aab: 'app/build/outputs/bundle/release/app-release.aab', release_status: 'draft' ) end
-
샘플
.gitlab-ci.yml
:beta: image: fabernovel/android:api-33-v1.7.0 stage: beta script: - fastlane beta
Apple App Store 통합 및 fastlane을 사용한 iOS 배포
Apple App Store 통합 및 fastlane을 사용하여 iOS 배포를 생성하려면 다음을 해야 합니다:
- App Store Connect API용 API 키를 생성하세요. Apple App Store Connect 포털에서, 프로젝트를 위해 새 개인 키를 생성하세요.
- Apple App Store Connect 통합을 활성화하세요.
- 파이프라인에 릴리스 단계 및 fastlane 구성을 추가하세요.
개요를 보려면 Apple App Store Connect 통합 데모를 확인하세요.
Apple App Store Connect 통합 활성화
사전 요구 사항:
- Apple 개발자 프로그램에 등록된 Apple ID가 있어야 합니다.
- Apple App Store Connect 포털에서 프로젝트를 위해 새 비공개 키를 생성해야 합니다.
Apple App Store Connect 통합을 사용하여 코드 서명 파일을 구성하여 CI/CD 파이프라인을 App Store Connect에 연결하여 iOS, iPadOS, macOS, tvOS 및 watchOS 앱을 빌드하고 릴리스할 수 있습니다.
GitLab에서 Apple App Store Connect 통합을 활성화하려면 다음을 수행하세요:
- 왼쪽 사이드바에서 검색 또는 이동하여 프로젝트를 찾습니다.
- 설정 > 통합을 선택합니다.
- Apple App Store Connect를 선택합니다.
- 통합 활성화 아래에서 활성 확인란을 선택합니다.
- Apple App Store Connect 구성 정보를 제공하세요:
- 발행자 ID: Apple App Store Connect 발행자 ID.
- 키 ID: 생성된 비공개 키의 키 ID.
- 개인 키: 생성된 비공개 키. 이 키는 한 번만 다운로드할 수 있습니다.
- protected branches and tags only을 활성화하여 보호된 브랜치 및 태그에만 변수를 설정하세요.
- 변경내용 저장을 선택하세요.
통합이 활성화되면 fastlane을 사용하여 TestFlight 및 Apple App Store에 빌드를 배포할 수 있습니다.
예를 들어:
-
샘플
fastlane/Fastfile
:default_platform(:ios) platform :ios do desc "릴리스를 위해 애플리케이션 빌드 및 서명, TestFlight에 업로드" lane :beta do setup_ci match(type: 'appstore', readonly: is_ci) app_store_connect_api_key increment_build_number( build_number: latest_testflight_build_number(initial_build_number: 1) + 1, xcodeproj: "ios demo.xcodeproj" ) build_app( project: "ios demo.xcodeproj", scheme: "ios demo", configuration: "Release", export_method: "app-store" ) upload_to_testflight end
-
샘플
.gitlab-ci.yml
:beta_ios: image: macos-12-xcode-14 stage: beta script: - fastlane beta
Mobile Review Apps
Merge Request에서 변경 사항을 직접 미리 보기하려면 리뷰 앱을 사용할 수 있습니다. 이 기능은 Appetize.io와의 통합을 통해 가능해집니다.
개요는 모바일용 리뷰 앱 설정 지침을 참조하세요.
시작하려면 설정 지침을 확인하세요.
Mobile SAST
정적 응용 프로그램 보안 테스트 (SAST)를 사용하여 코드에 대한 정적 분석기를 실행하여 알려진 보안 취약점을 확인할 수 있습니다. 모바일 SAST는 실험적인 SAST 기능을 확장하여 Mobile Security Framework (MobSF) 기반의 모바일 팀을 대상으로 합니다.
샘플 참조 프로젝트
다양한 플랫폼에 대한 완전한 빌드, 사이닝 및 릴리스 파이프라인 예제를 보려면 아래의 샘플 참조 프로젝트를 참조하세요. 모든 사용 가능한 프로젝트 디렉터리은 Mobile DevOps 데모 프로젝트 그룹에서 찾을 수 있습니다.
Mobile DevOps 블로그
추가 참고 자료는 GitLab 블로그의 #mobile section에서 찾을 수 있습니다.