모바일 DevOps

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
Status: 일반 제공

GitLab Mobile DevOps를 사용하여 GitLab CI/CD를 통해 Android 및 iOS용 네이티브 및 크로스 플랫폼 모바일 앱을 빌드, 서명 및 배포하세요
온프레미스 또는 GitLab.com에서 사용할 수 있습니다. Mobile DevOps는 GitLab One DevSecOps 플랫폼의 기능을 활용하는 도구와 모범 사례 워크플로를 구현합니다.

GitLab Mobile DevOps 도구 및 서비스 모음은
GitLab Incubation Engineering 팀에 의해 개발되고 curated 되었습니다.
GitLab CI 섹션이 이 기능 세트를 소유하고 유지 관리합니다:

빌드 환경

GitLab 호스팅 러너를 사용하여 빠르게 시작하거나
자체 관리 러너를 설정하여 빌드 환경을 완전히 제어하세요.

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 호스팅 러너는 베타 상태입니다.

이미지 선택하기 macOS GitLab 호스팅 러너에서 작업을 실행하고 이를 .gitlab-ci.yml 파일에 추가하세요.

예를 들어:

test:  
  image: macos-14-xcode-15  
  stage: test  
  script:  
    - fastlane test  
  tags:  
    - saas-macos-medium-m1  

코드 서명

모든 Android 및 iOS 앱은 다양한 앱 스토어를 통해 배포되기 전에 안전하게 서명되어야 합니다.
서명은 애플리케이션이 사용자의 기기에 도달하기 전에 변조되지 않았음을 보장합니다.

프로젝트 수준 보안 파일을 사용하면 GitLab에 다음을 저장하여 CI/CD 빌드에서 앱을 안전하게 서명하는 데 사용할 수 있습니다:

  • 키스토어
  • 프로비전 프로필
  • 서명 인증서

개요는 프로젝트 수준 보안 파일 데모를 참조하세요.

fastlane 및 Gradle로 Android 프로젝트 코드 서명하기

Android에 대한 코드 서명을 설정하려면:

  1. 프로젝트 수준 보안 파일에 키스토어 및 키스토어 속성 파일을 업로드합니다.
  2. 빌드에서 이러한 파일을 사용하도록 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

이 파일들이 생성된 후:

  • CI/CD 작업에서 사용할 수 있도록 보안 파일로 업로드합니다.
  • 두 파일 모두 버전 관리를 위해 .gitignore 파일에 추가합니다.

Gradle 구성

다음 단계는 새로 생성된 키 저장소를 사용하기 위해 Gradle을 구성하는 것입니다. 앱의 build.gradle 파일에서:

  1. 플러그인 섹션 바로 다음에 다음을 추가합니다:

    def keystoreProperties = new Properties()
    def keystorePropertiesFile = rootProject.file('.secure_files/release-keystore.properties')
    if (keystorePropertiesFile.exists()) {
      keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    }
    
  2. android 블록 내의 아무 곳에 다음을 추가합니다:

    signingConfigs {
      release {
        keyAlias keystoreProperties['keyAlias']
        keyPassword keystoreProperties['keyPassword']
        storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
        storePassword keystoreProperties['storePassword']
      }
    }
    
  3. 릴리스 빌드 유형에 signingConfig를 추가합니다:

    signingConfig signingConfigs.release
    

위의 구성이 완료되면, secure files에 저장된 파일을 사용하여 fastlane으로 앱을 빌드하고 서명할 수 있습니다.

예를 들어:

  • 샘플 fastlane/Fastfile 파일:

    default_platform(:android)
    
    platform :android do
      desc "Create and sign a new build"
      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의 코드 서명을 설정하려면 다음을 수행해야 합니다:

  1. 로컬에 fastlane을 설치하여 서명 인증서를 GitLab에 업로드할 수 있도록 합니다.
  2. 빌드가 해당 파일을 사용하도록 구성합니다.

개요는 GitLab로 iOS 앱을 Test Flight에 빌드하고 배포하는 방법을 참조하세요.

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 설정에서 파일을 볼 수 있습니다.

업로드 전용

프로젝트에 대한 서명 인증서와 프로비저닝 프로필을 이미 생성한 경우, fastlane match import를 선택적으로 사용하여 기존 파일을 GitLab에 로드할 수 있습니다:

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
    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 스토어 또는 Apple App Store에 업로드할 수 있습니다.

Google Play 통합 및 fastlane을 이용한 Android 배포

Google Play 통합 및 fastlane을 사용하여 Android 배포를 생성하려면:

  1. Google 서비스 계정 만들기 Google Cloud Platform에서 Google Play의 프로젝트에 해당 계정에 대한 접근 권한을 부여합니다.

  2. Google Play 통합 활성화.

  3. 파이프라인에 릴리스 단계를 추가합니다.

개요는 Google Play 통합 데모를 참조하세요.

Google Play 통합 활성화

Google Play 통합을 사용하여, CI/CD 파이프라인을 Google Play Console에 연결하여 Android 앱을 빌드하고 릴리스하도록 구성합니다. 통합을 활성화하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.

  2. 설정 > 통합을 선택합니다.

  3. Google Play를 선택합니다.

  4. 통합 활성화 아래에서 활성 체크박스를 선택합니다.

  5. 패키지 이름에 앱의 패키지 이름을 입력합니다. 예: com.gitlab.app_name.

  6. 서비스 계정 키 (.JSON)에서 키 파일을 드래그하거나 업로드합니다.

  7. 변경 사항 저장을 선택합니다.

통합이 활성화되면 fastlane을 사용하여 빌드를 Google Play에 배포할 수 있습니다.

예를 들어:

  • 샘플 fastlane/Fastfile:

    default_platform(:android)
    
    platform :android do
      desc "Google Play 스토어에 새로운 Beta 빌드 제출"
      lane :beta do
        upload_to_play_store(
          track: 'internal',
          aab: 'app/build/outputs/bundle/release/app-release.aab',
          release_status: 'draft'
        )
      end
    end
    
  • 샘플 .gitlab-ci.yml:

    beta:
      image: fabernovel/android:api-33-v1.7.0
      stage: beta
      script:
        - fastlane beta
    

iOS 배포 Apple Store 통합 및 fastlane

Apple Store 통합 및 fastlane을 사용하여 iOS 배포를 생성하려면 다음을 수행해야 합니다:

  1. App Store Connect API에 대한 API 키를 생성합니다. Apple App Store Connect 포털에서, 프로젝트를 위한 새 개인 키를 생성합니다.
  2. Apple App Store Connect 통합을 활성화합니다.
  3. 파이프라인 및 fastlane 구성에 배포 단계를 추가합니다.

개요를 보려면 Apple App Store Connect 통합 데모를 참조하세요.

Apple App Store Connect 통합 활성화

사전 요구 사항:

Apple App Store Connect 통합을 사용하여 CI/CD 파이프라인을 App Store Connect와 연결하도록 구성할 수 있습니다.

이 통합을 통해 iOS, iPadOS, macOS, tvOS 및 watchOS의 앱을 빌드하고 배포할 수 있습니다.

GitLab에서 Apple App Store Connect 통합을 활성화하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 통합을 선택합니다.
  3. Apple App Store Connect를 선택합니다.
  4. 통합 활성화에서 활성화 체크박스를 선택합니다.
  5. Apple App Store Connect 구성 정보를 제공합니다:
    • 발행자 ID: Apple App Store Connect 발행자 ID입니다.
    • 키 ID: 생성된 개인 키의 키 ID입니다.
    • 비공식 키: 생성된 개인 키입니다. 이 키는 한 번만 다운로드할 수 있습니다.
    • 보호된 브랜치 및 태그만: 보호된 브랜치 및 태그에 대해서만 변수를 설정하도록 활성화합니다.
  6. 변경 사항 저장을 선택합니다.

통합이 활성화되면 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
    end
    
  • 샘플 .gitlab-ci.yml:

    beta_ios:
      image: macos-12-xcode-14
      stage: beta
      script:
        - fastlane beta
    

모바일 리뷰 앱

리뷰 앱을 사용하여 병합 요청에서 직접 변경 사항을 미리 볼 수 있습니다.

이 기능은 Appetize.io와의 통합을 통해 가능합니다.

개요를 보려면 모바일 설정 지침를 참조하세요.

시작하려면 설정 지침을 참조하세요.

샘플 참고 프로젝트

다양한 플랫폼에 대한 전체 빌드, 서명 및 릴리즈 파이프라인 예제를 보려면 아래 샘플 참고 프로젝트를 확인하세요. 사용 가능한 모든 프로젝트 목록은 모바일 DevOps 데모 프로젝트 그룹에서 확인할 수 있습니다.

모바일 DevOps 블로그

추가 참고 자료는 GitLab 블로그의 DevOps 섹션에서 찾을 수 있습니다.