무엇을 하고 있었냐면..
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 디렉토리가 존재하지 않기 때문)
deploy 후 서버에서 확인
cat firebase/firebase_service_key.json
로 파일을 읽어보니 형식에 맞추어 파일이 잘 생성되었다!!
++ 원칙적으로는
github actions에는 json을 secret에 저장하지 말라는데 다른 방법이 있나 추후에 찾아봐야겠다.