Table of Contents
S3 에 파일전송
S3 에 버킷 생성하기
모든 퍼블릭 액세스 차단
이 체크되어 있는 것을 확인하면서 버킷을 생성합니다.
액세스키 생성하기
IAM
으로 이동하여, 사용자 추가
를 클릭하여 사용자를 추가합니다.
액세스 유형
은 프로그래밍 방식 액세스
를 체크합니다.
권한 설정
은 기본 정책 직접 연결
을 지정하고, AmazonS3FullAccess
, AWSCodeDeployFullAccess
를 추가합니다.
태그에는 키에는 Name
, 값에는 travis-deploy
또는 원하는 이름을 입력합니다.
사용자를 생성하면 액세스 키
와 비밀 액세스 키
가 발급됩니다.
Travis CI 에 키 등록하기
설정을 누르면 환경변수(Environment Variables)를 추가할 수 있습니다.
AWS_ACCESS_KEY
, AWS_SECRET_KEY
에 각각 위에서 부여받은 액세스 키
와 비밀 액세스 키
를 등록합니다.
.travis.yml 수정
......
cache:
directories:
- '$HOME/.m2/repository'
- '$HOME/.gradle'
script: "./gradlew clean build"
before_deploy:
- 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
- cp before-deploy/before-deploy.zip deploy/TestCI2.zip
deploy:
- provider: s3
access_key_id: $AWS_ACCESS_KEY
secret_access_key: $AWS_SECRET_KEY
bucket: skyer9-deploy
region: ap-northeast-2
skip_cleanup: true
acl: private
local_dir: deploy
wait-until-deployed: true
......
위에서 추가해 둔 환경변수를 이용할 수 있습니다.
scripts/deploy.sh
파일과 appspec.yml
파일을 build.gradle
이 위치한 폴더에 추가해 줍니다. 원래는 CodeDeploy
에서 쓰이는 파일이지만 미리 생성해 둡니다.
#!/bin/bash
REPOSITORY=/home/ubuntu/app/step2
PROJECT_NAME=TestCI
echo "> Build 파일 복사"
cp $REPOSITORY/zip/*.jar $REPOSITORY/
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -fl example | awk '{print $1}')
echo "현재 구동중인 어플리케이션 pid: $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 어플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/*.jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
echo "> $JAR_NAME 에 실행권한 추가"
chmod +x $JAR_NAME
echo "> $JAR_NAME 실행"
nohup java -jar \
-Dspring.config.location=classpath:/application.properties \
$JAR_NAME > $REPOSITORY/nohup.out 2>&1 &
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/app/step2/zip/
overwrite: yes
permissions:
- object: /
pattern: "**"
owner: ubuntu
group: ubuntu
hooks:
ApplicationStart:
- location: deploy.sh
timeout: 60
runas: ubuntu
커밋을 하고, S3에 파일이 배포되었는지 확인합니다.