[TIL] 항해99 Day 73
항해 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버킷으로 가보면 업로드가 성공한 것을 확인 가능하다.  

 
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Author And Source
                            
                            이 문제에 관하여([TIL] 항해99 Day 73), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://velog.io/@kyungwoon/TIL-항해99-Day-73
                            
                            
                            
                                저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
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: truelanguage: 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:
     - 본인 이메일
  S3버킷으로 가보면 업로드가 성공한 것을 확인 가능하다.  

Author And Source
이 문제에 관하여([TIL] 항해99 Day 73), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kyungwoon/TIL-항해99-Day-73저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)