[CI/CD] S3 에 파일전송 (2/3)

By | 2020년 3월 29일
Table of Content

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에 파일이 배포되었는지 확인합니다.

답글 남기기