Flutter + GitHub Actions + Firebase App Distribution에서 자동 릴리스 사이클 만들기(Android)

Flutter 앱 개발을 진행함에 있어 master에 병합하면 누구나 앱이 실기에 설치할 수 있는 흐름을 만들고 싶다.

가끔 밖에 하지 않아서 잊을 것 같아서 비망.

하고 싶은 일


  • 로컬 또는 CI에서 릴리스 빌드를 만들 수 있도록 합니다
  • GitHub에 서명 파일을주지 않는다
  • 자동으로 버전을 증가시키고 Firebase App Distribution에 업로드

  • 로컬에서 릴리스 빌드 만들기 가능



    공식 문서의 이 부분 에도 쓰여 있다.

    1. (없으면) keystore 파일 만드는



    샘플은 많이 구르고 있기 때문에 할애.
    git 관리에서 제외합니다.

    2. 로컬 빌드용 key.properties 만들기


    storePassword=<password from previous step>
    keyPassword=<password from previous step>
    keyAlias=key
    storeFile=<location of the key store file, such as /Users/<user name>/key.jks>
    

    이것도 git 관리에서 제외한다.

    3. 앱의 build.gradle에 다음을 추가합니다.


    def keystoreProperties = new Properties()
    def keystorePropertiesFile = rootProject.file('key.properties')
    if (keystorePropertiesFile.exists()) {
        // For Local
        keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    } else {
        // For CI
        keystoreProperties.setProperty('storePassword', System.getenv('KEY_STORE_PASSWORD'))
        keystoreProperties.setProperty('keyPassword', System.getenv('KEY_PASSWORD'))
        keystoreProperties.setProperty('keyAlias', System.getenv('ALIAS'))
        keystoreProperties.setProperty('storeFile', System.getenv('KEY_PATH'))
    }
    
    android 블록에 다음을 추가 (& 재기록)
        signingConfigs {
            release {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
    
        buildTypes {
            release {
                signingConfig signingConfigs.release
            }
        }
    
    

    4. 확인



    우선 APK 만들어 보자flutter build apk --release

    GitHub Actions로 릴리스 빌드를 만들 수 있도록



    참조 : Signing Flutter Android apps for release in GitHub Actions

    1. (없으면) workflow 만드는



    샘플은 많이 구르고 있기 때문에 할애.

    2. GitHub Secrets에 모두 넣어


    key.properties 대신.
    그런 다음 GitHub Actions에서 이것을 읽습니다.

  • ANDROID_KEY_STORE_PASSWORD storePassword
  • ANDROID_KEY_PASSWORD keyPassword
  • ANDROID_KEY_ALIAS keyAlias ​​
  • ANDROID_KEY_JKS keystore 파일을 base64 인코딩한 것.openssl base64 -A -in key.jks

  • 사용하지 않았지만, 이런 action도 있거나 한다.
    htps : // 기주 b. 코 m / 마르 tp ぁ세 / 아 c 치 온 s / 시그

    3. workflow에 릴리스 빌드를 만드는 단계 추가



    이전 단계에서 GitHub Secrets에 저장된 값을 환경 변수에 저장합니다.
          - name: set up private files
            run: |
              echo $SIGNING_KEY | base64 -di > android/app/key.jks
            env:
              SIGNING_KEY: ${{ secrets.ANDROID_KEY_JKS }}
    
          - name: build release apk
            run: |
              flutter build apk --release --build-name=0.0.$GITHUB_RUN_NUMBER --build-number=$GITHUB_RUN_NUMBER
            env:
              KEY_STORE_PASSWORD: ${{ secrets.ANDROID_KEY_STORE_PASSWORD }}
              KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
              ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
              KEY_PATH: key.jks
    
    
  • keystore를 복원하고 있는 곳은, i 옵션 붙이지 않으면 자신의 환경에서는 넘어졌다.
  • android/appbuild.gradle 로 빌드하기 때문에 android/app/ 에 파일을 두고 있다.
  • $GITHUB_RUN_NUMBER 빌드마다 패치 버전과 버전 번호가 올라갑니다.

    Firebase App Distribution으로 출시



    기존 GitHub Action 의 혜택을 누리며 즐기는

    (App Distribution 설정도 잊지 않고)
          - name: upload artifact to Firebase App Distribution
            uses: wzieba/Firebase-Distribution-Github-Action@v1
            with:
              appId: ${{secrets.FIREBASE_ANDROID_APP_ID}}
              token: ${{secrets.FIREBASE_TOKEN}}
              groups: Developer
              file: build/app/outputs/flutter-apk/app-release.apk
    
    

    또 다른 목소리


  • 주요 사소한 버전 이름은 workflow 외부에서 정의하고 싶습니다
  • 역시 서명도 기존 action 를 사용하는 것이 편할지도 모릅니다 .
  • 좋은 웹페이지 즐겨찾기