티스토리 뷰
이전 글에서 Github Secrets 를 등록 하는 방법을 정리했다.
2025.05.28 - [Android/CICD] - [ CICD #1 ] GitHub secrets 등록 -1
[ CICD #1 ] GitHub secrets 등록 -1
예전부터 해보고 싶었던 빌드, 테스트, 배포 과정을 자동화에 대해서 시도해 보고 최종적으로 성공한 것에 대해 기록하고자 한다.CI/CD 도구로 여러가지가 있다는 건 알고만 있었다 1. Github Actions2
jihunstudy.tistory.com
이번에는 Firebase Distribution 에 테스트 apk 를 등록 하는 워크 플로우를 정리해 보려고 한다
개념은 이런거 같다
내가 원하는 브렌치안에 .github/workflows 파일을 만들어서 CI/CD를 진행 하는것,
처음에 내가 default 로 설정되어 있는 Main Branch 에 워크 플로우를 만들어서 CI/CD를 아무리 트리거를 해도 실행이 되지 않아 이게 뭔가 하고 계속 찾았던 적이 있다
물론 옵션으로 branch 를 적을 수도 있지만,
찾아보니 기본적으로 해당 branch 워크 플로우를 만들어 놓는 것이 덜 햇갈릴 수 있을거 같다고 생각 했다
그래서 우선 main branch 에는 init Code 만 Commit 되어 있기에 개발중인 develop branch 에 워크 플로우를 작성해서 트리거 하게 되었다.
name: Android Release Build and Firebase App Distribution
on:
push:
tags:
- 'FBv*' # FBv로 시작하는 태그가 푸시될 때만 워크플로우 실행 (예: FBv1.0.4)
jobs:
build:
name: Build Release APK and Upload to Firebase App Distribution
runs-on: ubuntu-latest
steps:
# GitHub 리포지토리에서 코드 가져오기
- name: Checkout code
uses: actions/checkout@v3
# JDK 17 설치 (Android 빌드 도구 사용을 위해 필요)
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '17'
# keystore 파일 base64 디코딩 후 저장 (앱 서명에 사용)
- name: Decode keystore.jks
run: |
mkdir -p app/jks
echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 -d > app/jks/saveurlkey.jks
# google-services.json 파일 base64 디코딩 후 저장 (Firebase 연동에 필요)
- name: Decode google-services.json
run: |
mkdir -p app
echo "${{ secrets.GOOGLE_SERVICES_JSON }}" | base64 -d > app/google-services.json
# gradlew 실행 권한 부여
- name: Grant execute permission to gradlew
run: chmod +x ./gradlew
# 릴리즈 APK 빌드 (keystore 정보 환경변수로 전달)
- name: Build Release APK
env:
KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.RELEASE_KEYSTORE_ALIAS }}
KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
run: ./gradlew clean assembleRelease
# Firebase CLI 설치 (배포를 위해 필요)
- name: Install Firebase CLI
run: npm install -g firebase-tools
# Firebase 서비스 계정 JSON을 파일로 저장
- name: Save Firebase Service Account JSON
env:
FIREBASE_SERVICE_ACCOUNT: ${{ secrets.FIREBASE_SERVICE_ACCOUNT }}
run: |
echo "$FIREBASE_SERVICE_ACCOUNT" > ${{ github.workspace }}/service-account.json
# Firebase App Distribution에 APK 업로드
- name: Upload APK to Firebase App Distribution
env:
GOOGLE_APPLICATION_CREDENTIALS: ${{ github.workspace }}/service-account.json
run: |
firebase appdistribution:distribute app/build/outputs/apk/release/app-release.apk \
--app ${{ secrets.FIREBASE_APP_ID }}
트리거는 모든 코드를 커밋하고 푸시한 후에 원하는 태그를 푸시 했을 때에만 트기거가 되도록 했다
어떤 방법이던 상관 없겠지만, 나는 태그를 사용한것 뿐이다
코드 흐름상 느낀점은
내가 로컬에서 필요한 파일들을
github repository 에는 당연히 없기 때문에
필요한 파일들을 가져오는 코드들이 대부분이며,
마지막에는 upLoad 하는 코드다
signingConfigs {
create("release") {
storeFile = file("jks/saveurlkey.jks")
storePassword = System.getenv("KEYSTORE_PASSWORD")
keyAlias = System.getenv("KEY_ALIAS")
keyPassword = System.getenv("KEY_PASSWORD")
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
..
..
}
}
내 Repository 에 들어 있는 build.gradle 에 코드를 이렇게 수정해서 반영 해 줘야 한다
storeFile 는 당연히 로컬에서 jks 가 들어 있는 파일 위치를 지정해 줘야 하고,
워크 플로우가 실행되면서 Github Secrets 에서 해당 위치에 keystore 파일을 넣어 주고 처리 하기 때문에 build.gradle 에 저렇게 처리해야 하는거 같다 ..
# keystore 파일 base64 디코딩 후 저장 (앱 서명에 사용)
- name: Decode keystore.jks
run: |
mkdir -p app/jks
echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 -d > app/jks/saveurlkey.jks
step 중에 하나 예를 들자면
keystore.jks 파일을 가져와서 repository 에 저장 할꺼야
근데 app/jks 라는 폴더를 만들고 Github secrets 안에 있는 RELEASE_KEYSTORE_BASE64 를 가져와서 디코딩 해서 app/jks/saveurlkey.jks 라고 만들어서 넣어 둘꺼야
라는 내용
보다보면 내용들이 이해가 갈 것으로 보인다
'Android > CICD' 카테고리의 다른 글
[ CICD #4 ] Github Actions - local.properties (0) | 2025.06.11 |
---|---|
[ CICD #3 ] GitHub Actions Play Store Alpha UpLoad -3 (1) | 2025.05.28 |
[ CICD #1 ] GitHub secrets 등록 -1 (1) | 2025.05.28 |
- Total
- Today
- Yesterday
- widget 이미지 로딩
- wear os
- android widget 만들기
- Android
- 풀배열 키보드
- github
- 오브제썬스틱
- 기름잡아주는
- aos img url bitmap
- github actions
- 쏘렌토 하이브리드
- 폴더블 이벤트 받기
- 갤럭시 워치
- widget glide
- widget onreceive
- firebase distribution
- 안드로이드 폴드 대응
- 안드로이드 플립 대응
- widget 만들기
- 테스트 배포
- 테스트 앱 배포
- api key 관리
- flutter web
- 맥 전용
- 쏘렌토 하이브리드 시그니처
- 웨어러블
- widget onupdate
- github secrets
- local.properties
- 폴더블 상태 유지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |