이제 Travis CI와 S3를 연동하여 travis ci에서 빌드를 마친 jar 파일을 S3에 저장할 것이다.
다음과 같은 시스템이 되는 것이다.
S3에 저장된 jar 파일은 code deploy에 전달되어 배포가 될 것이다.
결론적으로, S3를 사용하는 이유는 jar 파일을 전달하기 위해서이다.
1. 개발한 코드를 github에 push
2. travis ci는 이를 알아채고 test + build.
3. travis ci는 build가 완료되면 빌드 파일을 S3에 업로드함
4. travis ci는 code deploy에 배포 요청을 함
5. code deploy는 jar 파일을 가져와 ec2 서버를 돌아가며 배포를 진행(무중단 서버를 위함)
Travis CI같은 외부 서비스가 AWS에 접근하기 위해선 접근 권한을 가진 key가 필요하다.
AWS에선 인증과 관련된 기능은 IAM에서 관리한다.
이 IAM에서 Travis CI가 S3와 Code Deploy에 접근할 수 있도록 Key를 만들어보자.
s3 full access
code deploy full access
생성 완료하면 access key와 비밀 access key 두가지가 나오는데, 이 둘을 travis ci에 넣어줄 것이다.
다시 travis ci로 돌아와서 키를 넣어주자.
AWS_ACCESS_KEY
AWS_SECRET_KEY
상수를 등록해줬으므로, 앞으로 .travis.yml에 $AWS_ACCESS_KEY
, $AWS_SECRET_KEY
로 사용이 가능하다.
Travis CI 이후 생성된 Build File을 저장하도록 구성해보자.
이후 S3에 저장된 build 파일은 이후 CodeDeploy에서 배포할 파일로 가져가도록 구성할 것이다.
AWS의 S3에 접속한다.
이 때 모든 퍼블릭 엑세스를 차단해줘야 한다. 빌드 파일이 고대로 올라가기 때문에 properties에 있는 private key들이 털릴 수 있기 때문이다.
버킷이 생성되었으니 이제 travis ci와 S3를 연결해보자!
이제 travis ci에서 build를 마치면 s3에 파일을 올릴 수 있도록 코드를 추가해준다.
before_deploy:
- zip -r 3tree_tmp_private
- mkdir -p deploy
- mv 3tree_tmp_private.zip deploy/3tree_tmp_private.zip
deploy:
- provider: s3
access_key_id: $AWS_ACCESS_KEY
secret_access_key: $AWS_SECRET_KEY
bucket: 3tree-springboot-build-old # S3 버킷
region: ap-northeast-2
skip_cleanup: true
acl: private # zip 파일 접근을 private로
local_dir: deploy # before_deploy에서 생성한 디렉토리
wait-until-deployed: true
전체 파일은 다음과 같다.
language: java
jdk:
- openjdk11
branches:
only:
- master
cache:
directories:
- '$HOME/.m2/repository'
- '$HOME/.gradle'
script: "./gradlew clean build"
before_deploy:
- zip -r 3tree_tmp_private
- mkdir -p deploy
- mv 3tree_tmp_private.zip deploy/3tree_tmp_private.zip
deploy:
- provider: s3
access_key_id: $AWS_ACCESS_KEY
secret_access_key: $AWS_SECRET_KEY
bucket: 3tree-springboot-build-old # S3 버킷
region: ap-northeast-2
skip_cleanup: true
acl: private # zip 파일 접근을 private로
local_dir: deploy # before_deploy에서 생성한 디렉토리
wait-until-deployed: true
notifications:
email:
recipients:
- gkrry27232@naver.com
이후 변경 내용을 푸시해주고 Travis CI에서 확인해보자.
다음과 같이 완료되면 빌드가 성공한 것이다.
이제 만든 S3 버킷에 들어가면 업로드가 성공한 것을 확인할 수 있다.