관리 메뉴

나만을 위한 블로그

[Android] Firebase App Distribution, Github Action 같이 사용하기 본문

Android

[Android] Firebase App Distribution, Github Action 같이 사용하기

참깨빵위에참깨빵 2023. 11. 23. 22:05
728x90
반응형

※ 파이어베이스 등록, Github Action 적용 과정은 생략한다

※ Fastlane은 사용하지 않는다

 

앱을 만들었으니 APK 또는 AAB 파일을 만들어야 한다. 그러나 수동으로 만드는 것은 너무 번거로우니 Github Action을 통해 자동으로 APK가 발행되도록 할 수 있다. 그리고 이에 더해서 Firebase App Distribution도 적용하면, Github Action으로 APK 생성 후 배포까지 자동으로 이뤄지도록 CI/CD 환경을 구성할 수 있다. 빌드 환경이 dev, release로 나눠져 있어도 상관없다.

또한 Firebase App Distribution을 적용하는 건 좋지만, 가능하면 Github Action으로 APK가 만들어지면 알아서 Firebase App Distribution에 업로드되면 더 좋을 것이다. 그래서 이 포스팅에선 CLI 방식을 통해 Github Action으로 APK를 발행한 후, 자동으로 Firebase App Distribution에 업로드되게 하는 방법에 대해 알아본다.

 

파이어베이스 등록을 마쳤다면 구글 클라우드 플랫폼에서 IAM 및 관리자 메뉴를 선택한 다음, 서비스 계정을 클릭한다.

 

 

이후 표시되는 화면 상단의 서비스 계정 만들기를 클릭한다. 그러면 아래와 같은 화면이 표시될 것이다.

 

 

서비스 계정 이름 입력란에 적절한 이름을 입력한다. 그러면 서비스 계정 ID는 자동으로 생성된다. 서비스 계정 설명은 옵션이니 쓰고 싶으면 쓴다.

이후 만들고 계속하기 버튼을 클릭하면 액세스 권한을 부여할 수 있게 된다.

 

 

역할 선택 드롭다운을 누른 다음, 나타나는 필터에 admin을 입력한다. 그 후 Firebase 앱 배포 Admin SDK 서비스 에이전트를 선택한다.

품질관리자 권한을 선택하라는 글도 있는데, 이 권한을 부여해도 사용에 문제 없다.

 

 

3번째 옵션은 건너뛰어도 된다. 이후 생성을 완료하면 이전 페이지로 이동하며 앞서 설정했던 대로 서비스 계정이 만들어진다.

이 계정의 맨 오른쪽을 보면 옵션 버튼이 있는데, 이걸 눌러서 키 관리를 선택한다.

 

 

그러면 이 서비스 계정이 가진 키들을 볼 수 있는데, 방금 만들었으니 당연히 아무것도 없을 것이다. 그러니 새 키를 만들어준다.

키 추가 버튼을 누르면 새 키 만들기 버튼이 표시된다. 클릭한다.

 

 

그러면 처음에 JSON 라디오 버튼이 선택된 상태로 만들겠냐는 팝업이 표시될 것이다. JSON 키가 필요하기 때문에 그대로 만들기 버튼을 누르면 된다.

 

 

만들기 버튼을 누르면 자동으로 다운로드가 되는데, 이 파일을 열어서 안의 내용을 복사한 다음 Github Secret에 FIREBASE_CREDENTIAL_FILE_CONTENT란 이름으로 저장한다. 이후 Github Action에서 Firebase App Distribution CLI를 써서 APK를 배포할 때 사용할 것이기 때문이다.

팝업에서 경고하는 대로 생성된 JSON 파일은 잃어버리거나 삭제하지 않게 안전하게 보관해둔다.

 

이제 Github Action을 사용하기 위한 yaml 파일을 만들고, APK 생성 스크립트와 Firebase App Distribution에 업로드하는 스크립트를 작성한다. 아래는 그 예시다.

 

name: Build and Deploy DEV APK
on:
  push:
    branches:
      - develop

jobs:
  go:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Set up JDK 11
        uses: actions/setup-java@v2
        with:
          java-version: 11
          distribution: temurin
...
...
      - name: Build Develop APK
        id: build
        env:
          ...
        run: |
          ...
          ./gradlew assembleDebug ...(기타 명령어)...

      - name: Authenticate to Firebase
        uses: google-github-actions/auth@v1
        with:
          credentials_json: ${{ secrets.FIREBASE_SERVICE_ACCOUNT }}

      - name: Setup Firebase CLI
        run: curl -sL https://firebase.tools | bash

...

      - name: Upload APK to Firebase App Distribution
        uses: wzieba/Firebase-Distribution-Github-Action@v1.7.0
        with:
          appId: ${{secrets.FIREBASE_APP_ID}}
          serviceCredentialsFileContent: ${{ secrets.FIREBASE_CREDENTIAL_FILE_CONTENT }}
          testers: "개인 이메일을 입력하거나 테스터들의 이메일들을 입력"
          file: <apk 파일 경로 입력>
...
...

 

안드로이드 프로젝트에 Github Action을 적용하는 방법은 국내, 해외 블로그에 세세하게 설명하는 좋은 글들이 많이 있으니 생략했다.

이 스크립트를 참고해 yaml 파일을 작성할 때 주의할 것이 있다.

 

  • wzieba/Firebase-Distribution-Github-Action@1.7.0은 오늘 날짜 기준 최신 버전이다. v1을 쓰는 포스팅을 심심찮게 볼 수 있는데, v1과 v1.7.0은 Firebase App Distribution에 업로드되는 시간 차이가 극명하게 난다.
    경험상 v1.7.0으로 버전업해서 사용하니 v1을 썼을 때보다 최소 2분, 최대 5분 더 빨리 Firebase App Distribution에 업로드됐다. 그리고 CLI 방식으로 Firebase App Distribution에 APK를 업로드할 때, 업로드 시간이 5분을 넘으면 Timeout 에러가 발생하며 Github Action이 실패하기 때문에 가급적 최신 버전을 사용해 빠르게 업로드되게 하는 게 좋다
  • token을 사용하는 예시도 있다. 그러나 token은 곧 deprecated될 예정이며 하단의 깃허브에선 쓰지 말라고 명시돼 있다. 이 토큰 대신 serviceCredentialsFileContent를 사용할 것을 권장하기 때문에, 적용하기 시작하는 단계라면 token 옵션은 사용하지 않는 게 좋다. 자세한 내용은 하단의 깃허브를 참고한다
  • 파이어베이스 콘솔에 dev, release처럼 개발 환경과 상용 환경이 구분돼 있는 프로젝트의 경우, 앱 ID와 FIREBASE_CREDENTIAL_FILE_CONTENT는 절대로 같은 걸 사용해선 안 된다. 만약 같은 걸 사용한다면 권한 에러가 발생하며 Github Action이 실패한다

 

wzieba/Firebase-Distribution-Github-Action의 버전을 확인할 수 있는 깃허브는 아래 링크를 참고한다.

 

https://github.com/wzieba/Firebase-Distribution-Github-Action

 

GitHub - wzieba/Firebase-Distribution-Github-Action: This action uploads artifacts (.apk or .ipa) to Firebase App Distribution.

This action uploads artifacts (.apk or .ipa) to Firebase App Distribution. - GitHub - wzieba/Firebase-Distribution-Github-Action: This action uploads artifacts (.apk or .ipa) to Firebase App Distri...

github.com

 

FIREBASE_SERVICE_ACCOUNT라는 Secret 값을 확인하는 방법은, 파이어베이스 콘솔에서 프로젝트를 선택한 다음, 기어 아이콘을 클릭하고 서비스 계정 탭을 선택한다.

 

 

그러면 화면 하단에 새 비공개 키 생성 버튼이 보인다. 이걸 누르면 경고 팝업이 표시되고, 키 생성 버튼을 누르면 마찬가지로 파일이 다운로드된다.

 

 

다운로드된 파일을 열고 안의 내용들을 전부 복사해서 Github Secret에 FIREBASE_SERVICE_ACCOUNT라는 이름으로 저장하면 된다.

FIREBASE_APP_ID는 기어 아이콘을 클릭한 다음, 일반 탭이 선택된 상태에서 밑으로 스크롤 쫙 내리면 앱 ID라는 글자 밑에 "1:00000:android:000aaa" 같은 형태로 보이는 문자열이 있다. 이 값을 복사해서 해당 이름으로 저장하고 yaml 파일에서 사용하면 된다.

 

이제 Github Action을 실행하면 Firebase App Distribution으로 APK가 자동 업로드되고, testers의 값으로 적은 이메일에 초대 이메일이 갈 것이다.

이 이메일은 핸드폰으로 열어서 초대를 수락해야 그 핸드폰에 app tester 앱을 설치할 수 있다. app tester 앱에 대한 내용은 파이어베이스 문서를 참고한다.

 

https://firebase.google.com/docs/app-distribution/get-set-up-as-a-tester?hl=ko&platform=android

 

앱 배포를 통해 테스터로 설정  |  Firebase App Distribution

Google I/O 2023에서 Firebase의 주요 소식을 확인하세요. 자세히 알아보기 의견 보내기 앱 배포를 통해 테스터로 설정 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세

firebase.google.com

 

Firebase App Distribution으로 APK를 배포한 다음, app tester 앱으로 들어가면 Github Action을 통해 생성된 APK를 다운로드받을 수 있다.

이렇게 업로드된 APK는 최대 150일 간 사용할 수 있다. 5개월이면 넉넉한 기간이지만, 부족하다고 느껴진다면 APK 빌드 후 슬랙 웹훅을 통해 슬랙 첨부파일로 보낼 수 있도록 yaml 파일을 수정하는 것도 고려하면 좋을 것이다. 150일 간 사용할 수 있는 것에 대해선 아래의 파이어베이스 문서를 참고한다.

 

https://firebase.google.com/docs/app-distribution/troubleshooting?hl=ko&platform=android#builds-expire-android

 

앱 배포 문제 해결 및 FAQ  |  Firebase App Distribution

Google I/O 2023에서 Firebase의 주요 소식을 확인하세요. 자세히 알아보기 의견 보내기 앱 배포 문제 해결 및 FAQ 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. iOS

firebase.google.com

 

모두 정상적으로 작동한다면 귀찮은 CI/CD는 해결됐다. 위의 yaml 스크립트에선 슬랙 웹훅을 사용하는 스크립트가 생략됐으니 APK 파일이 발행되면 슬랙으로 전송되도록 수정해보는 것도 좋을 것이다.

반응형
Comments