본문 바로가기

2026년 Android 앱을 위한 최적의 CI/CD 플랫폼 비교

2026년 Android CI/CD 플랫폼 비교: GitHub Actions, GitLab, Bitrise, Codemagic, Appcircle, CircleCI, Azure DevOps, 그리고 AAB 빌드를 위한 Capgo Build.

CI/CD 파이프라인을 거쳐 Google Play 트랙으로 이동하는 Android app bundle

Android 앱에 가장 적합한 CI/CD 플랫폼은 이미 쓰고 있는 플랫폼인 경우가 많습니다. Android 빌드에는 Linux, Java, Android SDK, Gradle만 있으면 되니까요. 플랫폼 간 차이는 빌드 주변에서 드러납니다. keystore를 어떻게 보관하는지, Google Play 트랙에 어떻게 업로드하는지, Gradle 캐싱으로 반복 빌드가 얼마나 빨라지는지, 같은 플랫폼에서 iOS까지 처리하는지가 핵심입니다. 이번 비교에서는 GitHub Actions, GitLab CI, Bitrise, Codemagic, Appcircle, CircleCI, Azure DevOps, 그리고 Capgo Build를 다룹니다.

2026년 Android 릴리스 흐름

모든 Android 파이프라인은 대략 다음과 같은 과정을 거칩니다:

  1. JDK와 Android SDK를 설치합니다(또는 이들이 포함된 이미지를 사용).
  2. 실행 ./gradlew bundleRelease.
  3. AAB에 서명할 때 사용하는 키는 키 업로드.
  4. Google Play Developer API를 통해 Play Console 트랙(내부, 비공개, 공개, 프로덕션)에 업로드합니다.
  5. 선택적으로 일정 비율의 사용자에게 배포할 수 있습니다.

모든 플랫폼이 지켜야 하는 규칙:

  • 신규 앱은 AAB가 필수입니다 Google Play에서 Google은 자체 보유한 앱 서명 키로 전달된 APK에 다시 서명합니다(Play App Signing).
  • 타깃 API 레벨은 매년 올라갑니다. Google은 최소 요구 사항을 targetSdkVersion 매년 8월 업데이트에 적용됩니다. Capacitor 8은 이미 API 36을 대상으로 합니다.
  • 16 KB 페이지 크기. 최신 기기는 16 KB 메모리 페이지를 사용하며, Play에서는 업데이트된 앱의 네이티브 라이브러리가 이를 지원할 것을 요구합니다. 다음을 참조하세요: Capacitor 플러그인을 위한 Android 16 KB 페이지 크기.
  • JDK 21 은 Capacitor 7 및 8 프로젝트와 최신 Android Gradle Plugin 버전의 기준입니다.

기능 매트릭스

플랫폼 러너 Keystore 저장소 Play 업로드 Gradle 캐시 iOS도 가격 모델
GitHub 작업 호스티드 Linux, 셀프호스티드 암호화된 시크릿 fastlane, Gradle Play Publisher 또는 커뮤니티 액션 gradle/actions/setup-gradle 예, macOS 러너 분당 과금, Linux가 가장 저렴; 공개 저장소 무료
GitLab CI 호스팅 Linux, 자체 관리 CI/CD 변수, 보안 파일 fastlane, Google Play 연동 cache: 키 예, macOS 베타 티어별 컴퓨팅 시간(분)
Bitrise 호스팅 Linux 스택 관리형 code 서명 파일 Google Play 배포 스텝 내장 캐시 스텝 지원 빌드 분당 크레딧
Codemagic 호스팅된 Linux 및 Mac 명명된 keystore 참조 기본 제공, 트랙 및 롤아웃 비율 내장됨 지원 분당 또는 연간 플랜
Appcircle 호스팅 또는 셀프호스팅 서버 서명 ID 저장소 Publish 모듈 내장됨 지원 요금제, 엔터프라이즈 셀프 호스팅
CircleCI 호스팅 Linux (cimg/android), 셀프호스팅 컨텍스트 및 환경 변수 fastlane 또는 스크립트 save_cache/restore_cache 지원 분당 크레딧
Azure DevOps Microsoft 호스팅, 셀프호스팅 보안 파일 Google Play 확장 작업 Cache@2 지원 병렬 작업
Capgo 빌드 Capgo 관리형, 모든 CI에서 호출 가능 빌드마다 CI 시크릿에서 전송됨 내장된 트랙 및 상태 플래그 앱별 빌드 캐시 지원 빌드 시간(분) 보기 가격

Xcode Cloud은 Apple 플랫폼만 빌드하기 때문에 표에 포함되지 않았습니다. Capgo Build는 Capacitor 앱만 빌드하며, 이 표의 다른 플랫폼들은 네이티브 Kotlin 및 Java 프로젝트도 빌드합니다.

플랫폼별로

GitHub 작업

Java와 Android SDK가 사전 설치된 Linux 러너에서 ubuntu-latest, 따라서 ./gradlew bundleRelease 이후 작동합니다 actions/setup-java. gradle/actions/setup-gradle Gradle 캐싱을 잘 처리합니다. 에뮬레이터 테스트는 KVM을 통해 커뮤니티 액션(예: )을 사용하여 Linux 러너에서 실행됩니다. reactivecircus/android-emulator-runner.

서명은 시크릿에서 keystore를 디코딩하고 Gradle properties를 통해 비밀번호를 전달하는 것을 의미합니다. 업로드는 fastlane supply, Gradle Play Publisher 플러그인, 또는 커뮤니티 액션을 사용합니다. 관리되는 것은 없지만 숨겨진 것도 없으며, Linux 분당 비용은 가장 저렴합니다. 가이드: GitHub Actions를 사용한 자동 Capacitor Android 빌드.

GitLab CI

GitLab에서도 마찬가지입니다: Android SDK가 포함된 어떤 Docker 이미지든 공유 Linux 러너에서 작동합니다. GitLab의 Mobile DevOps 기능에는 keystore를 위한 보안 파일과 서비스 계정을 작업에 노출하는 Google Play 통합 기능이 포함되어 있어 fastlane 설정에서 일부 불필요한 코드를 제거할 수 있습니다. 가이드: GitLab에서 자동 Capacitor Android 빌드.

Bitrise

Bitrise의 Android 지원은 Android Build, Android Sign, Google Play Deploy 및 테스트/에뮬레이터 스텝 중심으로 구성됩니다. Keystore는 앱의 code 서명 설정에 한 번만 업로드하면 됩니다. Google Play Deploy 스텝은 트랙과 단계적 롤아웃 비율을 지원합니다. 크레딧 단위로 과금되므로 iOS보다 Android 빌드가 저렴하지만, 여전히 일반 Linux 러너보다는 비쌉니다. UI 기반 워크플로 편집기를 원하는 모바일 팀에 적합합니다.

Codemagic

Codemagic은 keystore를 이름이 지정된 참조로 저장하며, 이 참조는 codemagic.yaml 가리키는 대상이므로 파일이 저장소나 로그에 절대 나타나지 않습니다. google_play publishing 블록에서는 트랙, 롤아웃 비율, 초안 제출 여부를 설정합니다. 네이티브 Android, Flutter, React Native, Ionic, Capacitor을 빌드합니다. 과금은 빌드 분당 또는 연간 고정 플랜입니다.

Appcircle

Appcircle은 keystore를 signing identities 모듈에 저장하고, publish flow를 통해 Google Play에 배포하며 테스터 배포와 엔터프라이즈 앱 스토어도 지원합니다. 규제 대상 팀이 Appcircle을 선택하는 주된 이유는 self-hosted Appcircle Server 옵션입니다. code와 키가 네트워크를 벗어나지 않습니다.

CircleCI

CircleCI는 cimg/android SDK가 설치된 Docker 이미지와 에뮬레이터 테스트 및 캐싱을 돕는 Android orb를 배포합니다. 서명과 업로드는 스크립트나 fastlane으로 처리합니다. 과금은 크레딧 방식이며, Linux Docker executor가 가장 저렴한 리소스 클래스입니다. 이미 CircleCI로 나머지 스택을 운영 중이라면 합리적인 선택입니다.

Azure DevOps

Azure Pipelines는 각 단계마다 공식 태스크를 제공합니다: Gradle@3 빌드용, AndroidSigning@3 서명과 zipalign, keystore용 보안 파일, 트랙 업로드와 단계적 출시를 위한 Google Play 확장의 release task까지 처리합니다. 요금은 병렬 job 단위로 책정됩니다. App Center의 Android 빌드를 쓰던 팀에게 자연스러운 선택지입니다.

Capgo 빌드

Capgo 빌드 CI에서 호출하는 Capacitor 앱용 빌드 서비스입니다. 작업은 이렇게 실행됩니다. bun run build 및 bunx cap sync android, 그런 다음:

bunx @capgo/cli@latest build request com.example.app \
  --platform android \
  --build-mode release \
  --android-track internal

Capgo는 자체 빌드 머신에서 Gradle을 실행하고, keystore로 서명하며, Google Play에서 가장 높은 버전을 versionCode 읽어와 버전을 올린 뒤, 선택한 트랙에 AAB를 업로드합니다. --android-release-status, --android-flavor, 그리고 --submit-to-store-review 나머지는 직접 제어할 수 있습니다. Google Play 외부용 APK 빌드(키오스크 기기, MDM)의 경우, --no-playstore-upload --output-upload 대신 다운로드 링크를 반환합니다.

설정은 단계별로 안내됩니다: bunx @capgo/cli@latest build init --platform android keystore를 생성하거나 가져오고, Google sign-in으로 Google Cloud 서비스 계정과 Play Console 초대를 프로비저닝할 수 있습니다. 대부분의 팀이 수동으로 하다가 틀리는 단계죠.

솔직히 말하면, Linux runner는 어디서나 저렴하기 때문에 Android는 Capgo Build가 가장 적게 절약되는 플랫폼입니다. Android에서의 가치는 iOS 파이프라인과의 일관성, 자동 버전 코드, CI에서 Android SDK나 JDK를 관리할 필요가 없다는 점, 그리고 동일한 CLI 배포 방식입니다. Live Update 웹 전용 변경 사항을 위한 것입니다. 빌드 1회는 10분으로 제한됩니다.

Android 페인 포인트와 플랫폼별 해결 방식

Keystore 분실

예전에는 keystore를 잃어버리면 앱을 다시는 업데이트할 수 없었습니다. Play App Signing을 쓰면 보유한 keystore는 업로드 키일 뿐이고, Play Console 지원팀이 새 업로드 키를 등록해 줄 수 있습니다. 그래도 오프라인 백업은 꼭 챙기세요. 위의 모든 플랫폼은 keystore를 암호화해 저장하므로, 위험은 보통 개발자 노트북에 있는 사본입니다. 새 키가 필요하면, Android 키스토어 생성기 브라우저에서 생성해 줍니다.

버전 code 충돌

Play는 이미 사용된 versionCode 업로드를 거부합니다. 옵션: CI 실행 번호(GitHub, GitLab, CircleCI)에서 가져오거나, 플랫폼의 빌드 번호 변수(Bitrise, Codemagic, Appcircle)를 사용하거나, Capgo Build가 Play에서 최신 값을 읽어 증가시키게 하세요.

느린 Gradle 빌드

Capacitor Android 콜드 빌드는 수백 MB의 의존성을 다운로드합니다. 캐싱은 ~/.gradle/caches 및 ~/.gradle/wrapper 반복 빌드를 훨씬 빠르게 만듭니다. Gradle에 메모리를 충분히 할당하세요. gradle.properties (org.gradle.jvmargs=-Xmx4g호스팅 러너에서는 iOS와 Android를 순차적이 아닌 병렬 작업으로 빌드하세요.

Plugin 및 AGP 업그레이드

새로운 Android Gradle Plugin 버전에서는 이전 플러그인이 깨질 수 있습니다. 프로젝트에서 AGP를 고정하고 브랜치에서 업그레이드하세요. 구체적인 수정 사항은 AGP 9에서 Capacitor 플러그인 빌드 오류 해결하기 및 Capacitor에서 Android 빌드 오류 해결 방법.

Play 서비스 계정 권한

“호출자가 권한이 없습니다”는 가장 흔한 업로드 오류입니다. 서비스 계정은 Play Console의 사용자 및 권한에서 앱에 대한 릴리스 권한을 부여받아 초대되어야 하며, Google Cloud 프로젝트에서 Google Play Android Developer API가 활성화되어 있어야 합니다. 신규 서비스 계정은 API이 이를 인식하는 데 시간이 걸릴 수 있습니다.

선택 가이드

현재 상황 적합한 경우
Android 전용, 이미 GitHub 또는 GitLab 사용 중 GitHub Actions 또는 GitLab CI
시각적 워크플로 편집기를 원하는 네이티브 Android 팀 Bitrise
YAML로 관리형 키스토어 및 Play 게시를 원하는 크로스 플랫폼 팀 Codemagic
모든 것을 직접 호스팅해야 함 Appcircle 서버 또는 자체 호스팅 러너
App Center, Microsoft 스택에서 넘어온 경우 Azure DevOps
Capacitor 앱을 운영하며, 어떤 CI에서든 하나의 CLI로 Android와 iOS를 모두 처리하고 싶다면 Capgo 빌드

같은 결정에서 iOS 쪽은 다음을 읽어보세요. iOS 앱용 CI/CD 플랫폼 비교. Capacitor 앱, 특히 라이브 업데이트 관련 내용은 다음을 참조하세요. Capacitor 앱을 위한 CI/CD 플랫폼 비교.

마이그레이션 전 체크리스트

  • upload keystore 파일과 두 비밀번호를 확보했는지, 그리고 alias가 일치하는지 확인하세요.
  • Play Console에서 어떤 인증서가 upload key로 등록되어 있는지 확인하고, 해당 SHA-1을 다음 항목과 비교하세요. keytool -list -v -keystore release.jks.
  • 개인 계정을 재사용하는 대신, 새로운 CI를 위한 전용 서비스 계정을 생성하세요.
  • Capacitor 8 프로젝트의 경우, 새 플랫폼이 JDK 21로 빌드되는지 확인하세요.
  • 프로덕션 릴리스로 전환하기 전에 내부 트랙에 한 번 업로드하세요.
Capacitor 앱용 Live updates

웹 레이어 버그가 라이브 상태라면, 앱 스토어 승인을 며칠씩 기다리지 말고 Capgo를 통해 수정 사항을 배포하세요. 네이티브 변경 사항은 정상 리뷰 절차를 그대로 따르는 반면, 사용자는 백그라운드에서 업데이트를 받습니다.

블로그 최신 글

Capgo는 정말 프로페셔널한 모바일 앱을 만드는 데 필요한 최고의 인사이트를 제공합니다.