“나도 이제 CD 마스터?”
CD란?
우테코 4차 데모데이 요구사항에 있었던 CD.. CD란 무엇인가?
CD(Continuous Deployment)란 개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 것을 의미한다.
개발한 안드로이드 앱을 구글 플레이 콘솔에 배포하기 위해서는 다음과 같은 작업을 거쳐야 한다.
1.
안드로이드 스튜디오에서 AAB 파일을 빌드한다.
2.
구글 플레이 콘솔에 접속한다.
3.
빌드된 AAB 파일을 구글 플레이 콘솔에 업로드한다.
하지만 이를 개발자가 직접 하게 되면 상당히 귀찮고 시간이 오래걸리며, 실수할 가능성도 있다!! 따라서 이 과정을 수동이 아닌 자동으로 이루어지도록 설정한다면, 안전하고 편하게 앱을 배포할 수 있다. ㅎㅎ 이것이 바로 CD 인 것이다!
CD를 어떻게 진행해야 하지?
Google Cloud 개발자 API 등록
↑ 젠킨스를 썼지만 구글 플레이 콘솔과 구글 클라우드 설정에 대해서 잘 설명이 되어있다.
1.
Google Cloud 서비스 계정 만들기 (역할 선택 소유자)
2.
계정의 이메일을 Google Play Console 사용자 및 권한에 신규 사용자로 초대
3.
앱 권한 적용
위의 단계를 잘 따라서 설정해주자!
Key Store 생성
ENCODED_KEYSTORE (Keystore을 base64를 통해 Encoded)
base64 -in /path/to/your/upload-keystore.jks -out keystore.txt
JavaScript
복사
Key alias
Key store password
Key password
위의 값들을 Github Actions Secrets에 추가해 주어야 한다.
CD 구축 과정
Pull Request
Github Action
실제 Google Play Console에 등록 (현재는 비공개 테스트 트랙)
주요 코드
deploy:
runs-on: ubuntu-latest
# needs: build_and_test
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Create google-services.json
env:
GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }}
run: |
echo "$GOOGLE_SERVICES_JSON" > app/google-services.json
- name: Create service_account.json
id: createServiceAccount
run: echo '${{ secrets.SERVICE_ACCOUNT_JSON }}' > app/service_account.json
- name: Set up environment variable for BuildConfig
env:
BASE_URL: ${{ secrets.BASE_URL }}
TOKEN: ${{ secrets.TOKEN }}
NATIVE_APP_KEY: ${{ secrets.NATIVE_APP_KEY }}
run: |
echo "base_url=$BASE_URL" >> ./local.properties
echo "token=$TOKEN" >> ./local.properties
echo "native_app_key=$NATIVE_APP_KEY" >> ./local.properties
- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', '**/buildSrc/**/*.kt') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build release AAB
run: ./gradlew bundleRelease
- name: Sign AAB
id: sign
uses: r0adkll/sign-android-release@v1
with:
releaseDirectory: ./android/app/build/outputs/bundle/release
output: ./android/build/release/signed
signingKeyBase64: ${{ secrets.ENCODED_KEYSTORE }}
alias: ${{ secrets.AN_ALIAS }}
keyStorePassword: ${{ secrets.AN_KEYSTORE_PASSWORD }}
keyPassword: ${{ secrets.AN_KEY_PASSWORD }}
- name: Upload AAB to Google Play
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
packageName: com.zzang.chongdae
releaseFiles: ./android/app/build/outputs/bundle/release/app-release.aab
track: "총대마켓 - 비공개 테스트"
JavaScript
복사
참고자료
삽질 기록
업로드 키