__CAPGO_KEEP_0__ 메인 콘텐츠로 건너뛰기
CI/CD

자동 Capacitor 안드로이드 빌드와 GitHub 액션

5분 안에 fastlane과 GitHub 액션을 사용하여 안드로이드 Capacitor 앱의 CI/CD PIPELINE을 설정하는 방법

마틴 도나디유

마틴 도나디유

콘텐츠 마케터

자동 Capacitor 안드로이드 빌드와 GitHub 액션

안드로이드 Capacitor 앱의 CI/CD 설정은 복잡하고 시간이 많이 걸립니다. 다음을 알아야 합니다.

현재 __CAPGO_KEEP_0__ 빌드 사용을 권장합니다. Capgo 빌드와 Capgo CLI 자연스러운 Capacitor 빌드용으로. 이 Fastlane 가이드는 기존 GitHub Actions pipeline 유지 관리하는 팀을 위해 보존되지만, 새로운 안드로이드 빌드는 Fastlane, Gradle 실행자, 키 스토어, 업로드 스크립트 유지 관리하지 않도록 Capgo CLI 사용하세요.

사전 조건

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

  • GitHub 계정에 관리자 권한
  • Google Play Store에 이미 올려진 앱과 올바른 서명
  • 안드로이드 서명 키 및 키 스토어 파일
  • Google Cloud Console 프로젝트에 Play Store API 활성화
  • 권한이 있는 서비스 계정
  • GitHub Actions 워크플로우 이해
  • Fastlane 구성에 대한 지식
  • pipeline 유지 및 디버깅에 시간

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

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

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

가격

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

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

수동 설정 안내서

다음과 같은 단계를 따르세요:

GitHub 액션 가격

GitHub 액션 가격

GitHub 액션은 저장소 유형에 따라 무료 분량을 제공합니다:

  • 공개 저장소: 월 2,000분
  • 개인 저장소: 월 2,000분 (리눅스 러너)

개인 프로젝트의 경우 비용은 약 $0.008/분입니다. 일반적인 빌드는 3-5분 정도 걸립니다.

수동 설정 단계

  1. Android 키 스토어를 생성하세요
  2. Google Play 서비스 계정 설정
  3. Fastlane 설정
  4. GitHub 비밀을 구성하세요
  5. GitHub 액션 워크플로우를 생성하세요

1. Android 키 스토어를 생성하세요

Android 앱을 서명하고 배포하기 전에 Android 키 스토어 파일을 생성해야 합니다. 이 작업은 한 번만 수행합니다.

키 스토어를 keytool로 생성하세요

터미널에서 다음 명령어를 실행하세요:

keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

다음과 같은 입력을 입력하실 것입니다:

  • Keystore password: __CAPGO_KEEP_0__의 강력한 비밀번호를 선택하세요 (이 비밀번호가 필요합니다.) KEYSTORE_STORE_PASSWORD)
  • Key password: __CAPGO_KEEP_0__의 강력한 비밀번호를 선택하세요 (이 비밀번호가 필요합니다.) KEYSTORE_KEY_PASSWORD)
  • Your name, organization, etc.: 이름, 조직 등 정보를 입력하세요

Important Notes

  • : 중요한 참고 사항:

    • Save these values securely my-release-key.keystore)
    • : 이 값을 안전하게 저장하세요 my-key-aliasKeystore file location (e.g., KEYSTORE_KEY_ALIAS
    • : Keystore 파일 위치 (예시: __CAPGO_KEEP_0__) KEYSTORE_STORE_PASSWORD
    • 비밀번호 - 이 비밀번호가 필요합니다. KEYSTORE_KEY_PASSWORD
  • 키 스토어 파일을 백업하세요.: 앱을 배포한 경우 앱을 업데이트할 수 없습니다.

  • 비밀을 지켜주세요.: git에 키 스토어 파일을 커밋하지 마세요.

  • 안전한 장소에 여러 개의 백업을 저장하세요.대안: 기존 키 스토어 사용

앱을 이미 배포한 경우, 처음으로 앱을 빌드한 기기에서 사용한 키 스토어를 사용해야 합니다. 위치를 찾으려면:

앱을 처음으로 빌드한 기기에서

  • Play Console → 설정 → 앱 서명 (Google Play App Signing을 사용하는 경우)
  • 2. Google Play Service Account 설정

2. Google Play Service Account

구글 플레이로 GitHub 액션을 업로드 하려면 서비스 계정 필요

2.1 단계: 구글 클라우드 프로젝트 만들기

  1. 가장 먼저 구글 클라우드 콘솔
  2. 새로운 프로젝트 만들거나 기존 프로젝트 선택
  3. 프로젝트 ID 기록

2.2 단계: 구글 플레이 개발자 API 활성화

  1. 구글 클라우드 콘솔에서 APIs & Services라이브러리
  2. “구글 플레이 안드로이드 개발자 API” 검색
  3. 클릭 활성화

2.3 단계: 서비스 계정 만들기

  1. 가장자리 IAM & Admin서비스 계정
  2. 클릭 서비스 계정 만들기
  3. 세부 정보 입력:
    • 이름: github-actions-uploader
    • 설명: “GitHub 액션을 위해 빌드 업로드를 위한 서비스 계정”
  4. 클릭 만들기 및 계속
  5. 현재 역할 할당을 생략하세요 (클릭 계속, 그런 다음 완료)

2.4 단계: 서비스 계정 키 생성

  1. 새로 생성한 서비스 계정 클릭
  2. 가장자리
  3. 클릭 키 추가새 키 생성
  4. 선택 JSON JSON 형식
  5. 클릭 만들기
  6. JSON 파일이 다운로드 될 것입니다 - 이것을 안전하게 저장하세요이것을 나중에 사용할 것입니다

2.5 단계: Play 콘솔에서 접근 권한 부여

  1. Play 콘솔로 이동 Play 콘솔로 이동
  2. Google Play Console 설정API 접근 권한
  3. 아래 서비스 계정, 클릭 서비스 계정에 대한 접근 권한 부여 서비스 계정에 대한
  4. 앱 권한 탭에서 앱을 추가
  5. 계정 권한 권한을 부여하세요:
    • 앱 정보를 보는 것과 bulk 리포트를 다운로드하는 것 (읽기 전용)
    • draft 앱을 만들고, 편집하고, 삭제합니다.
    • 테스트 트랙으로 앱을 릴리스합니다.
    • 테스트 트랙 이외의 트랙으로 앱을 릴리스합니다.
  6. 클릭 사용자를 초대합니다.
  7. 클릭 초대 초대

2.6 단계: JSON 키를 확인하세요.

다운로드한 JSON 파일은 다음과 같은 형태여야 합니다.

{
  "type": "service_account",
  "project_id": "your-project-id",
  "private_key_id": "...",
  "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
  "client_email": "github-actions-uploader@your-project-id.iam.gserviceaccount.com",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "..."
}

이것을 GitHub secret 설정 단계에서 base64로 변환합니다.

3. Fastlane 설정

Create a fastlane 프로젝트 루트에 폴더를 만들고 다음 내용을 추가하세요: Fastfile 4. __CAPGO_KEEP_0__ 비밀 설정

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'])
        
        # Get previous build number and increment
        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}")
        
        # Build the app
        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
        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
end

4. Configure GitHub Secrets

4.1 단계: GitHub 비밀 설정 접근

GitHub에 접속하여

  1. Go to your repository on GitHub
  2. 비밀 및 변수 액션4. Configure __CAPGO_KEEP_0__ SecretsNow that you have your keystore and service account JSON, you need to store them securely in __CAPGO_KEEP_0__.
  3. 클릭 새로운 저장소 비밀

4.2 단계: 필요한 비밀 추가

이러한 비밀 각각을 하나씩 추가하세요:

PLAY_CONFIG_JSON

  1. 2.4 단계에서 다운로드한 서비스 계정 JSON 파일을 가져옵니다.
  2. base64로 변환하세요:

맥OS/Linux:

base64 service_account_key.json | pbcopy

Windows (PowerShell):

[Convert]::ToBase64String([IO.File]::ReadAllBytes("service_account_key.json")) | Set-Clipboard
  1. 새 비밀을 만들고 이름을 PLAY_CONFIG_JSON base64 문자열을 붙여넣으세요.

ANDROID_KEYSTORE_FILE

  1. Base64로 키스토어를 변환하세요:

macOS/Linux에서:

base64 my-release-key.keystore | pbcopy

Windows (PowerShell)에서:

[Convert]::ToBase64String([IO.File]::ReadAllBytes("my-release-key.keystore")) | Set-Clipboard
  1. 키스토어의 키 별칭을 사용하여 새로운 비밀을 생성하세요. ANDROID_KEYSTORE_FILE 키스토어의 base64 문자열을 붙여넣으세요.

KEYSTORE_KEY_ALIAS

키스토어를 생성할 때 사용한 키 별칭을 사용하여 새로운 비밀을 생성하세요. my-key-alias)

KEYSTORE_KEY_PASSWORD

키스토어를 생성할 때 사용한 키 비밀번호를 사용하여 새로운 비밀을 생성하세요.

KEYSTORE_STORE_PASSWORD

키스토어를 생성할 때 사용한 키 저장소 비밀번호를 사용하여 새로운 비밀을 생성하세요.

DEVELOPER_PACKAGE_NAME

새로운 비밀을 생성하세요. (예: com.example.app)

패키지 이름을 찾으려면 android/app/build.gradle 아래 applicationId

4.3 단계: 모든 비밀을 확인하세요

6개의 비밀을 구성했는지 확인하세요:

  • ✅ PLAY_CONFIG_JSON
  • ✅ ANDROID_KEYSTORE_FILE
  • ✅ KEYSTORE_KEY_ALIAS
  • ✅ KEYSTORE_KEY_PASSWORD
  • ✅ KEYSTORE_STORE_PASSWORD
  • ✅ DEVELOPER_PACKAGE_NAME

5. GitHub Actions Workflow을 생성하세요

__CAPGO_KEEP_0__ .github/workflows/build-upload-android.yml:

name: Build and Deploy Android App

on:
  push:
    tags:
      - '*'

jobs:
  build_android:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      
      - name: Setup Node.js
        uses: actions/setup-node@v6
        with:
          node-version: 24
          cache: npm
          
      - name: Install dependencies
        run: npm ci
        
      - name: Cache Gradle
        uses: actions/cache@v5
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: |
            ${{ runner.os }}-gradle-
            
      - name: Build app
        run: npm run build
        
      - name: Sync Capacitor
        run: npx cap sync
        
      - name: Setup Java
        uses: actions/setup-node@v5
        with:
            distribution: 'zulu'
            java-version: '17'
            
      - name: Setup Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.0'
          bundler-cache: true
          
      - name: Run Fastlane
        uses: maierj/fastlane-action@v3.1.0
        env:
          PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }}
          ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }}
          DEVELOPER_PACKAGE_NAME: ${{ secrets.DEVELOPER_PACKAGE_NAME }}
          KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }}
          KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }}
          KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }}
        with:
          lane: android beta
          
      - name: Upload artifact
        uses: actions/upload-artifact@v2
        with:
          name: android-release
          path: ./android/app/build/outputs/bundle/release/app-release.aab
          retention-days: 10

__CAPGO_KEEP_1__

  1. __CAPGO_KEEP_2__
  2. GitHub Actions builds your app
  3. __CAPGO_KEEP_4__
  4. __CAPGO_KEEP_5__

__CAPGO_KEEP_6__

  • __CAPGO_KEEP_7__
  • __CAPGO_KEEP_8__
  • __CAPGO_KEEP_9__

__CAPGO_KEEP_11__

대안 CI/CD 플랫폼

실시간 업데이트 및 배포

Resources

Capacitor Android 빌드 자동화와 GitHub 액션으로 계속 진행하세요

자동 __CAPGO_KEEP_0__ Android 빌드를 사용하여 CI/CD 자동화 계획을 만드는 경우 Capacitor Android 빌드 자동화와 GitHub 액션을 연결하세요 __CAPGO_KEEP_0__ CI/CD Capgo 제품 워크플로우에서 Capgo CI/CD를 위해 Capgo 네이티브 빌드 제품 워크플로우에서 Capgo 네이티브 빌드를 위해 Capgo 통합 제품 워크플로우에서 Capgo 통합을 위해 CI/CD 통합 CI/CD 통합의 구현 세부 사항, 그리고 GitHub 액션 통합 for the implementation detail in GitHub Actions Integration.

실시간 업데이트 Capacitor 앱

Capgo 웹-layer 버그가 활성화된 경우, 앱 스토어 승인까지 며칠 기다리지 않고 바로 픽스를 배포할 수 있습니다. 사용자는 배경에서 업데이트를 받으면서 네이티브 변경 사항은 일반적인 검토 경로에 남아 있습니다.

시작하기

블로그에서 최신 뉴스

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