[TIL] 항해99 Day 73

4877 단어 Travis CITravis CI

항해 73일차

Travis CI와 AWS S3 연동

배포하기전에 Travis CI를 통해 빌드된 결과물을 보관할 수 있는 공간이 필요하다.
AWS S3에 저장한다.

S3 버킷 생성

파일들을 저장하고 접근 권한을 관리, 검색 등을 지원하는 파일 서버의 역할을 한다.

팀 프로젝트에서 S3를 사용하고 있는데 기존에는 게시글 작성 시 첨부되는 파일을 저장하는 용도로 사용하고 있다.

버킷 생성은 https://velog.io/@kyungwoon/TIL-%ED%95%AD%ED%95%B499-Day-50
참고하면 된다.(1번,2번,4번 과정 참고)
단, 2번 과정에서 모든 퍼블릭 액세스 차단에 체크해준다.
현재 프로젝트야 이미 깃허브에 오픈소스로 풀려있으니 문제없지만, 실제 서비스에서 할 때는 Jar 파일이 퍼블릭일 경우 누구나 내려받을 수 있어 코드나 설정값, 주요 키값들이 다 탈취될 수 있다.
퍼블릭이 아니더라도 IAM 사용자로 발급받은 키를 사용하니 접근 가능하므로 모든 액세스를 차단하는 설정에 체크

AWS Key 발급 과정

Travis CI가 AWS의 S3와 CodeDeploy에 접근할 수 있도록 설정해줘야 한다.
이미 사용자를 생성해놨다면 사용자명을 클릭해서 들어가 권한 추가를 해주면 되고 생성해둔 사용자가 없다면 사용자 추가를 눌러 생성해준다.

  • 권한 설정 방식은 3개 중[기존 정책 직접연결]을 선택한다.
  • 정책 검색에서 s3full로 검색하여 체크하고 다음 권한으로 CodeDeployFull을 검색하여 체크 후 완료

Travis CI에 키 등록

  • 설정 화면으로 이동 후 아래로 조금 내려보면 Environment Variables 항목이 있다.
    여기에 AWS_ACCESS_KEY, AWS_SECRET_KEY를 변수로 해서 IAM 사용자에서 발급받은 키 값들을 등록한다.

.travis.yml 추가

  • Travis CI에서 빌드하여 만든 Jar 파일을 S3에 저장을 위해 .travis.yml에 다음 코드를 추가

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:
     - 본인 이메일
  • 설정이 다 되었다면 깃허브 푸시를 하고 Travis CI에서 모든 빌드 성공 확인 후
    S3버킷으로 가보면 업로드가 성공한 것을 확인 가능하다.

좋은 웹페이지 즐겨찾기