InfoGrab Docs

튜토리얼: GitLab Mobile DevOps로 Android 앱 빌드

요약

이 튜토리얼에서는 GitLab CI/CD를 사용하여 Android 모바일 앱을 빌드하고, 자격 증명으로 서명하며, 앱 스토어에 배포하는 파이프라인을 만듭니다. Mobile DevOps를 설정하려면: 이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:

이 튜토리얼에서는 GitLab CI/CD를 사용하여 Android 모바일 앱을 빌드하고, 자격 증명으로 서명하며, 앱 스토어에 배포하는 파이프라인을 만듭니다.

Mobile DevOps를 설정하려면:

  1. 빌드 환경 설정
  2. fastlane과 Gradle로 코드 서명 구성
  3. Google Play 통합과 fastlane을 사용한 Android 앱 배포 설정

시작하기 전에#

이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:

  • CI/CD 파이프라인에 액세스할 수 있는 GitLab 계정
  • GitLab 리포지터리에 있는 모바일 앱 코드
  • Google Play 개발자 계정
  • 로컬에 설치된 fastlane

빌드 환경 설정#

GitLab 호스팅 러너를 사용하거나, 빌드 환경을 완전히 제어하려면 자체 관리 러너를 설정합니다.

Android 빌드는 여러 Android API 버전을 제공하는 Docker 이미지를 사용합니다.

  1. 리포지터리 루트에 .gitlab-ci.yml 파일을 만듭니다.

  2. Fabernovel의 Docker 이미지를 추가합니다:

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

fastlane과 Gradle로 코드 서명 구성#

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

  1. 키스토어를 만듭니다:

    1. 다음 명령을 실행하여 키스토어 파일을 생성합니다:

      keytool -genkey -v -keystore release-keystore.jks -storepass password -alias release -keypass password \
      -keyalg RSA -keysize 2048 -validity 10000
      
    2. release-keystore.properties 파일에 키스토어 구성을 저장합니다:

      storeFile=.secure_files/release-keystore.jks
      keyAlias=release
      keyPassword=password
      storePassword=password
      
    3. 두 파일 모두 프로젝트 설정에서 Secure Files로 업로드합니다.

    4. 버전 관리에 커밋되지 않도록 두 파일을 .gitignore 파일에 추가합니다.

  2. 새로 만든 키스토어를 사용하도록 Gradle을 구성합니다. 앱의 build.gradle 파일에서:

    1. plugins 섹션 바로 뒤에 다음을 추가합니다:

      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. release 빌드 타입에 signingConfig를 추가합니다:

      signingConfig signingConfigs.release
      

다음은 이 구성을 사용한 샘플 fastlane/Fastfile.gitlab-ci.yml 파일입니다:

  • 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
        - wget https://gitlab.com/gitlab-org/cli/-/releases/v1.74.0/downloads/glab_1.74.0_linux_amd64.deb
        - apt install ./glab_1.74.0_linux_amd64.deb
        - glab auth login --hostname $CI_SERVER_FQDN --job-token $CI_JOB_TOKEN
        - glab securefile download --all --output-dir .secure_files/
        - fastlane build
    

Google Play 통합과 fastlane을 사용한 Android 앱 배포 설정#

서명된 빌드는 Mobile DevOps 배포 통합을 사용하여 Google Play 스토어에 업로드할 수 있습니다.

  1. Google Cloud Platform에서 Google 서비스 계정을 만들고 Google Play의 프로젝트에 대한 액세스 권한을 부여합니다.
  2. Google Play 통합을 활성화합니다:
    1. 상단 표시줄에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
    2. 설정 > 통합을 선택합니다.
    3. Google Play를 선택합니다.
    4. 통합 활성화 아래에서 활성 체크박스를 선택합니다.
    5. 패키지 이름에 앱의 패키지 이름을 입력합니다. 예: com.gitlab.app_name.
    6. **서비스 계정 키 (.JSON)**에서 키 파일을 드래그하거나 업로드합니다.
    7. 변경 사항 저장을 선택합니다.
  3. 파이프라인에 릴리스 단계를 추가합니다.

다음은 샘플 fastlane/Fastfile입니다:

default_platform(:android)

platform :android do
  desc "Submit a new Beta build to the Google Play store"
  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

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

축하합니다! 이제 앱이 자동화된 빌드, 서명 및 배포를 위해 설정되었습니다. 머지 리퀘스트를 만들어 첫 번째 파이프라인을 트리거해 보세요.

관련 주제#

Android에 대한 완전한 빌드, 서명 및 릴리스 파이프라인 예시는 Mobile DevOps Android 데모 프로젝트를 참조하세요.

추가 참고 자료는 GitLab 블로그의 DevSecOps 섹션을 참조하세요.

튜토리얼: GitLab Mobile DevOps로 Android 앱 빌드

원문 보기
요약

이 튜토리얼에서는 GitLab CI/CD를 사용하여 Android 모바일 앱을 빌드하고, 자격 증명으로 서명하며, 앱 스토어에 배포하는 파이프라인을 만듭니다. Mobile DevOps를 설정하려면: 이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:

이 튜토리얼에서는 GitLab CI/CD를 사용하여 Android 모바일 앱을 빌드하고, 자격 증명으로 서명하며, 앱 스토어에 배포하는 파이프라인을 만듭니다.

Mobile DevOps를 설정하려면:

  1. 빌드 환경 설정
  2. fastlane과 Gradle로 코드 서명 구성
  3. Google Play 통합과 fastlane을 사용한 Android 앱 배포 설정

시작하기 전에#

이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:

  • CI/CD 파이프라인에 액세스할 수 있는 GitLab 계정
  • GitLab 리포지터리에 있는 모바일 앱 코드
  • Google Play 개발자 계정
  • 로컬에 설치된 fastlane

빌드 환경 설정#

GitLab 호스팅 러너를 사용하거나, 빌드 환경을 완전히 제어하려면 자체 관리 러너를 설정합니다.

Android 빌드는 여러 Android API 버전을 제공하는 Docker 이미지를 사용합니다.

  1. 리포지터리 루트에 .gitlab-ci.yml 파일을 만듭니다.

  2. Fabernovel의 Docker 이미지를 추가합니다:

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

fastlane과 Gradle로 코드 서명 구성#

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

  1. 키스토어를 만듭니다:

    1. 다음 명령을 실행하여 키스토어 파일을 생성합니다:

      keytool -genkey -v -keystore release-keystore.jks -storepass password -alias release -keypass password \
      -keyalg RSA -keysize 2048 -validity 10000
      
    2. release-keystore.properties 파일에 키스토어 구성을 저장합니다:

      storeFile=.secure_files/release-keystore.jks
      keyAlias=release
      keyPassword=password
      storePassword=password
      
    3. 두 파일 모두 프로젝트 설정에서 Secure Files로 업로드합니다.

    4. 버전 관리에 커밋되지 않도록 두 파일을 .gitignore 파일에 추가합니다.

  2. 새로 만든 키스토어를 사용하도록 Gradle을 구성합니다. 앱의 build.gradle 파일에서:

    1. plugins 섹션 바로 뒤에 다음을 추가합니다:

      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. release 빌드 타입에 signingConfig를 추가합니다:

      signingConfig signingConfigs.release
      

다음은 이 구성을 사용한 샘플 fastlane/Fastfile.gitlab-ci.yml 파일입니다:

  • 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
        - wget https://gitlab.com/gitlab-org/cli/-/releases/v1.74.0/downloads/glab_1.74.0_linux_amd64.deb
        - apt install ./glab_1.74.0_linux_amd64.deb
        - glab auth login --hostname $CI_SERVER_FQDN --job-token $CI_JOB_TOKEN
        - glab securefile download --all --output-dir .secure_files/
        - fastlane build
    

Google Play 통합과 fastlane을 사용한 Android 앱 배포 설정#

서명된 빌드는 Mobile DevOps 배포 통합을 사용하여 Google Play 스토어에 업로드할 수 있습니다.

  1. Google Cloud Platform에서 Google 서비스 계정을 만들고 Google Play의 프로젝트에 대한 액세스 권한을 부여합니다.
  2. Google Play 통합을 활성화합니다:
    1. 상단 표시줄에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
    2. 설정 > 통합을 선택합니다.
    3. Google Play를 선택합니다.
    4. 통합 활성화 아래에서 활성 체크박스를 선택합니다.
    5. 패키지 이름에 앱의 패키지 이름을 입력합니다. 예: com.gitlab.app_name.
    6. **서비스 계정 키 (.JSON)**에서 키 파일을 드래그하거나 업로드합니다.
    7. 변경 사항 저장을 선택합니다.
  3. 파이프라인에 릴리스 단계를 추가합니다.

다음은 샘플 fastlane/Fastfile입니다:

default_platform(:android)

platform :android do
  desc "Submit a new Beta build to the Google Play store"
  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

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

축하합니다! 이제 앱이 자동화된 빌드, 서명 및 배포를 위해 설정되었습니다. 머지 리퀘스트를 만들어 첫 번째 파이프라인을 트리거해 보세요.

관련 주제#

Android에 대한 완전한 빌드, 서명 및 릴리스 파이프라인 예시는 Mobile DevOps Android 데모 프로젝트를 참조하세요.

추가 참고 자료는 GitLab 블로그의 DevSecOps 섹션을 참조하세요.