[ CI ] Github action google-services.json build 오류 해결

hyomin·2024년 2월 4일
0

Android

목록 보기
9/9

👀 오류사항

진행 중인 프로젝트에서 ktlint를 적용하여 github action을 이용해 CI를 구축했다.

그리고 FCM 설정을 위해 프로젝트 내부에 google-services.json 파일을 추가하였지만, secret 문서이기 때문에 .gitignore에 추가하여 레포에 올라가는 것을 막아놓은 상태였다.

이 상태에서 workflow를 돌리니 이런 오류가 발생했다...!

FAILURE: Build failed with an exception.

* What went wrong:
11 actionable tasks: 7 executed, 4 up-to-date
Execution failed for task ':app:processDebugGoogleServices'.
> File google-services.json is missing. 
  The Google Services Plugin cannot function without it. 
  Searched locations: /home/runner/work/Don-t-Forget---Android/Don-t-Forget---Android/app/src/debug/google-services.json, /

google-services.json 파일을 찾을 수 없다는 내용...

그래서 처음에는 해당 위치에 빈 파일을 넣어 놓는 방법을 선택했었다.
대충 주석만 넣어서

# for ktlint

이런 식으로 넣었는데

Execution failed for task ':app:processDebugGoogleServices'.
> Malformed root json at /home/runner/work/Don-t-Forget---Android/Don-t-Forget---Android/app/google-services.json

포맷이 문제였는지 해당 오류가 발생했다

좀 더 제대로 된 문제 해결 방법을 찾아보고자 했다

✅ 해결방안

secrets 파일 생성

레포지토리 내부 설정으로 들어가면 다음과 같은 탭에서 secrets 파일을 만들 수 있다.

새롭게 파일을 만들고 이름을 기억하자. 그리고 내부는 기존의 파일을 복붙하면된다.

workflow 파일 수정

기존 workflow

name: Android Build CI

on:
    pull_request:
        branches: [ develop, main ]

jobs:
    build:

        runs-on: ubuntu-latest

        steps:
            - uses: actions/checkout@v3
            - name: set up JDK 17
              uses: actions/setup-java@v3
              with:
                  java-version: '17'
                  distribution: 'temurin'
                  cache: gradle

            - name: Grant execute permission for gradlew
              run: chmod +x gradlew

            - name: Ktlint Check
              run: ./gradlew --no-daemon ktlintCheck --continue

            - name: Build with Gradle
              run: ./gradlew build

ktlint 를 체크하고 build를 실행하는 workflow이다

이제 여기에 google-serivces.json 파일을 만들고 데이터를 불러오는 작업을 추가할 것이다

name: Android Build CI

on:
    pull_request:
        branches: [ develop, main ]

jobs:
    build:

        runs-on: ubuntu-latest

        steps:
            - uses: actions/checkout@v3
            - name: set up JDK 17
              uses: actions/setup-java@v3
              with:
                  java-version: '17'
                  distribution: 'temurin'
                  cache: gradle

            - name: Grant execute permission for gradlew
              run: chmod +x gradlew

            - name: Ktlint Check
              run: ./gradlew --no-daemon ktlintCheck --continue
            
            // 파일을 생성하는 job
            - name: Create file
              run: cat /home/runner/work/<Project-Name>/<Project-Name>/app/google-services.json | base64
              
            // 데이터를 덮어 쓰는 job
            - name: Putting data
              env:
                DATA: ${{ secrets.GOOGLE_SERVICES_JSON }}
              run: echo $DATA > /home/runner/work/<Project-Name>/<Project-Name>/app/google-services.json

            - name: Build with Gradle
              run: ./gradlew build
<Project-Name>/<Project-Name>

여기 부분에는 본인의 프로젝트명을 적어주면 된다!

결과

profile
🌱

0개의 댓글