플러터

[Flutter] Github Action + Firebase distribution 안드로이드 배포

sam-ss 2024. 4. 6. 20:58

Release 브렌치에 push 하면 firebase distribution으로 자동 배포

  1. Firebase에 프로젝트 만들고 앱 연결
  2. Github Aciton 셋팅 하여 자동 배포 

Firebase 프로젝트 셋팅

  • Firebase console 에 프로젝트 생성
  • 안드로이드 앱 연결
  • google-services.json 다운 → app/ 에 넣음
  • settings.gradle 수정
plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "7.3.0" apply false
    id "org.jetbrains.kotlin.android" version "1.7.10" apply false
    id 'com.google.gms.google-services' version '4.4.1' apply false // 추가
}

  • app/build.gradle 수정
plugins {
    id "com.android.application"
    id "kotlin-android"
    id "dev.flutter.flutter-gradle-plugin"
    id "com.google.gms.google-services" // 추가
}

Github Action 설정

1. 기존 yml 파일에 코드 추가. 

 - name: Upload artifact to Firebase App Distribution
        uses: wzieba/Firebase-Distribution-Github-Action@v1
        with:
            appId: ${{secrets.FIREBASE_APP_ID}}
            serviceCredentialsFileContent: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
            groups: testers
            file: android/app/build/outputs/apk/release/app-release.apk

 

2. ${{secrets.FIREBASE_APP_ID}} 설정

  • 앱 ID 가져오기 : 프로젝트 설정 → 내 앱 → 앱 ID

  • 설정 : Settings → Secrets and variables → Actions → Repository secrets 에 앱 ID 설정

 

3. ${{ secrets.CREDENTIAL_FILE_CONTENT }} 설정

  • 앱 배포 관리자 추가

  • 키 관리 선택

  • 새 키 JSON으로 만들면 자동으로 Json 파일 다운로드

  • 다운된 JSON 파일 텍스트 Repository secrets 에 셋팅

 

4. testers 추가

  • Firebase 에 testers그룹만들고 추가.

Github Action 순서

  1. Flutter 빌드를 위한 Flutter 환경 (https://github.com/subosito/flutter-action)
  2. Android build를 위한 JDK setup (https://github.com/actions/setup-java)
  3. 프로젝트 checkout
  4. 빌드
  5. apk upload (https://github.com/wzieba/Firebase-Distribution-Github-Action?tab=readme-ov-file)

완성된 Github Action

name: Android Deploy

on:
  push:
    branches:
      - release/**

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Setup Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: "3.19.3"
          channel: 'stable'
          cache: true
        id: flutter
      - name: JDK setup
        uses: actions/setup-java@v1
        with:
          java-version: '12.x'
      - name: Checkout project
        uses: actions/checkout@v2
      - name: Archive app
        run: |
          cd PROJECT_DIR
          flutter build apk --release
      - name: Upload APK
        uses: wzieba/Firebase-Distribution-Github-Action@v1
        with:
          appId: ${{secrets.FIREBASE_APP_ID}}
          serviceCredentialsFileContent: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
          groups: testers
          file: PROJECT_DIR/build/app/outputs/flutter-apk/app-release.apk
  • PROJECT_DIR은 프로젝트에 맞춰 설정

결론

release/1.0.0+1 이런식으로 “release” 가 들어간 브렌치를 push하면 자동으로 빌드 후 배포