1. 개요
시작에 앞서 이 일은 대부분 본인의 실수로 일어난 일임을 먼저 고지한다. 이 글은 내가 겪은 문제의 원인과 해결과정을 작성한 글이다.
2. 문제 발생
Docker로 CI/CD를 진행하여 git action 스크립트도 다 적고 배포하던 중 에러가 발생했다.
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.jwt.secret' in value "${spring.jwt.secret}"
2-1 해결 1: 환경변수 주입
해당 프로젝트에서는 환경 변수를 주입하는 방식으로 민감 정보를 관리한다. 이에 따라 env 파일을 만들어 깃허브에 secrets로 등록하고
script: |
sudo touch .env
echo "${{ secrets.ENV_VARS }}" | sudo tee .env > /dev/null
docker compose -f docker-compose.yml --env-file ./.env up -d
ec2에 env를 만들고 이를 환경변수로 주입하여 실행하는 스크립트를 작성했다. 실패했다.
2-2 application.yml의 부재
git actions의 docker pull 로그 일부이다. 이 이전에 수동으로 배포 후 다시 CI/CD를 돌렸는데 docker에서는 이미지 간의 차이점을 감지하고 pull을 진행했다. 직접 배포시와 자동 배포시의 이미지가 다른 것이다. 즉, 그 이전에 이미지를 만드는 과정에서 잘못된 이미지를 만들게 된 것이다.
더 찾아보던 중 yml 파일의 부재를 깨달았다. 이 이전에는 submodule을 사용하여 민감 정보를 관리했으므로 이를 무시 처리 했던 것이다.
2-3 firebase key 등록
이 프로젝트에서 FCM을 사용하므로 firebase key를 등록해야 한다.
- name: create firebase key
run: |
cd ./src/main/resources
ls -a .
touch ./fcm-service-key.json
echo "${{ secrets.FIREBASE_KEY }}" > ./fcm-service-key.json
shell: bash
아까와 마찬가지로 json을 만들고, 이를 등록해주었다. 그런데 다음과 같은 예외가 발생했다.
Use JsonReader.setLenient(true) to accept malformed JSON at line 2 column 4 path $
gson에서 Firebase key를 정상적으로 읽어들이지 못하는 현상이 발생한 것이다. github secrets에 json 파일을 넣으면 쌍따옴표를 모조리 없애기 때문에 의도하는 값을 전달할 수 없다. 따라서 다음과 같이 만들어주어야 한다.
- name: create-json
id: create-json
uses: jsdaniell/create-json@v1.2.2
with:
name: "fcm-service-key.json"
json: ${{ secrets.FIREBASE_KEY }}
dir: 'src/main/resources/'
드디어 정상적으로 애플리케이션이 작동하는 것을 확인할 수 있었다.
3. 참고자료
https://choo.oopy.io/fd2d4fc6-21ac-45b6-bd0c-05768920bb00
CICD 오작동 해결(secret에 json 추가)
배포자동화 오작동 문제 해결 1 (간단하게 해결)
choo.oopy.io
[Github actions, secret]github workflow로 배포 시 json 파일 추가하기
이번 공강구조대 프로젝트에서 FCM을 이용하여 모바일 사용자에게 푸쉬알림을 보내기로 하여 Firebase관련 설정을 해야 했다. 설정파일에서 firebase admin sdk를 스프링부트에서 사용하기위해 연결에
sirong-blog.tistory.com
https://popcorn-overflow.tistory.com/17
[Docker, AWS, Spring] docker-compose시 환경변수 전달하고 스프링부트 application.yaml에서 사용하기
저는 보안 전문가가 아닙니다.하지만 개발자라면 보안을 고려하지 않을 수 없겠죠.제가 사용했던 기존의 방법입니다.application.yaml파일을 github repository secret으로 두었기 때문에 언뜻 보면 안전해
popcorn-overflow.tistory.com
'Docker' 카테고리의 다른 글
Docker CI/CD 진행하기 (3) | 2024.12.28 |
---|---|
Docker-compose 사용하기 (1) | 2024.12.11 |
Hello Docker! : 프로젝트 EC2에 배포해보기 (2) | 2024.11.02 |