-
Notifications
You must be signed in to change notification settings - Fork 1
131 lines (117 loc) · 4.41 KB
/
deploy.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
name: Deploy on Merge
on:
push:
branches:
- main # main 브랜치로 푸시될 때 실행
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# 1. Node.js 및 pnpm 설치
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '18'
- name: Install pnpm
run: npm install -g pnpm
# 2. Repository Checkout
- name: Checkout repository
uses: actions/checkout@v2
with:
# 필요 시 전체 이력을 가져오도록 설정 (얕은 복사 방지)
fetch-depth: 0
- name: Ensure Repo is Non-Shallow
run: |
if git rev-parse --is-shallow-repository | grep -q "true"; then
echo "Repository is shallow. Attempting unshallow..."
git fetch --unshallow
else
echo "Repository is already non-shallow."
fi
- name: Compare HEAD with HEAD^
id: diff
run: |
if git cat-file -e HEAD^; then
echo "Comparing HEAD^ with HEAD"
git diff --name-only HEAD^ HEAD > changed_files.txt
# 줄바꿈을 공백으로 치환
CHANGED_FILES=$(tr '\n' ' ' < changed_files.txt)
# 한 줄로 된 문자열만 GITHUB_ENV에 저장 가능
echo "CHANGED_FILES=$CHANGED_FILES" >> $GITHUB_ENV
cat changed_files.txt
else
echo "HEAD^ does not exist (probably only one commit)."
echo "CHANGED_FILES=" >> $GITHUB_ENV
fi
# 4. 클라이언트 배포
- name: Deploy Client
if: contains(env.CHANGED_FILES, 'apps/client/')
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }}
run: |
echo "${{ secrets.FRONT_END_ENV }}" > apps/client/.env
cd apps/client
pnpm install
pnpm run build
sudo apt-get update
sudo apt-get install -y python3-pip
pip3 install --upgrade awscli
aws s3 cp ./dist s3://amzn-s3-ask-it-bucket/dist --recursive
# 5. 서버 배포
- name: Deploy Server
if: contains(env.CHANGED_FILES, 'apps/server/')
uses: appleboy/[email protected]
with:
host: ${{ secrets.WEB_SERVER_IP }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.NCP_SERVER_RSA_PRIVATE_KEY }}
script: |
SERVER_DIR="/home/${{ secrets.SERVER_USER }}/Ask-It-server"
if [ ! -d "$SERVER_DIR" ]; then
mkdir -p $SERVER_DIR
fi
if [ ! -d "$SERVER_DIR/.git" ]; then
git clone "${{ secrets.GIT_REPO_URL }}" $SERVER_DIR
else
cd $SERVER_DIR
git reset --hard
git pull origin main
fi
cd $SERVER_DIR/apps/server
echo "${{ secrets.SERVER_ENV }}" > .env
sudo docker build -t ask-it-api .
if [ $(sudo docker ps -q -f name=ask-it-api) ]; then
sudo docker stop ask-it-api
sudo docker rm ask-it-api
fi
sudo docker run -d -p 3000:3000 --network ask-it --name ask-it-api ask-it-api
# 6. 소켓 서버 배포
- name: Deploy Socket Server
if: contains(env.CHANGED_FILES, 'apps/socket-server/')
uses: appleboy/[email protected]
with:
host: ${{ secrets.WEB_SERVER_IP }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.NCP_SERVER_RSA_PRIVATE_KEY }}
script: |
SOCKET_DIR="/home/${{ secrets.SERVER_USER }}/Ask-It-socket"
if [ ! -d "$SOCKET_DIR" ]; then
mkdir -p $SOCKET_DIR
fi
if [ ! -d "$SOCKET_DIR/.git" ]; then
git clone "${{ secrets.GIT_REPO_URL }}" $SOCKET_DIR
else
cd $SOCKET_DIR
git reset --hard
git pull origin main
fi
cd $SOCKET_DIR/apps/socket-server
echo "${{ secrets.SOCKET_ENV }}" > .env
sudo docker build -t ask-it-socket .
if [ $(sudo docker ps -q -f name=ask-it-socket) ]; then
sudo docker stop ask-it-socket
sudo docker rm ask-it-socket
fi
sudo docker run -d -p 4000:4000 --network ask-it --name ask-it-socket ask-it-socket