티스토리 뷰

반응형
SMALL

 

반응형

 

SMALL

 

이전 글에서 Github Secrets 를 등록 하는 방법을 정리했다. 

 

2025.05.28 - [Android/CICD] - [ CICD #1 ] GitHub secrets 등록 -1

 

[ CICD #1 ] GitHub secrets 등록 -1

예전부터 해보고 싶었던 빌드, 테스트, 배포 과정을 자동화에 대해서 시도해 보고 최종적으로 성공한 것에 대해 기록하고자 한다.CI/CD 도구로 여러가지가 있다는 건 알고만 있었다 1. Github Actions2

jihunstudy.tistory.com

 

이번에는 Firebase Distribution 에 테스트 apk 를 등록 하는 워크 플로우를 정리해 보려고 한다

 

개념은 이런거 같다 

 

내가 원하는 브렌치안에 .github/workflows 파일을 만들어서 CI/CD를 진행 하는것, 

 

처음에 내가 default 로 설정되어 있는 Main Branch 에 워크 플로우를 만들어서 CI/CD를 아무리 트리거를 해도 실행이 되지 않아 이게 뭔가 하고 계속 찾았던 적이 있다 

물론 옵션으로 branch 를 적을 수도 있지만, 

찾아보니 기본적으로 해당 branch 워크 플로우를 만들어 놓는 것이 덜 햇갈릴 수 있을거 같다고 생각 했다

 

그래서 우선 main branch 에는 init Code 만 Commit 되어 있기에 개발중인 develop branch 에 워크 플로우를 작성해서 트리거 하게 되었다.

 

name: Android Release Build and Firebase App Distribution

on:
  push:
    tags:
      - 'FBv*' # FBv로 시작하는 태그가 푸시될 때만 워크플로우 실행 (예: FBv1.0.4)

jobs:
  build:
    name: Build Release APK and Upload to Firebase App Distribution
    runs-on: ubuntu-latest

    steps:
    # GitHub 리포지토리에서 코드 가져오기
      - name: Checkout code
        uses: actions/checkout@v3

    # JDK 17 설치 (Android 빌드 도구 사용을 위해 필요)
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          distribution: 'zulu'
          java-version: '17'
          
    # keystore 파일 base64 디코딩 후 저장 (앱 서명에 사용)
      - name: Decode keystore.jks
        run: |
          mkdir -p app/jks
          echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 -d > app/jks/saveurlkey.jks
          
    # google-services.json 파일 base64 디코딩 후 저장 (Firebase 연동에 필요)
      - name: Decode google-services.json
        run: |
          mkdir -p app
          echo "${{ secrets.GOOGLE_SERVICES_JSON }}" | base64 -d > app/google-services.json

    # gradlew 실행 권한 부여
      - name: Grant execute permission to gradlew
        run: chmod +x ./gradlew

    # 릴리즈 APK 빌드 (keystore 정보 환경변수로 전달)
      - name: Build Release APK
        env:
          KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }}
          KEY_ALIAS: ${{ secrets.RELEASE_KEYSTORE_ALIAS }}
          KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
        run: ./gradlew clean assembleRelease

    # Firebase CLI 설치 (배포를 위해 필요)
      - name: Install Firebase CLI
        run: npm install -g firebase-tools

    # Firebase 서비스 계정 JSON을 파일로 저장
      - name: Save Firebase Service Account JSON
        env:
          FIREBASE_SERVICE_ACCOUNT: ${{ secrets.FIREBASE_SERVICE_ACCOUNT }}
        run: |
          echo "$FIREBASE_SERVICE_ACCOUNT" > ${{ github.workspace }}/service-account.json

    # Firebase App Distribution에 APK 업로드
      - name: Upload APK to Firebase App Distribution
        env:
          GOOGLE_APPLICATION_CREDENTIALS: ${{ github.workspace }}/service-account.json
        run: |
          firebase appdistribution:distribute app/build/outputs/apk/release/app-release.apk \
            --app ${{ secrets.FIREBASE_APP_ID }}

 

트리거는 모든 코드를 커밋하고 푸시한 후에 원하는 태그를 푸시 했을 때에만 트기거가 되도록 했다

 

어떤 방법이던 상관 없겠지만, 나는 태그를 사용한것 뿐이다 

 

코드 흐름상 느낀점은 

내가 로컬에서 필요한 파일들을 

github repository 에는 당연히 없기 때문에 
필요한 파일들을 가져오는 코드들이 대부분이며, 

 

마지막에는 upLoad 하는 코드다 

 

signingConfigs {
        create("release") {
            storeFile = file("jks/saveurlkey.jks")
            storePassword = System.getenv("KEYSTORE_PASSWORD")
            keyAlias = System.getenv("KEY_ALIAS")
            keyPassword = System.getenv("KEY_PASSWORD")
        }
    }
    
buildTypes {
        release {
            signingConfig = signingConfigs.getByName("release")
            ..
            ..
        }
    }

 

 

내 Repository 에 들어 있는 build.gradle 에 코드를 이렇게 수정해서 반영 해 줘야 한다

storeFile 는 당연히 로컬에서 jks 가 들어 있는 파일 위치를 지정해 줘야 하고, 

 

워크 플로우가 실행되면서 Github Secrets 에서 해당 위치에 keystore 파일을 넣어 주고 처리 하기 때문에 build.gradle 에 저렇게 처리해야 하는거 같다 .. 

 

# keystore 파일 base64 디코딩 후 저장 (앱 서명에 사용)
      - name: Decode keystore.jks
        run: |
          mkdir -p app/jks
          echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 -d > app/jks/saveurlkey.jks

 

step 중에 하나 예를 들자면 
keystore.jks 파일을 가져와서 repository 에 저장 할꺼야 

근데 app/jks 라는 폴더를 만들고 Github secrets 안에 있는 RELEASE_KEYSTORE_BASE64 를 가져와서 디코딩 해서 app/jks/saveurlkey.jks 라고 만들어서 넣어 둘꺼야 

 

라는 내용 

 

보다보면 내용들이 이해가 갈 것으로 보인다 

 

반응형
LIST
댓글