-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrollback.sh
More file actions
149 lines (124 loc) ยท 4.54 KB
/
rollback.sh
File metadata and controls
149 lines (124 loc) ยท 4.54 KB
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/bin/bash
# ๐ ์๋ ๋กค๋ฐฑ ์คํฌ๋ฆฝํธ
set -e
NGINX_CONF="/etc/nginx/sites-available/default"
ROLLBACK_LOG="/tmp/rollback.log"
log() {
local message="[$(date '+%H:%M:%S')] $1"
echo "$message"
echo "$message" >> "$ROLLBACK_LOG"
}
# ๊ธด๊ธ ๋กค๋ฐฑ ํจ์
emergency_rollback() {
log "๐จ ๊ธด๊ธ ๋กค๋ฐฑ ์์!"
# Nginx ์ค์ ๋ฐฑ์
๋ณต๊ตฌ
if [ -f "${NGINX_CONF}.backup" ]; then
log "๐ Nginx ์ค์ ๋ฐฑ์
๋ณต๊ตฌ ์ค..."
sudo cp "${NGINX_CONF}.backup" "$NGINX_CONF"
if sudo nginx -t; then
sudo systemctl reload nginx
log "โ
Nginx ์ค์ ๋ณต๊ตฌ ์๋ฃ"
else
log "โ Nginx ์ค์ ๋ณต๊ตฌ ์คํจ"
# ์์ ํ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ๋ณต๊ตฌ
restore_safe_config
fi
else
log "โ ๏ธ Nginx ๋ฐฑ์
ํ์ผ์ด ์์ต๋๋ค. ์์ ํ ์ค์ ์ผ๋ก ๋ณต๊ตฌํฉ๋๋ค."
restore_safe_config
fi
}
# ์์ ํ ์ค์ ๋ณต๊ตฌ
restore_safe_config() {
log "๐ก๏ธ ์์ ํ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ๋ณต๊ตฌ ์ค..."
# ๋ ํ๊ฒฝ ๋ชจ๋ ํ์ฑํ (๋ถํ๋ถ์ฐ)
sudo sed -i 's/server localhost:8081 down;/server localhost:8081;/' $NGINX_CONF
sudo sed -i 's/server localhost:8082 down;/server localhost:8082;/' $NGINX_CONF
if sudo nginx -t; then
sudo systemctl reload nginx
log "โ
์์ ํ ์ค์ ์ ์ฉ ์๋ฃ"
else
log "โ ์น๋ช
์ ์ค๋ฅ: Nginx ์ค์ ๋ณต๊ตฌ ๋ถ๊ฐ"
exit 1
fi
}
# ๋ฉ์ธ ๋กค๋ฐฑ ๋ก์ง
main() {
log "๐ ๋กค๋ฐฑ ํ๋ก์ธ์ค ์์"
# ๋ฐฐํฌ ์ํ ํ์ผ์ด ์๋์ง ํ์ธ
if [ ! -f "/tmp/deployment_state" ]; then
log "โ ๏ธ ๋ฐฐํฌ ์ํ ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค. ๊ธด๊ธ ๋กค๋ฐฑ์ ์ํํฉ๋๋ค."
emergency_rollback
exit 0
fi
# ๋ฐฐํฌ ์ํ ๋ก๋
source /tmp/deployment_state
log "๐ ๋กค๋ฐฑ ๋์: $TARGET_ENV โ $CURRENT_ENV"
# ์คํจํ ์ปจํ
์ด๋ ์ค์ง
log "๐ ์คํจํ $TARGET_ENV ์ปจํ
์ด๋ ์ค์ง ์ค..."
docker stop $TARGET_SERVICE 2>/dev/null || true
docker compose rm -f $TARGET_SERVICE 2>/dev/null || true
# ์ด์ ํ๊ฒฝ ์ฌ์์ (๋ง์ฝ ์ค์ง๋์๋ค๋ฉด)
log "๐ ์ด์ $CURRENT_ENV ํ๊ฒฝ ๋ณต๊ตฌ ์ค..."
if [ "$CURRENT_ENV" = "BLUE" ]; then
CURRENT_PORT="8081"
CURRENT_SERVICE="app-blue"
else
CURRENT_PORT="8082"
CURRENT_SERVICE="app-green"
fi
# ์ด์ ํ๊ฒฝ์ด ์คํ ์ค์ธ์ง ํ์ธ
if ! docker ps | grep -q $CURRENT_SERVICE; then
log "๐ ์ด์ $CURRENT_ENV ํ๊ฒฝ ์ฌ์์ ์ค..."
docker compose up -d $CURRENT_SERVICE
# ์ด์ ํ๊ฒฝ ํฌ์ค์ฒดํฌ
log "๐ฅ ์ด์ $CURRENT_ENV ํ๊ฒฝ ํฌ์ค์ฒดํฌ..."
if ./health-check.sh "$CURRENT_PORT" "$CURRENT_ENV" 20 2; then
log "โ
์ด์ $CURRENT_ENV ํ๊ฒฝ ์ ์ ๋ณต๊ตฌ"
else
log "โ ์ด์ $CURRENT_ENV ํ๊ฒฝ ๋ณต๊ตฌ ์คํจ"
# ๋ ํ๊ฒฝ ๋ชจ๋ ๋ฌธ์ ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ๊ธด๊ธ ์กฐ์น
emergency_rollback
exit 1
fi
else
log "โ
์ด์ $CURRENT_ENV ํ๊ฒฝ์ด ์ด๋ฏธ ์คํ ์ค์
๋๋ค"
fi
# Nginx ์ค์ ๋กค๋ฐฑ
log "๐ Nginx ํธ๋ํฝ ์ค์ ๋กค๋ฐฑ ์ค..."
if [ "$CURRENT_ENV" = "BLUE" ]; then
# Green์์ Blue๋ก ๋กค๋ฐฑ
sudo sed -i 's/server localhost:8082;/server localhost:8082 down;/' $NGINX_CONF
sudo sed -i 's/server localhost:8081 down;/server localhost:8081;/' $NGINX_CONF
else
# Blue์์ Green์ผ๋ก ๋กค๋ฐฑ
sudo sed -i 's/server localhost:8081;/server localhost:8081 down;/' $NGINX_CONF
sudo sed -i 's/server localhost:8082 down;/server localhost:8082;/' $NGINX_CONF
fi
# Nginx ์ค์ ์ ์ฉ
if sudo nginx -t; then
sudo systemctl reload nginx
log "โ
Nginx ์ค์ ๋กค๋ฐฑ ์๋ฃ"
else
log "โ Nginx ์ค์ ๋กค๋ฐฑ ์คํจ - ๊ธด๊ธ ๋ณต๊ตฌ ์๋"
emergency_rollback
exit 1
fi
# ๋กค๋ฐฑ ํ ์ต์ข
๊ฒ์ฆ
log "๐ ๋กค๋ฐฑ ์๋ฃ ๊ฒ์ฆ ์ค..."
if ./health-check.sh "$CURRENT_PORT" "$CURRENT_ENV" 10 2; then
log "โ
๋กค๋ฐฑ ์ฑ๊ณต! $CURRENT_ENV ํ๊ฒฝ์ผ๋ก ๋ณต๊ตฌ๋์์ต๋๋ค."
# ์ ๋ฆฌ ์์
sudo rm -f "${NGINX_CONF}.backup"
rm -f /tmp/deployment_state
# ์คํจํ ์ด๋ฏธ์ง ์ ๋ฆฌ
log "๐งน ์คํจํ ๋ฐฐํฌ ์ ๋ฆฌ ์ค..."
docker image prune -f
log "๐ ๋กค๋ฐฑ ํ๋ก์ธ์ค ์๋ฃ!"
else
log "โ ๋กค๋ฐฑ ๊ฒ์ฆ ์คํจ - ์์คํ
์ํ๋ฅผ ํ์ธํด์ฃผ์ธ์"
exit 1
fi
}
# ์คํฌ๋ฆฝํธ ์คํ
main "$@"