무엇을 하고 있었냐면..
FCM을 이용하여 푸시 알림을 구현했다. 알림 전송을 요청하는 과정에서 fcm access token을 받아와 정상적인 서버인지 검사하는데, 이 때 파이어베이스에서 발급 받은 json 형식의 서비스 키를 이용한다. 노출되면 안 되는 파일이기 때문에 secrets에 등록하여 자동 배포할 때 서버에 적재했다.
([CI/CD] GitHub Actions와 AWS CodeDeploy를 활용한 SpringBoot 프로젝트 EC2에 자동 배포 적용 - CD편] 참고)
처음에 작성한 deploy.yml 중 파이어베이스 키 파일 적재 코드
#firebase 키 데이터 파일 정보
- name: Set Firebase Service Key JSON File
run: |
cd ./src/main/resources
mkdir firebase
cd ./firebase
touch ./firebase_service_key.json
echo "${{ secrets.FIREBASE_SERVICE_KEY }}" > ./firebase_service_key.json
문제
빌드와 배포가 잘 돼서 좋아하던 찰나에 푸시 알림을 전송하는 api를 호출하니, 키 파일의 2번째 줄에서 예상하지 못한 문자가 나왔다는 오류가 떴다.
Unexpected character ('t' (code 116)): was expecting double-quote to start field name
at [Source: (org.springframework.boot.loader.jar.ZipInflaterInputStream); line: 2, column: 4]

원인
서버에서 확인해보니 오른쪽 사진처럼 json 파일의 큰 따옴표가 다 사라져서 올라가 있다. 그러면 당연히 안 읽어지겠지!!!!!😡
검색해보니 이미 많은 사람들이 겪은 문제 같다.

github actions secrets에 json 파일 내용을 넣으면 json 파일의 큰따옴표가 다 사라지게 된다고 한다.
해결
deploy.yml
에서 echo "${{ secrets.FIREBASE_SERVICE_KEY }}" > ./firebase_service_key.json
로 올리던 코드를 create-json 라이브러리를 이용하여 json 파일을 생성하도록 바꿔준다.
수정 코드
- name: Set Firebase Service Key JSON File
id: create-json
uses: jsdaniell/create-json@v1.2.2
with:
name: "firebase_service_key.json"
json: ${{ secrets.FIREBASE_SERVICE_KEY }}
dir: './src/main/resources/firebase'
resources/firebase 안에 파일을 만들었기 때문에 firebase 디렉토리를 생성하는 과정도 포함했다.(현재 레파지토리에서 resources 디렉토리 안애 firebase 디렉토리가 존재하지 않기 때문)
create-json - GitHub Marketplace
Create an JSON file from secret or a string of a json
github.com
deploy 후 서버에서 확인
cat firebase/firebase_service_key.json
로 파일을 읽어보니 형식에 맞추어 파일이 잘 생성되었다!!

++ 원칙적으로는
github actions에는 json을 secret에 저장하지 말라는데 다른 방법이 있나 추후에 찾아봐야겠다.
무엇을 하고 있었냐면..
FCM을 이용하여 푸시 알림을 구현했다. 알림 전송을 요청하는 과정에서 fcm access token을 받아와 정상적인 서버인지 검사하는데, 이 때 파이어베이스에서 발급 받은 json 형식의 서비스 키를 이용한다. 노출되면 안 되는 파일이기 때문에 secrets에 등록하여 자동 배포할 때 서버에 적재했다.
([CI/CD] GitHub Actions와 AWS CodeDeploy를 활용한 SpringBoot 프로젝트 EC2에 자동 배포 적용 - CD편] 참고)
처음에 작성한 deploy.yml 중 파이어베이스 키 파일 적재 코드
#firebase 키 데이터 파일 정보
- name: Set Firebase Service Key JSON File
run: |
cd ./src/main/resources
mkdir firebase
cd ./firebase
touch ./firebase_service_key.json
echo "${{ secrets.FIREBASE_SERVICE_KEY }}" > ./firebase_service_key.json
문제
빌드와 배포가 잘 돼서 좋아하던 찰나에 푸시 알림을 전송하는 api를 호출하니, 키 파일의 2번째 줄에서 예상하지 못한 문자가 나왔다는 오류가 떴다.
Unexpected character ('t' (code 116)): was expecting double-quote to start field name
at [Source: (org.springframework.boot.loader.jar.ZipInflaterInputStream); line: 2, column: 4]

원인
서버에서 확인해보니 오른쪽 사진처럼 json 파일의 큰 따옴표가 다 사라져서 올라가 있다. 그러면 당연히 안 읽어지겠지!!!!!😡
검색해보니 이미 많은 사람들이 겪은 문제 같다.

github actions secrets에 json 파일 내용을 넣으면 json 파일의 큰따옴표가 다 사라지게 된다고 한다.
해결
deploy.yml
에서 echo "${{ secrets.FIREBASE_SERVICE_KEY }}" > ./firebase_service_key.json
로 올리던 코드를 create-json 라이브러리를 이용하여 json 파일을 생성하도록 바꿔준다.
수정 코드
- name: Set Firebase Service Key JSON File
id: create-json
uses: jsdaniell/create-json@v1.2.2
with:
name: "firebase_service_key.json"
json: ${{ secrets.FIREBASE_SERVICE_KEY }}
dir: './src/main/resources/firebase'
resources/firebase 안에 파일을 만들었기 때문에 firebase 디렉토리를 생성하는 과정도 포함했다.(현재 레파지토리에서 resources 디렉토리 안애 firebase 디렉토리가 존재하지 않기 때문)
create-json - GitHub Marketplace
Create an JSON file from secret or a string of a json
github.com
deploy 후 서버에서 확인
cat firebase/firebase_service_key.json
로 파일을 읽어보니 형식에 맞추어 파일이 잘 생성되었다!!

++ 원칙적으로는
github actions에는 json을 secret에 저장하지 말라는데 다른 방법이 있나 추후에 찾아봐야겠다.