본문 바로가기

Docker

Trouble Shooting: 배포 시 env 관리하기

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

https://sirong-blog.tistory.com/entry/Github-actions-secretgithub-workflow%EB%A1%9C-%EB%B0%B0%ED%8F%AC-%EC%8B%9C-json-%ED%8C%8C%EC%9D%BC-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0

 

[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