241220 TIL

나고수·2024년 12월 22일
0

2024 TIL

목록 보기
92/94
post-thumbnail

Fastlane을 이용해 Flutter 안드로이드 APK Firebae App Distribution 자동배포

name: Android CD Release

env:
  GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4g -Dorg.gradle.daemon=false"
  GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED: true
on:
  push:
    tags:
      - "android_v_dev_*"

jobs:
  release:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          distribution: 'corretto'
          java-version: 17

      - name: Setup Ruby with caching
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.0
          bundler-cache: true

      - name: Generate key.properties
        run: |
          echo '${{ secrets.KEY_PROPERTIES }}' | base64 --d >> ./android/key.properties

      - name: Generate local.properties
        run: |
          echo '${{ secrets.LOCAL_PROPERTIES }}' | base64 --d >> ./android/local.properties

      - name: Generate google-services.json
        run: echo '${{ secrets.GOOGLE_SERVICE_JSON }}' | base64 --d > ./android/app/google-services.json

      - name: Generate keystore.jks
        run: echo '${{ secrets.JKS }}' | base64 --d > ./android/app/hiing-keystore.jks

      - name: Cache Fastlane
        uses: actions/cache@v3
        with:
          path: |
            ~/.bundle
            ~/.fastlane
          key: ${{ runner.os }}-fastlane-${{ hashFiles('**/Gemfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-fastlane-

      - name: Install Fastlane
        run: |
          cd android
          gem install bundler
          bundle install

      - name: Cache Flutter dependencies
        uses: actions/cache@v3
        with:
          path: ${{ matrix.flutter_path }}
          key: ${{ runner.os }}-flutter-${{ hashFiles('**/pubspec.lock') }}
          restore-keys: |
            ${{ runner.os }}-flutter-

      - name: Setup Flutter
        uses: subosito/flutter-action@v1
        with:
          channel: 'stable'

      - name: setup flutter jdk directory
        run: |
          flutter config --jdk-dir /opt/hostedtoolcache/Java_Corretto_jdk/17.0.13-11.1/x64     

      - name: Configure Git
        run: |
          git config --global url."https://${{ vars.USER_NAME }}:${{ secrets.TOKEN_GITHUB }}@github.com/".insteadOf "https://github.com/"    

      - name: Install Dependencies
        run: flutter pub get

      - name: Generate Config
        run: |
          echo '${{ secrets.CONFIG }}' | base64 --d >> ./lib/common/config.dart      

      - name: Android Dev Build and Upload to Firebase App Distribution
        run: |
          cd android
          fastlane android_apk_release_app_distribution
        env:
          CI: true
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
          FASTLANE_USER: ${{ secrets.FASTLANE_USER }}
          FIREBASE_CLI_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }}
          FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID_ANDROID_DEV }}
          APP_DISTRIBUTION_GROUPS: ${{ vars.APP_DISTRIBUTION_GROUPS }}

default_platform(:android)

platform :android do
  desc "Create Release APK"
  lane :android_apk_release_app_distribution do
    sh "flutter build apk --release --flavor dev"

    firebase_app_distribution(
      app: ENV['FIREBASE_APP_ID'],
      firebase_cli_token: ENV['FIREBASE_CLI_TOKEN'],
      groups: ENV["APP_DISTRIBUTION_GROUPS"],
      android_artifact_type: "APK",
      apk_path: "../build/app/outputs/flutter-apk/app-dev-release.apk",
      groups: ENV["APP_DISTRIBUTION_GROUPS"]
    )

    slack(message: "Android Dev App Distribution 배포 완료 🎉", slack_url: ENV["SLACK_WEBHOOK_URL"])
  end

  error do |lane, exception, options|
    # 배포 실패 시 Slack 알림
    slack(
      message: "Android 자동배포 실패 🥲\n #{exception}",
      success: false,
      slack_url: ENV["SLACK_WEBHOOK_URL"]
    )
  end
end

이전 포스팅들에서 자세한 설명은 모두 했기에 이번엔 패스
원래 플레이스토어에 자동배포하려면 appFile에 들어갈 json 키를 추출해야하는데, 나는 app distribution만 사용하기때문에 그 과정은 필요 없었다.
플레이 스토어에 자동배포도 구현하고싶은데 현재 플레이스토어 마스터 계정에 문제가 있어 진행할 수 없음 ㅠㅠ

profile
되고싶다

0개의 댓글