1+ # CD-GooglePlay-Production.yml - Google Play Console 프로덕션 배포 워크플로우
2+ name : Google Play Production Release CD
3+
4+ # # 워크플로우 트리거 설정
5+ # on:
6+ # push:
7+ # tags:
8+ # - 'v*' # 'v'로 시작하는 태그(예: v1.0.0)가 푸시되었을 때만 트리거
9+
10+ jobs :
11+ google_play_production :
12+ name : Google Play Production Release
13+ runs-on : ubuntu-latest
14+
15+ steps :
16+ - name : 코드 체크아웃
17+ uses : actions/checkout@v4
18+
19+ - name : JDK 17 설정
20+ uses : actions/setup-java@v4
21+ with :
22+ distribution : ' temurin'
23+ java-version : ' 17'
24+
25+ - name : Gradle 캐시 설정
26+ uses : actions/cache@v4
27+ with :
28+ path : |
29+ ~/.gradle/caches
30+ ~/.gradle/wrapper
31+ key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
32+ restore-keys : |
33+ ${{ runner.os }}-gradle-
34+
35+ - name : local.properties 설정
36+ run : |
37+ echo "base.url=\"${{ secrets.BASE_URL }}\"" >> local.properties
38+ echo "cloud.vision.api.key=\"${{ secrets.CLOUD_VISION_API_KEY }}\"" >> local.properties
39+
40+ - name : google-services.json 설정
41+ # Firebase 서비스에 필요한 google-services.json 파일을 Secrets에서 가져옵니다.
42+ run : |
43+ echo "google-services.json 파일을 설정합니다..."
44+ echo '${{ secrets.GOOGLE_SERVICES_JSON }}' > ./app/google-services.json
45+ if [ -f ./app/google-services.json ]; then
46+ echo "google-services.json이 ./app/google-services.json에 성공적으로 생성되었습니다."
47+ else
48+ echo "오류: ./app/google-services.json에서 google-services.json을 찾을 수 없습니다."
49+ exit 1
50+ fi
51+ shell : bash
52+
53+ - name : 출시 서명 키 설정
54+ # Android App Bundle 서명을 위한 키스토어 파일을 Base64로 인코딩된 Secrets에서 디코딩하여 생성합니다.
55+ run : |
56+ echo "${{ secrets.SIGNING_KEY_BASE64 }}" | base64 --decode > android_signing_key.jks
57+
58+ - name : gradlew 실행 권한 부여
59+ run : chmod +x ./gradlew
60+
61+ - name : 릴리스 AAB 빌드 (Google Play 프로덕션용)
62+ # Google Play Console 배포를 위해 릴리스 AAB를 빌드합니다.
63+ run : ./gradlew bundleRelease
64+ env :
65+ # 서명 환경 변수
66+ ORG_GRADLE_PROJECT_signingStoreFile : android_signing_key.jks
67+ ORG_GRADLE_PROJECT_signingKeyAlias : ${{ secrets.SIGNING_KEY_ALIAS }}
68+ ORG_GRADLE_PROJECT_signingKeyPassword : ${{ secrets.SIGNING_KEY_PASSWORD }}
69+ ORG_GRADLE_PROJECT_signingStorePassword : ${{ secrets.SIGNING_STORE_PASSWORD }}
70+
71+ - name : Google Play Console 프로덕션 배포
72+ # 빌드된 릴리스 AAB를 Google Play Console 프로덕션 트랙으로 배포합니다.
73+ uses : r0adkll/upload-google-play@v1
74+ with :
75+ serviceAccountJson : ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_KEY }}
76+ packageName : your.package.name # 서비스명 확정 후 앱의 실제 패키지 이름으로 변경해야 합니다.
77+ releaseFile : app/build/outputs/bundle/release/app-release.aab
78+ track : production # 프로덕션 트랙으로 지정
79+ status : completed # 출시 상태를 'completed'로 설정하여 즉시 출시되도록 합니다.
80+
81+ - name : Slack 알림 (Google Play 프로덕션 배포 성공)
82+ if : success()
83+ uses : rtCamp/action-slack-notify@v2
84+ env :
85+ SLACK_WEBHOOK_URL : ${{ secrets.SLACK_WEBHOOK_URL }}
86+ SLACK_CHANNEL : ' #client-actions'
87+ SLACK_MESSAGE : " 🚀 Google Play 프로덕션 배포 성공! 태그: `${{ github.ref_name }}` 커밋: `${{ github.sha }}`"
88+
89+ - name : Slack 알림 (Google Play 프로덕션 배포 실패)
90+ if : failure()
91+ uses : rtCamp/action-slack-notify@v2
92+ env :
93+ SLACK_WEBHOOK_URL : ${{ secrets.SLACK_WEBHOOK_URL }}
94+ SLACK_CHANNEL : ' #client-actions'
95+ SLACK_MESSAGE : " 🚨 Google Play 프로덕션 배포 실패! 태그: `${{ github.ref_name }}` 커밋: `${{ github.sha }}`"
96+ SLACK_COLOR : ' danger'
0 commit comments