Skip to content

Commit e8ae86a

Browse files
committed
chore: aws 배포 테스트 스크립트 작성
1 parent c646fe0 commit e8ae86a

File tree

4 files changed

+143
-0
lines changed

4 files changed

+143
-0
lines changed

.github/scripts/deploy.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/bash
2+
3+
PROJECT_ROOT="/home/ubuntu/build"
4+
JAR_FILE="$PROJECT_ROOT/spring-log4u.jar"
5+
6+
APP_LOG="$PROJECT_ROOT/application.log"
7+
ERROR_LOG="$PROJECT_ROOT/error.log"
8+
DEPLOY_LOG="$PROJECT_ROOT/deploy.log"
9+
10+
TIME_NOW=$(date +%c)
11+
12+
# build 파일 복사
13+
echo "$TIME_NOW > $JAR_FILE 파일 복사" >> $DEPLOY_LOG
14+
cp $PROJECT_ROOT/build/libs/*.jar $JAR_FILE
15+
16+
# jar 파일 실행
17+
echo "$TIME_NOW > $JAR_FILE 파일 실행" >> $DEPLOY_LOG
18+
nohup java -jar $JAR_FILE > $APP_LOG 2> $ERROR_LOG &
19+
20+
CURRENT_PID=$(pgrep -f $JAR_FILE)
21+
echo "$TIME_NOW > 실행된 프로세스 아이디 $CURRENT_PID 입니다." >> $DEPLOY_LOG

.github/scripts/stop.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/usr/bin/env bash
2+
3+
PROJECT_ROOT="/home/ubuntu/build"
4+
JAR_FILE="$PROJECT_ROOT/spring-log4u.jar"
5+
6+
DEPLOY_LOG="$PROJECT_ROOT/deploy.log"
7+
8+
TIME_NOW=$(date +%c)
9+
10+
# 현재 구동 중인 애플리케이션 pid 확인
11+
CURRENT_PID=$(pgrep -f $JAR_FILE)
12+
13+
# 프로세스가 켜져 있으면 종료
14+
if [ -z $CURRENT_PID ]; then
15+
echo "$TIME_NOW > 현재 실행중인 애플리케이션이 없습니다" >> $DEPLOY_LOG
16+
else
17+
echo "$TIME_NOW > 실행중인 $CURRENT_PID 애플리케이션 종료 " >> $DEPLOY_LOG
18+
kill -15 $CURRENT_PID
19+
fi

.github/workflows/ci.cd.prod.yml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: Deploy workflow on production environment
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
types:
8+
- closed
9+
workflow_dispatch: # 수동 실행 가능
10+
11+
12+
# 병합됐을 때
13+
jobs:
14+
deploy:
15+
if: github.event.pull_request.merged == true
16+
runs-on: ubuntu-latest
17+
18+
steps:
19+
# 체크아웃
20+
- uses: actions/checkout@v4
21+
22+
# AWS 인증 (IAM 사용자 Access Key, Secret Key 활용)
23+
- name: Configure AWS credentials
24+
uses: aws-actions/configure-aws-credentials@v1
25+
with:
26+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
27+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
28+
aws-region: ${{ secrets.AWS_REGION }}
29+
30+
# Gradle 권한 설정
31+
- name: Grant execute permission for gradlew
32+
run: chmod +x ./gradlew
33+
34+
# JDK 21 세팅
35+
- name: Set up JDK 21
36+
uses: actions/setup-java@v4
37+
with:
38+
java-version: 21
39+
distribution: 'temurin'
40+
41+
# Gradle cache 설정
42+
- name: Cache Gradle packages
43+
uses: actions/cache@v4
44+
with:
45+
path: ~/.gradle/caches
46+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
47+
restore-keys: ${{ runner.os }}-gradle
48+
49+
# Gradle build (우선 Test 제외)
50+
- name: Build with Gradle
51+
uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
52+
with:
53+
arguments: clean build -x test
54+
55+
56+
# 빌드 결과물을 S3 버킷에 업로드
57+
- name: Upload to AWS S3
58+
run: |
59+
aws deploy push \
60+
--application-name ${{ secrets.CODE_DEPLOY_APP_NAME }} \
61+
--ignore-hidden-files \
62+
--s3-location s3://$S3_BUCKET_NAME/$GITHUB_SHA.zip \
63+
--source .
64+
65+
# S3 버킷에 있는 파일을 대상으로 CodeDeploy 실행
66+
- name: Deploy to AWS EC2 from S3
67+
run: |
68+
aws deploy create-deployment \
69+
--application-name ${{ secrets.CODE_DEPLOY_APP_NAME }} \
70+
--deployment-config-name CodeDeployDefault.AllAtOnce \
71+
--deployment-group-name ${{ secrets.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \
72+
--s3-location bucket=$S3_BUCKET_NAME,key=$GITHUB_SHA.zip,bundleType=zip
73+
74+

appspec.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
version: 0.0
2+
os: linux
3+
4+
files:
5+
- source: /
6+
destination: /home/ubuntu/build
7+
overwrite: yes
8+
9+
permissions:
10+
- object: /
11+
pattern: "**"
12+
owner: ubuntu
13+
group: ubuntu
14+
15+
hooks:
16+
AfterInstall:
17+
- location: scripts/stop.sh
18+
timeout: 2000
19+
runas: ubuntu
20+
21+
AfterInstall:
22+
- location: scripts/docker-start.sh
23+
timeout: 2000
24+
runas: ubuntu
25+
26+
ApplicationStart:
27+
- location: scripts/deploy.sh
28+
timeout: 2000
29+
runas: ubuntu

0 commit comments

Comments
 (0)