본문으로 바로가기
CI/CD

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

How to set up a CI/CD pipeline for your Android Capacitor app using fastlane and GitHub Actions in 5 minutes

마틴 도나디우

마틴 도나디우

콘텐츠 마케터

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

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

__CAPGO_KEEP_0__ 빌드와 __CAPGO_KEEP_1__ __CAPGO_KEEP_2__ Capgo Build with the Capgo CLI Capacitor 빌드 이 Fastlane 가이드는 기존 GitHub 액션 PIPELINE을 유지하는 팀을 위해 유지됩니다. 그러나 새로운 안드로이드 빌드는 Fastlane, Gradle 런너, 키 스토어, 업로드 스크립트를 유지 관리하지 않도록 Capgo CLI를 사용하세요.

기본 조건

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

  • GitHub 계정에 관리자 권한이 있는 계정
  • Google Play Store에 올려져 있는 앱
  • Android signing 키 및 keystore 파일
  • Play Store API가 활성화된 Google Cloud Console 프로젝트
  • 권한이 있는 서비스 계정
  • GitHub Actions 워크플로우에 대한 이해
  • Fastlane 구성에 대한 지식
  • pipeline 유지 및 디버깅에 필요한 시간

Capgo Build for CI/CD by Capgo

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

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

가격

  • Capgo 플랜은 $12/월부터 시작됩니다.
  • Includes OTA 업데이트와 매월 약 15개의 네이티브 빌드
  • 추가 빌드 분은 분당 크레딧을 통해 청구됩니다

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 Actions 워크플로우 만들기

1. Android 키스토어 만들기

Android 앱을 서명하고 배포하기 전에 키스토어 파일을 만들야 합니다. 이건 한 번만 설정합니다.

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

터미널에서 이 명령어를 실행하세요.

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

다음과 같은 정보를 입력하실 거에요.

  • 키스토어 비밀번호: 강력한 비밀번호를 선택하세요 (이 비밀번호가 필요합니다) KEYSTORE_STORE_PASSWORD)
  • 비밀 키: 강력한 비밀번호를 선택하세요 (이것을 필요로 할 것입니다 KEYSTORE_KEY_PASSWORD)
  • 이름, 조직 등: 세부 정보를 입력하세요

중요한 참고 사항

  • 이 값을 안전하게 저장하세요:

    • 키 스토어 파일 위치 (예시, my-release-key.keystore)
    • 키 별칭 (예시, my-key-alias) - 이것을 필요로 할 것입니다 KEYSTORE_KEY_ALIAS
    • 키 스토어 비밀번호 - 이것을 필요로 할 것입니다 KEYSTORE_STORE_PASSWORD
    • 비밀 키 - 이것을 필요로 할 것입니다 KEYSTORE_KEY_PASSWORD
  • 키 스토어 파일 백업: 앱을 업데이트할 수 없으므로 잃어버리지 마세요.

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

  • 안전한 곳에 보관하라.: 여러 백업을 안전한 위치에 만들어라.

대안: 기존 키 스토어 사용

앱을 이미 출시한 경우, 처음으로 사용한 키 스토어를 사용해야 합니다. 키 스토어를 찾을 수 있습니다:

  • 앱을 처음으로 빌드한 로컬 머신에서
  • Play Console → 설정 → 앱 서명 (Google Play App Signing 사용 시)

2. Google Play Service Account 설정

To allow GitHub Actions to upload builds to Google Play, you need a service account.

Step 2.1: Google Cloud 프로젝트 만들기

  1. Go to Google Cloud Console
  2. 새로운 프로젝트를 생성하거나 기존 프로젝트를 선택하세요
  3. 프로젝트 ID를 기록하세요

Step 2.2: Google Play Developer API를 활성화하세요

  1. Google Cloud Console에서 APIs & ServicesLibrary
  2. Google Play Android Developer API를 검색하세요
  3. Click Enable

Step 2.3: Service Account를 생성하세요

  1. Go to IAM & AdminService Accounts
  2. Click Create Service Account
  3. Enter details:
    • Name: github-actions-uploader
    • GitHub 액션을 위한 빌드 업로드를 위한 서비스 계정
  4. Click 생성 및 계속
  5. Skip role assignment for now (click 계속그런 다음 완료)

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

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

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

  1. 이동 Google Play 콘솔
  2. 이동 설정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 설정

앱을 만들고 fastlane 프로젝트 루트 폴더에 폴더를 만들고 추가하십시오. Fastfile __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. GitHub 비밀을 구성하십시오.

키 스토어와 서비스 계정 JSON을 받은 후, GitHub에서 안전하게 저장하십시오.

4.1 단계: GitHub 비밀에 접근하십시오.

  1. GitHub에 접속하여 GitHub에 접속하십시오.
  2. GitHub 설정비밀 및 변수액션
  3. 새로운 저장소 비밀 추가 새로운 저장소 비밀 추가

Step 4.2: Capgo에 필요한 Secret를 추가하세요

이러한 secret를 하나씩 추가하세요:

__CAPGO_KEEP_0__

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

macOS/Linux에서:

base64 service_account_key.json | pbcopy

Windows (PowerShell)에서:

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

__CAPGO_KEEP_1__

  1. Android 키스토어 파일을 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 under applicationId

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

6 가지 비밀을 설정했는지 확인하세요:

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

5. GitHub 액션 워크플로우를 생성하세요

만들기 .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

작동 방식

  1. __CAPGO_KEEP_0__ Git 태그를 생성하여 워크플로우를 트리거합니다.
  2. GitHub Actions는 앱을 빌드합니다.
  3. Fastlane은 Google Play 베타 채널에 앱을 업로드합니다.
  4. 앱은 자동으로 업데이트됩니다.

빌드 시간 및 비용

  • 빌드 시간: 3-5분
  • 비공개 저장소당 빌드 비용: ~$0.04
  • 공개 소스 프로젝트는 무료입니다.

CI/CD 설정 가이드

대안 CI/CD 플랫폼

라이브 업데이트 및 배포

자원

Keep going from Automatic Capacitor Android build with GitHub actions

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

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

웹层 버그가 실시간으로 활성화되면 Capgo을 통해 픽스를 배포하는 대신 앱 스토어 승인까지 며칠 기다리지 마세요. 사용자는 배경에서 업데이트를 받으면서 네이티브 변경 사항은 일반적인 검토 경로에 남아 있습니다.

시작하기

블로그에서 최신 소식

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