튜토리얼: GitLab Mobile DevOps로 Android 앱 빌드
이 튜토리얼에서는 GitLab CI/CD를 사용하여 Android 모바일 앱을 빌드하고, 자격 증명으로 서명하며, 앱 스토어에 배포하는 파이프라인을 만듭니다. Mobile DevOps를 설정하려면: 이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:
이 튜토리얼에서는 GitLab CI/CD를 사용하여 Android 모바일 앱을 빌드하고, 자격 증명으로 서명하며, 앱 스토어에 배포하는 파이프라인을 만듭니다.
Mobile DevOps를 설정하려면:
시작하기 전에#
이 튜토리얼을 시작하기 전에 다음이 있는지 확인합니다:
- CI/CD 파이프라인에 액세스할 수 있는 GitLab 계정
- GitLab 리포지터리에 있는 모바일 앱 코드
- Google Play 개발자 계정
- 로컬에 설치된
fastlane
빌드 환경 설정#
GitLab 호스팅 러너를 사용하거나, 빌드 환경을 완전히 제어하려면 자체 관리 러너를 설정합니다.
Android 빌드는 여러 Android API 버전을 제공하는 Docker 이미지를 사용합니다.
-
리포지터리 루트에
.gitlab-ci.yml파일을 만듭니다. -
Fabernovel의 Docker 이미지를 추가합니다:
test: image: fabernovel/android:api-33-v1.7.0 stage: test script: - fastlane test
fastlane과 Gradle로 코드 서명 구성#
Android에 대한 코드 서명을 설정하려면:
-
키스토어를 만듭니다:
-
다음 명령을 실행하여 키스토어 파일을 생성합니다:
keytool -genkey -v -keystore release-keystore.jks -storepass password -alias release -keypass password \ -keyalg RSA -keysize 2048 -validity 10000 -
release-keystore.properties파일에 키스토어 구성을 저장합니다:storeFile=.secure_files/release-keystore.jks keyAlias=release keyPassword=password storePassword=password -
두 파일 모두 프로젝트 설정에서 Secure Files로 업로드합니다.
-
버전 관리에 커밋되지 않도록 두 파일을
.gitignore파일에 추가합니다.
-
-
새로 만든 키스토어를 사용하도록 Gradle을 구성합니다. 앱의
build.gradle파일에서:-
plugins 섹션 바로 뒤에 다음을 추가합니다:
def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('.secure_files/release-keystore.properties') if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } -
android블록 안에 다음을 추가합니다:signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword keystoreProperties['storePassword'] } } -
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 스토어에 업로드할 수 있습니다.
- Google Cloud Platform에서 Google 서비스 계정을 만들고 Google Play의 프로젝트에 대한 액세스 권한을 부여합니다.
- Google Play 통합을 활성화합니다:
- 상단 표시줄에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 통합을 선택합니다.
- Google Play를 선택합니다.
- 통합 활성화 아래에서 활성 체크박스를 선택합니다.
- 패키지 이름에 앱의 패키지 이름을 입력합니다. 예:
com.gitlab.app_name. - **서비스 계정 키 (.JSON)**에서 키 파일을 드래그하거나 업로드합니다.
- 변경 사항 저장을 선택합니다.
- 파이프라인에 릴리스 단계를 추가합니다.
다음은 샘플 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 섹션을 참조하세요.
