프로젝트를 진행하면서 발생했던 이슈와 이러한 이슈를 어떻게 해결했는지 시리즈로 만들어 작성하려고 한다.
master 브랜치에 푸시되면 Travis CI가 자동으로 빌드 및 테스트 후 EC2에 배포되도록 했다.
application.yml 파일에는 외부에 노출되어서는 안될 주요 정보가 포함되어있다. 따라서 github에 yml 파일을 그대로 올려서는 안된다. 그렇다면 어떻게 EC2에 yml 파일을 전달할까?
암호화한 yml 파일을 github에 올리면 Travis CI가 파일을 복호화한 뒤 빌드하도록 한다. 따라서 yml 파일이 외부에 노출되지 않고 EC2에 전달된다.
먼저 로컬에서 travis-cli를 설치 후 로그인한다.
참고로 github 계정으로 로그인하려면 개인적인 접근 토큰이 필요하다. 따라서 github의 Settings > Developer settings > Personal access token에서 토큰을 생성하자.
travis login --com --github-token=(생성한 토큰)
로그인에 성공했으면 travis-cli로 yml 파일을 암호화한다. 이때 OS가 Windows일 경우 다음과 같이 암호화를 해야 한다.
먼저 암호화할 파일이 위치한 폴더로 이동 후 다음 명령어를 입력한다. 다음 명령어를 통해 key와 iv를 얻을 수 있다.
travis encrypt-file --pro (암호화할 파일 이름) --add -p
그리고 cmd에서 획득한 key와 iv로 다시 파일을 암호화해야 한다.
openssl enc -aes-256-cbc -in (파일명) -out (파일명).enc -K (key) -iv (iv)
암호화한 파일을 .travis.yml이 위치한 root 폴더로 이동시킨다.
참고로 yml 파일들이 /src/main/resources에 위치해야 스프링부트가 환경 변수를 읽을 수 있다. 따라서 암호화된 yml 파일을 복호화한 뒤 제 위치로 옮겨야 한다.
이러한 문제는 .travis.yml에 다음과 같이 작성함으로써 해결할 수 있다.
before_install:
- openssl aes-256-cbc -K {key} -iv {iv}
-in (파일명).enc -out ./src/main/resources/(파일명) -d