Android 개발/Firebase

GitHub Android CI/CD

막이86 2023. 11. 10. 17:06
728x90

Firebase App Distribution

  • 신뢰할 수 있는 테스터에 앱을 쉽게 배포할 수 있음
  • 테스터 기기에 앱을 빠르게 제공할 수 있음
    • 💡 iOS의 TestFlight와 비슷해 보임

GitHub Action Workflows

  • github에서 소스 커밋시 브랜치 별로 동작할 방법을 정의
name: Android CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      apk: app/build/outputs/apk/release/app-release.apk
    steps:
    - uses: actions/checkout@v3
    
    - name: set up JDK 11
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'
        cache: gradle
    
    - name: Cache Gradle packages
      uses: actions/cache@v2
      with:
        path: |
          ~/.gradle/caches
          ~/.gradle/wrapper
        key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', '**/buildSrc/**/*.kt') }}
        restore-keys: |
          ${{ runner.os }}-gradle-

    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    
    - name: Build with Gradle
      run: ./gradlew build
    
    - name: build release 
      run: ./gradlew assembleRelease
    
    - name: Upload APK
      uses: actions/upload-artifact@v1
      with:
        name: app
        path: app/build/outputs
        
    - name: upload artifact to Firebase App Distribution
      uses: wzieba/Firebase-Distribution-Github-Action@v1
      with:
        appId: ${{secrets.FIREBASE_APP_ID}}
        token: ${{secrets.FIREBASE_TOKEN}}
        groups: testers
        file: app/build/outputs/apk/release/app-release.apk

GitHub 에서 시크릿 생성

  • FIREBASE_APP_ID
    • 배포하고자 하는 AppID
    • Firebase Console → 프로젝트 개요 → 프로젝트 설정 → 일반 → 내앱

  • FIREBASE_TOKEN
    % firebase login:ci
    
    Visit this URL on this device to log in:
    <https://accounts.google.com/o/oauth2/auth>...
    
    Waiting for authentication...
    
    ✔  Success! Use this token to login on a CI server:
    
    **1//0ejBWc4cUujXBCgYIARAAGA4SNwF-L..._2SnVe20fC1pw**
    
    Example: firebase deploy --token "$FIREBASE_TOKEN"
    

Firebase에 테스트 그룹 등록

  • groups 부분은 Firebase의 테스트 그룹
    • 이름을 맞춰 주지 않으면 업로드는 되지만 github action에 404 오류가 발생
- name: upload artifact to Firebase App Distribution
  uses: wzieba/Firebase-Distribution-Github-Action@v1
  with:
    appId: ${{secrets.FIREBASE_APP_ID}}
    token: ${{secrets.FIREBASE_TOKEN}}
    **groups: testers**
    file: app/build/outputs/apk/release/app-release-unsigned.apk

Signing을 하지 않을 경우 설치 오류

  • unsigning APK를 올릴 경우 설치 앱에서 설치 실패가 발생
  • assembleRelease시 signing을 할수 있도록 수정
  • keystore 파일 생성
    • ./gradle/wrapper/ 위치에 파일 생성
    • 파일 위치는 크게 상관 없지만 내가 선호하는 위치임
  • build.gradle
...
android {
		...
    signingConfigs {
        release {
            storeFile file(releaseStoreFile)
            storePassword releaseStorePassword
            keyAlias releaseKeyAlias
            keyPassword releaseKeyPassword
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
		...
}
...
  • gradle.properties
...
releaseStoreFile=../gradle/wrapper/keystore.keystore
releaseStorePassword=store_password
releaseKeyAlias=key_alias
releaseKeyPassword=key_password

참고

728x90