항해 73일차
배포하기전에 Travis CI를 통해 빌드된 결과물을 보관할 수 있는 공간이 필요하다.
AWS S3에 저장한다.
파일들을 저장하고 접근 권한을 관리, 검색 등을 지원하는 파일 서버의 역할을 한다.
팀 프로젝트에서 S3를 사용하고 있는데 기존에는 게시글 작성 시 첨부되는 파일을 저장하는 용도로 사용하고 있다.
버킷 생성은 https://velog.io/@kyungwoon/TIL-%ED%95%AD%ED%95%B499-Day-50
참고하면 된다.(1번,2번,4번 과정 참고)
단, 2번 과정에서 모든 퍼블릭 액세스 차단에 체크해준다.
현재 프로젝트야 이미 깃허브에 오픈소스로 풀려있으니 문제없지만, 실제 서비스에서 할 때는 Jar 파일이 퍼블릭일 경우 누구나 내려받을 수 있어 코드나 설정값, 주요 키값들이 다 탈취될 수 있다.
퍼블릭이 아니더라도 IAM 사용자로 발급받은 키를 사용하니 접근 가능하므로 모든 액세스를 차단하는 설정에 체크
Travis CI가 AWS의 S3와 CodeDeploy에 접근할 수 있도록 설정해줘야 한다.
이미 사용자를 생성해놨다면 사용자명을 클릭해서 들어가 권한 추가를 해주면 되고 생성해둔 사용자가 없다면 사용자 추가를 눌러 생성해준다.
before_deploy:
- zip -r hanghae8-final-project ./*
- mkdir -p deploy
- mv hanghae8-final-project.zip deploy/hanghae8-final-project.zip
deploy:
- provider: s3
access_key_id: $AWS_ACCESS_KEY
secret_access_key: $AWS_SECRET_KEY
bucket: hanghae8-final-project-travis # S3 버킷
region: ap-northeast-2
skip_cleanup: true
acl: private # zip 파일 접근을 private으로
local_dir: deploy # before_deploy에서 생성한 디렉토리
wait-until-deployed: true
language: java
jdk:
- openjdk8
branches:
only:
- master
# Travis CI 서버의 Home
cache:
directories:
- '$HOME/.m2/repository'
- '$HOME/.gradle'
before_install:
- chmod +x gradlew
script: "./gradlew clean build"
before_deploy:
# - zip -r hanghae8-final-project ./*
# - mkdir -p deploy
# - mv hanghae8-final-project.zip deploy/hanghae8-final-project.zip
- mkdir -p before-deploy
- cp scripts/*.sh before-deploy/
- cp appspec.yml before-deploy/
- cp build/libs/*.jar before-deploy/
- cd before-deploy && zip -r before-deploy *
- cd ../ && mkdir -p deploy
- mv before-deploy/before-deploy.zip deploy/hanghae8-final-project.zip
deploy:
- provider: s3
access_key_id: $AWS_ACCESS_KEY
secret_access_key: $AWS_SECRET_KEY
bucket: hanghae8-final-project-travis # S3 버킷명
region: ap-northeast-2
skip_cleanup: true
acl: private # zip 파일 접근을 private으로
local_dir: deploy # before_deploy에서 생성한 디렉토리
wait-until-deployed: true
# CI 실행 완료 시 메일로 알람
notifications:
email:
recipients:
- 본인 이메일