4.EC2 인스턴스에서 쉘 스크립트 실행한다. (실행중인 앱 종료하고 새롭게 배포된 앱 실행)
# git action
on:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: |
./gradlew --version
./gradlew bootJar # 빌드
- name: Make Dir
run : |
mkdir test
mkdir test/scripts
# Jar 파일 복사
- name: Copy Jar
run: cp ./build/libs/*.jar ./test
# script
- name: Copy script
run : cp -r ./scripts/* ./test/scripts/
# appspec
- name: Copy appspec
run: cp ./appspec.yml ./test
# 파일 압축
- name: Make zip file
run: zip -r ./test.zip ./test
# Deploy
- name: Deploy
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.SECRET_KEY }}
aws-region: ap-northeast-2
- name: Upload to S3
run: aws s3 cp --region ap-northeast-2 <Git가상머신 내의 파일> s3://<버켓이름>/
- name: Code Deploy
run: aws deploy create-deployment --application-name <앱 이름> --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name <뱊 그룹> --s3-location bucket=<S3버켓 이름>,bundleType=zip,key=<버켓 내에 다운받을 파일>
# appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/app/
# 다운받을 경로
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
hooks:
ApplicationStart:
# 실행시킬 스크립트
- location: scripts/deploy.sh
timeout: 120
runas: ec2-user
# scripts/deploy.sh
#!/bin/bash
BUILD_JAR=$(ls /home/ec2-user/app/*.jar)
JAR_NAME=$(basename $BUILD_JAR)
echo "> build 파일명: $JAR_NAME" >> /home/ec2-user/deploy/deploy.log
echo "> build 파일 복사" >> /home/ec2-user/deploy/deploy.log
DEPLOY_PATH=/home/ec2-user/deploy/
cp $BUILD_JAR $DEPLOY_PATH
echo "> 현재 실행중인 애플리케이션 pid 확인" >> /home/ec2-user/deploy/deploy.log
CURRENT_PID=$(pgrep -f $JAR_NAME)
if [ -z $CURRENT_PID ]
then
echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다." >> /home/ec2-user/deploy/deploy.log
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
DEPLOY_JAR=$DEPLOY_PATH$JAR_NAME
echo "> DEPLOY_JAR 배포" >> /home/ec2-user/deploy/deploy.log
nohup java -jar $DEPLOY_JAR >> /home/ec2-user/deploy.log 2>/home/ec2-user/deploy/deploy_err.log &