메인 콘텐츠로 바로가기
CI/CD

GitLab을 사용하여 자동화된 Capacitor 안드로이드 빌드

5분 안에 fastlane과 GitLab을 사용하여 안드로이드 아이오닉 앱의 CI/CD PIPELINE을 설정하는 방법

아니크 다발 바부

아니크 다발 바부

콘텐츠 마케터

GitLab을 사용하여 자동화된 Capacitor 안드로이드 빌드

GitLab CI로 Android 자동 빌드

GitLab CI/CD를 Capacitor 앱에 설정하는 것은 복잡하고 시간이 많이 걸립니다. 알아야 할 내용은 다음과 같습니다.

필수 조건

시작하기 전에 다음을 설정해야 합니다.

  • GitLab 계정에 관리자 권한
  • __CAPGO_KEEP_0__ 앱이 이미 Google Play Store에 게시되어 올바른 서명이 되어야 함
  • Android 서명 키 및 키 스토어 파일
  • Google Cloud Console 프로젝트에 Play Store API가 활성화된 상태
  • 권한이 있는 서비스 계정
  • GitLab CI/CD 워크플로우에 대한 이해
  • Fastlane 구성에 대한 지식
  • pipeline 유지 및 디버깅에 소요되는 시간

Capgo CI/CD를 위한 빌드하기 위해 Capgo

Fastlane, Gradle 런너,_keystore_, 업로드 스크립트 유지 관리를 생략합니다. Capgo 빌드 __CAPGO_KEEP_0__ 빌드는 CI/CD pipeline에서 이미 존재하는 CI/CD pipeline에서 signed native Android 빌드를 실행합니다:

  • __CAPGO_KEEP_0__ 빌드는 pipeline과 함께 작동합니다.: GitLab CI, GitHub Actions, Jenkins, 또는 로컬 스크립트에서 Capgo 빌드를 트리거하고 웹 빌드 후에 npx cap sync.
  • CI secret에서 서명하기: Android 키스토어, 키 별칭, 비밀번호, Play Console 서비스 계정 JSON을 CI secret에서 유지합니다.
  • native 런너 유지 관리가 필요하지 않습니다.: Capgo 빌드는 유지 관리가 필요한 Android 빌드 환경을 제공하므로 SDK 이미지를 관리하거나 Gradle 캐시 문제 또는 Fastlane 경로를 관리할 필요가 없습니다.
  • 아티팩트 및 제출: QA에 서명된 아티팩트를 다운로드하거나 Capgo CLI를 통해 릴리스 빌드를 제출합니다.

가격

  • Capgo 플랜은 월 $12에 시작합니다.
  • OTA 업데이트 및 월 15개 이상의 네이티브 빌드를 포함합니다.
  • 추가 빌드 분량은 분당 크레딧을 통해 청구됩니다.

Capgo 빌드를 CI/CD에서 설정하세요.

수동 설정 안내서

다음 단계를 따르세요.

포스트에서 따르면.

  1. Fastlane 파일을 복사하세요.
  2. GitLab 암호화된 비밀을 저장하세요.
  3. Google Play 서비스 계정 키를 생성하고 저장하세요.
  4. Android 서명 키를 저장하세요.
  5. GitLab 워크플로우 .yml 파일을 설정하세요.

1. Fastlane 파일을 복사하세요.

Fastlane은 안드로이드 스튜디오에서 일반적으로 수행하는 모바일 개발 작업을 자동화하기 위해 만들어진 루비 라이브러리입니다. Fastlane을 사용하면, 사용자 정의된 '로드'을 구성할 수 있으며, 이 로드에는 '액션'이 포함되어 있습니다. 이 액션들은 일반적으로 안드로이드 스튜디오에서 수행하는 작업을 수행합니다. Fastlane은 많은 기능을 제공하지만, 이 튜토리얼에서는 핵심 액션만 사용할 것입니다.

프로젝트의 루트 폴더에 Fastlane 폴더를 생성하고 다음 파일을 복사하세요: Fastlane

default_platform(:android)

KEYSTORE_KEY_ALIAS = ENV["KEYSTORE_KEY_ALIAS"]
KEYSTORE_KEY_PASSWORD = ENV["KEYSTORE_KEY_PASSWORD"]
KEYSTORE_STORE_PASSWORD = ENV["KEYSTORE_STORE_PASSWORD"]

platform :android do
    desc "Deploy a beta version to the Google Play"
    private_lane :verify_changelog_exists do |version_code: |
      changelog_path = "android/metadata/en-US/changelogs/#{version_code}.txt"
      UI.user_error!("Missing changelog file at #{changelog_path}") unless File.exist?(changelog_path)
      UI.message("Changelog exists for version code #{version_code}")
    end

    private_lane :verify_upload_to_staging do |version_name: |
      UI.message "Skipping staging verification step"
    end
    lane :beta do
				keystore_path = "#{Dir.tmpdir}/build_keystore.keystore"
				File.write(keystore_path, Base64.decode64(ENV['ANDROID_KEYSTORE_FILE']))
				json_key_data = Base64.decode64(ENV['PLAY_CONFIG_JSON'])
				previous_build_number = google_play_track_version_codes(
					package_name: ENV['DEVELOPER_PACKAGE_NAME'],
					track: "internal",
					json_key_data: json_key_data,
				)[0]

				current_build_number = previous_build_number + 1
				sh("export NEW_BUILD_NUMBER=#{current_build_number}")
        gradle(
          task: "clean bundleRelease",
          project_dir: 'android/',
          print_command: false,
          properties: {
            "android.injected.signing.store.file" => "#{keystore_path}",
            "android.injected.signing.store.password" => "#{KEYSTORE_STORE_PASSWORD}",
            "android.injected.signing.key.alias" => "#{KEYSTORE_KEY_ALIAS}",
            "android.injected.signing.key.password" => "#{KEYSTORE_KEY_PASSWORD}",
						'versionCode' => current_build_number
          })
        upload_to_play_store(
					package_name: ENV['DEVELOPER_PACKAGE_NAME'],
					json_key_data: json_key_data,
          track: 'internal',
          release_status: 'completed',
          skip_upload_metadata: true,
          skip_upload_changelogs: true,
          skip_upload_images: true,
          skip_upload_screenshots: true,
        )
    end
    lane :build do
      gradle(
        task: "clean bundleRelease",
        project_dir: 'android/',
        print_command: false,
        properties: {
          "android.injected.signing.store.file" => "#{keystore_path}",
          "android.injected.signing.store.password" => "#{KEYSTORE_STORE_PASSWORD}",
          "android.injected.signing.key.alias" => "#{KEYSTORE_KEY_ALIAS}",
          "android.injected.signing.key.password" => "#{KEYSTORE_KEY_PASSWORD}",
        })
    end
    lane :prod_release do
      build_gradle = File.read("../android/app/build.gradle")

      verify_changelog_exists(version_code: build_gradle.match(/versionCode (\d+)/)[1])
      verify_upload_to_staging(version_name: build_gradle.match(/versionName '([\d\.]+)'/)[1])

      supply(
        track_promote_to: 'beta',
        skip_upload_apk: true,
        skip_upload_aab: true,
        skip_upload_metadata: false,
        skip_upload_changelogs: false,
        skip_upload_images: false,
        skip_upload_screenshots: false
      )
    end
end

GitLab CI/CD 변수를 저장하는 방법

GitLab은 CI/CD 변수를 암호화하여 저장하는 방법을 제공합니다. 이 방법은 GitHub의 저장소 비밀과 유사합니다._sensitive 정보를 안전하게 저장하려면.

  1. GitLab 프로젝트의 설정으로 이동하세요.
  2. CI/CD > 변수로 이동하세요.
  3. 다음 변수를 추가하세요:
  • ANDROID_KEYSTORE_FILE: Android 빌드에 사용되는 base64 인코딩된 .jks 또는 .keystore 파일입니다. 이 파일은 업로드 키와 연관된 키스토어 파일(Play App Signing을 사용하는 경우) 또는 앱 서명 키일 수 있습니다.
  • KEYSTORE_KEY_PASSWORD: 키 스토어 파일과 관련된 암호
  • KEYSTORE_KEY_ALIAS: 키 스토어 별칭
  • KEYSTORE_STORE_PASSWORD: 개인 키 암호
  • DEVELOPER_PACKAGE_NAME: Android 앱 ID와 같은 com.example.app
  • PLAY_CONFIG_JSON: 서비스 계정 키 JSON을 base64로 인코딩한 것입니다.

Google Play 서비스 계정 키를 생성합니다.

secret를 생성하기 위해 다음 단계를 따르세요: PLAY_CONFIG_JSON Google Cloud Console로 이동하세요.

  1. 새 프로젝트를 생성하거나 기존 프로젝트를 선택하세요. Google Play Android Developer __CAPGO_KEEP_0__를 활성화하세요.
  2. Enable the Google Play Android Developer __CAPGO_KEEP_0__
  3. Enable the Google Play Android Developer API
  4. 서비스 계정 만들기:
    • ‘IAM & Admin’ > ‘Service Accounts’로 이동하세요.
    • ‘Create Service Account’ 클릭하세요.
    • 이름과 설명을 입력하세요.
    • ‘Create and Continue’ 클릭하세요.
    • 권한 할당을 건너뛰고 ‘Done’ 클릭하세요.
  5. JSON 키 생성:
    • 서비스 계정 목록에서 찾으세요.
    • 세로 세 개의 점 메뉴 클릭 > ‘Manage keys’ 클릭하세요.
    • ‘Add Key’ > ‘Create new key’ 클릭하세요.
    • JSON 형식 선택하세요.
    • ‘Create’ 클릭하세요.
  6. Play Console에서 서비스 계정에 앱에 대한 접근 권한을 부여하십시오:
    • Play Console로 이동하십시오. 사용자 및 권한
    • 으로 이동하십시오.
    • 새 사용자 초대
    • 을 클릭하십시오.
    • 서비스 계정 이메일 (*.iam.gserviceaccount.com로 끝나십시오)를 입력하십시오.
    • 제품 출시 허용
  7. 권한을 부여하십시오.
    base64 -i path/to/your/service-account-key.json | pbcopy
  8. 사용자 초대 PLAY_CONFIG_JSON 을 클릭하십시오.

JSON 키를 base64로 변환하십시오.:

프로젝트의 루트에 .gitlab-ci.yml 파일을 생성하여 CI/CD pipeline을 정의하세요. 아래는 pipeline을 구조화하는 예시입니다.


image: mingc/android-build-box:latest

stages:
  - build
  - upload_to_capgo
  - build_and_upload_android

build:
  stage: build
  tags:
    - saas-linux-xlarge-amd64
  cache:
    - key:
        files:
          - bun.lockb
      paths:
        - .node_modules/
  script:
    - npm install
    - npm run build
  artifacts:
    paths:
      - node_modules/
      - dist/
  only:
    - master

upload_to_capgo:
  stage: upload_to_capgo
  tags:
    - saas-linux-xlarge-amd64
  script:
    - npx @capgo/cli@latest bundle upload -a $CAPGO_TOKEN -c dev
  dependencies:
    - build
  when: manual
  only:
    - master

build_and_upload_android:
  tags:
    - saas-linux-xlarge-amd64
  stage:    build_and_upload_android
  cache:
    - key:
        files:
          - android/gradle/wrapper/gradle-wrapper.properties
      paths:
        - ~/.gradle/caches/
  script:
    - npx cap sync android
    - npx cap copy android
    - bundle exec fastlane android beta # We do create a tag for the build to trigger XCode cloud builds
  dependencies:
    - build
  when: manual
  only:
    - master

Pipeline 트리거

GitLab 저장소에 새로운 태그를 푸시할 때마다 GitLab CI/CD는 정의된 pipeline을 자동으로 트리거하고, Fastlane을 사용하여 Android 앱을 빌드하고 배포합니다.

프로젝트의 구조와 요구 사항에 따라 경로와 의존성을 조정하십시오. 이 설정은 GitLab CI/CD에서 Android 앱을 자동으로 배포하는 데 도움이 됩니다.

결론

mingc/android-build-box Docker 이미지를 사용하여 GitLab CI/CD를 구성하면 Android 앱 빌드 프로세스를 자동화할 수 있습니다. 이 자동화는 개발 워크플로우의 효율성과 신뢰성을 높이고, 앱 개발의 핵심적인 부분에 집중할 수 있도록 시간을 절약합니다. 결과적으로, 높은 품질의 Android 앱을 더 효율적으로 배포할 수 있습니다.

Capacitor GitLab에서 자동으로 Android 빌드를 계속하세요.

__CAPGO_KEEP_0__ GitLab에서 자동으로 Android 빌드를 사용하는 경우, CI/CD 자동화 계획을 연결하세요. Capacitor CI/CD __CAPGO_KEEP_0__ CI/CD에서 제품 워크플로우와 연결하세요. Capgo CI/CD Capgo Capgo Native Builds Capgo Native Builds를 위한 제품 워크플로우 Capgo Integrations Capgo Integrations를 위한 제품 워크플로우 CI/CD Integration CI/CD Integration의 구현 세부 사항, 그리고 GitHub Actions Integration GitHub Actions Integration의 구현 세부 사항.

Capacitor 앱에 대한 실시간 업데이트

웹-layer 버그가 활성화된 경우, 앱 스토어 승인 대기 없이 Capgo를 통해 패치를 배포하세요. 사용자는 배경에서 업데이트를 받으며, 네이티브 변경 사항은 일반적인 검토 경로에 남아 있습니다.

시작하기

최신 블로그 게시물

Capgo는 전문적인 모바일 앱을 만들기 위해 필요한 최고의洞察력을 제공합니다.