Android

[CI/CD] fastlane : App Distribution + Slack Message

그란. 2022. 11. 24. 22:01

fastlane로 아래의 명령어만으로 Firebase DEV, RELEASE 배포 +  SLACK 메시지 전송까지 하는 방법을 정리

fastlane distribute

( 2~3일동안 fastlane 만 팠다.. ) 

 

 

자세한 fastlane 설치 및 환경 설정은 생략함

  • fastlane 설치 -> 프로젝트에서 init 하여 파일들 초기화 ( git init 같다고 보면 됨 ) 

사용할 플러그인

gem 'fastlane-plugin-firebase_app_distribution'
gem 'fastlane-plugin-android_versioning_kts'

 

프로젝트 모듈에 release_note 파일, .env파일 생성

 

구조를 정리하면 

 

project

  • app
  •  fastlane
    • fastfile
    • .env
  • release_note

(이렇게 해야하는건 경로들을 잘찾음..)

 

 

Fastfile 액션 

lane :distribute do |option|
    gradle(task: "clean")
    version = increment_version_name(
      bump_type: option[:type],
      version_name: option[:version],
      app_project_dir: "./app"
    )
    firebaseDev()
    firebaseRelease()
    message(version)
end
  1. clean build
  2. 버전 업그레이드 
    1. type 을 지정할수 있는데 type의 도메인은 [ major, minor, patch ] 1.0.0 에서 각각 대응됨 
      1. 지정하지 않으면 patch ( 마지막 숫자만 카운팅됨 )
      2. minor 를 올리면 아래의 숫자들은 0으로 됨 
      3. ex) fastlane distribute type:"minor"
    2. version 명을 직접 지정하려면 명시 
      1. ex) fastlane distribute version:"1.3.4"
  3. Dev 배포
  4. Release 배포
  5. 슬랙 메시지 전송 

 

 

일단 해당 명령어로 dotenv 설치하고 ( .env파일에 환경변수 값들을 넣어놓기 위해 )

sudo gem install -n /usr/local/bin dotenv

 

Fastfile에 import

fastlane_require 'dotenv'
default_platform(:android)
platform :android do
	...
end

 

.env 파일

slack_url=".."
firebase_refresh_token=".."
dev_app_id=".."
release_app_id=".."

 

rerebase_refresh_token은 

fastlane run firebase_app_distribution_login

을 실행하여 refresh_token에 넣어놓기

 

dev_app_id는 firebase console 에서 AppId

 

slack_url은 해당 채널의 hook url 을 넣어주자. 

 

 def firebaseDev()
        gradle(
            task: "assembleDev",
            build_type: "release",
        )
        firebase_app_distribution(
            app: ENV['dev_app_id'],
            firebase_cli_token: ENV['firebase_refresh_token'],
            debug: true,
            groups: "TESTER",
            release_notes_file: "./release_note"
        )
    end

 

def message(version)
    slack(
        message: "안드로이드 배포 안내입니다.\nAPP Tester #{version} 업데이트 해주세요.",
        slack_url: ENV['slack_url'],
        payload:{
            "" => "",
            "수정사항" => File.open("../release_note").read
        },
        default_payloads:[],
    )
end

 

이제 release_note.txt에 수정사항을 넣어놓고 

slack 메시지와 firebase release_note 에 명시할 수 있게 된다.

 

release_note 경로 지정할때 firebase에선 ./ 로 하고 File.open 할때는 ../로 접근해야 정상동작한다 ( 이상 ) 


스토어 배포시의 방법 

  • Firebase Console 에서 서비스 계정 생성 
  • json 키 생성해서 프로젝트 모듈에 넣어둠
         gradle(
             task: "bundleProd",
             build_type: "release"
         )
         upload_to_play_store(
            track: "production",
            skip_upload_metadata: true,
            skip_upload_images: true,
            skip_upload_screenshots: true,
            skip_upload_apk: true,
            json_key: "./dearmate.json",
         )