Skip to content

Commit 4ea24d5

Browse files
authored
Merge pull request #35 from min486/feature/ci-cd-setup
feat: CI/CD 설정 파일 추가 및 release 서명 설정
2 parents 1e7d75b + 1aced58 commit 4ea24d5

File tree

3 files changed

+136
-3
lines changed

3 files changed

+136
-3
lines changed

.github/workflows/cd_release.yml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
name: Android CD Release
2+
3+
on:
4+
push:
5+
branches:
6+
- master # master 브랜치에 push 될 때 실행
7+
8+
jobs:
9+
release:
10+
runs-on: ubuntu-latest
11+
12+
# Secrets를 환경 변수로 정의하여 run 스크립트에서 $변수 형태로 사용 가능
13+
env:
14+
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
15+
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
16+
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
17+
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
18+
19+
steps:
20+
- name: Checkout Code
21+
uses: actions/checkout@v4
22+
23+
- name: Set up JDK 17
24+
uses: actions/setup-java@v4
25+
with:
26+
distribution: 'temurin'
27+
java-version: '17'
28+
29+
- name: Make gradlew executable
30+
run: chmod +x ./gradlew
31+
32+
# Secrets에서 Base64 문자열을 디코딩하여 app/keystore.jks 파일로 저장
33+
- name: Decode Keystore File
34+
# base64 -d 명령어를 사용하여 복호화
35+
run: echo "$KEYSTORE_BASE64" | base64 -d > app/keystore.jks
36+
37+
# 서명에 필요한 비밀번호와 별칭 정보를 signing.properties 파일로 생성
38+
- name: Set up Signing Properties
39+
run: |
40+
echo "storeFile=keystore.jks" > ./signing.properties
41+
echo "storePassword=$KEYSTORE_PASSWORD" >> ./signing.properties
42+
echo "keyAlias=$KEY_ALIAS" >> ./signing.properties
43+
echo "keyPassword=$KEY_PASSWORD" >> ./signing.properties
44+
45+
# 릴리즈 AAB 빌드 실행
46+
- name: Build Release AAB
47+
# 프로젝트 설정을 통해 서명된다
48+
run: ./gradlew bundleRelease
49+
50+
# GitHub Release 생성 및 고정 메시지 적용
51+
- name: Create GitHub Release
52+
uses: softprops/action-gh-release@v2
53+
# Git Tag가 푸시될 때만 Release를 생성 (예: v1.0.0)
54+
if: startsWith(github.ref, 'refs/tags/')
55+
with:
56+
# 빌드된 AAB 파일 업로드
57+
files: app/build/outputs/bundle/release/app-release.aab
58+
name: Release ${{ github.ref_name }}
59+
body: |
60+
더 나은 모멘토를 위해 버그를 수정하고, 사용성을 개선했어요

.github/workflows/ci_build.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
name: Android CI Build
2+
3+
on:
4+
push:
5+
branches:
6+
- develop # develop 브랜치에 push 될 때 실행
7+
pull_request:
8+
branches:
9+
- develop # develop 브랜치로 PR이 열리거나 업데이트 될 때 실행
10+
11+
12+
jobs:
13+
build:
14+
runs-on: ubuntu-latest # 워크플로우를 실행할 가상 환경
15+
16+
env:
17+
GOOGLE_SERVICES_BASE64: ${{ secrets.GOOGLE_SERVICES_BASE64 }}
18+
KAKAO_NATIVE_APP_KEY: ${{ secrets.KAKAO_NATIVE_APP_KEY }}
19+
NAVER_CLIENT_ID: ${{ secrets.NAVER_CLIENT_ID }}
20+
NAVER_CLIENT_SECRET: ${{ secrets.NAVER_CLIENT_SECRET }}
21+
22+
steps:
23+
- name: Checkout Code
24+
uses: actions/checkout@v4 # GitHub 저장소 코드를 워크스페이스로 가져오기
25+
26+
- name: Set up JDK 17
27+
uses: actions/setup-java@v4
28+
with:
29+
distribution: 'temurin'
30+
java-version: '17'
31+
32+
- name: Make gradlew executable
33+
run: chmod +x ./gradlew # gradlew 파일에 실행 권한 부여
34+
35+
- name: Decode Google Services File
36+
run: echo "$GOOGLE_SERVICES_BASE64" | base64 -d > app/google-services.json
37+
38+
# Secrets를 사용하여 local.properties 파일 생성
39+
- name: Create local.properties for CI
40+
run: |
41+
echo "kakao.native.app.key=$KAKAO_NATIVE_APP_KEY" > local.properties
42+
echo "naver.client.id=$NAVER_CLIENT_ID" >> local.properties
43+
echo "naver.client.secret=$NAVER_CLIENT_SECRET" >> local.properties
44+
45+
- name: Build Debug APK
46+
run: ./gradlew assembleDebug # 디버그 APK 빌드 명령어 실행
47+
48+
# 빌드된 APK 아티팩트 저장
49+
- name: Upload APK Artifact
50+
uses: actions/upload-artifact@v4
51+
with:
52+
name: dngo-app-debug
53+
path: app/build/outputs/apk/debug/app-debug.apk
54+
retention-days: 90

app/build.gradle.kts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ if (propertiesFile.exists()) {
1111
propertiesFile.inputStream().use { properties.load(it) }
1212
}
1313

14+
// CI/CD 서명 설정 파일 로드
15+
val signingProps = Properties()
16+
val signingPropsFile = project.rootProject.file("signing.properties")
17+
if (signingPropsFile.exists()) {
18+
signingPropsFile.inputStream().use { signingProps.load(it) }
19+
}
20+
1421
plugins {
1522
alias(libs.plugins.android.application)
1623
alias(libs.plugins.kotlin.android)
@@ -49,21 +56,33 @@ android {
4956
buildConfigField("String", "NAVER_CLIENT_SECRET", "\"${naverClientSecret}\"")
5057
}
5158

59+
// CI/CD 서명 설정
60+
signingConfigs {
61+
create("release") {
62+
storeFile = if (signingProps.containsKey("storeFile")) file("app/${signingProps["storeFile"] as String}") else null
63+
storePassword = signingProps["storePassword"] as String?
64+
keyAlias = signingProps["keyAlias"] as String?
65+
keyPassword = signingProps["keyPassword"] as String?
66+
}
67+
}
68+
5269
buildTypes {
5370
release {
5471
isMinifyEnabled = false
5572
proguardFiles(
5673
getDefaultProguardFile("proguard-android-optimize.txt"),
5774
"proguard-rules.pro"
5875
)
76+
// release 빌드 타입에 서명 설정 적용
77+
signingConfig = signingConfigs.getByName("release")
5978
}
6079
}
6180
compileOptions {
62-
sourceCompatibility = JavaVersion.VERSION_11
63-
targetCompatibility = JavaVersion.VERSION_11
81+
sourceCompatibility = JavaVersion.VERSION_17
82+
targetCompatibility = JavaVersion.VERSION_17
6483
}
6584
kotlinOptions {
66-
jvmTarget = "11"
85+
jvmTarget = "17"
6786
}
6887
buildFeatures {
6988
compose = true

0 commit comments

Comments
 (0)