[Shell Script] CI/CD ์๋ํ ๋ฐฐํฌ๋ฅผ ์ํ ํ์ผ ๋ชจ๋ํฐ๋ ์ ์คํฌ๋ฆฝํธ ๋ง๋ค๊ธฐ
ํ์ฌ ๋ด์ ๋ฐฐํฌ ํ๊ฒฝ์ด ๋ณต์กํ๋ค.
ํ์ฌ ์ฌ์ง ์ค์ธ ํ์ฌ๋ ํนํ, ๋ณด์์ ์ธ ๋ถ๋ถ์ ๋ฏผ๊ฐํด์ ์ ๋ฌด๋ณ๋ก ๋ค์ํ ๋ฐฐํฌ ํ๊ฒฝ์ด ๊ตฌ์ฑ ๋์ด์๋ค.
๊ทธ ์ค์ ๊ฐ์ ํ๊ณ ์ถ์๋ ๋ฐ์ชฝ์ง๋ฆฌ CI/CD ํ๊ฒฝ์ด ์์๋๋ฐ ์ด๋ฒ์ ์๊ฐ์ ์ฌ์ ๊ฐ ์๊ฒจ ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค.
๊ธฐ์กด์ ํ๊ฒฝ์์ Jenkis๋ฅผ ์ด์ฉํด์ git์ ๋ฐ์๋ ์์ค๋ฅผ ์ค์ ๊ฐ๋ฐ ์๋ฒ์ ๋ฐ์ํ์๋๋ฐ ๋ณด์์ ์ธ ๋ฌธ์ ๋ก Jenkis๋ฅผ ํตํด์ ๋ฐฐํฌ๊น์ง ์งํํ์ง๋ ๋ชปํ๊ณ ์์ถ๋ ์์ค ํ์ผ๋ง linux ํ๊ฒฝ์ ๊ฐ๋ฐ ์๋ฒ๋ก ์ ์กํ๊ฒ ๊ตฌ์ฑ๋์ด ์์๋ค.
๋ฐ๋ผ์, ๋ฐฐํฌ๋ฅผ ์ํด์ ๊ฐ๋ฐ์ ์ง์ ์๋ฒ๋ก ์ ์ํด ์์ถ๋ ์์ค ํ์ผ์ ํ์ด์ ๋ฐฐํฌ๋ฅผ ์งํํ์๋ค.
์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ํ์ผ ๋ชจ๋ํฐ๋ง ์์ ๋ง๋ค์ด์ ์๋ฒ์์ ์๋๋ฐฐํฌ๋ฅผ ์งํํ ์ ์๊ฒ ๊ตฌ์ฑํ๋ค.
๐ ํด๊ฒฐ๋ฐฉ๋ฒ
1. Jenkis๋ฅผ ํตํด์ Flag ํ์ผ์ ์ ๋ฌํ๋ค.
ํ์ฌ jenkis์ ๊ตฌ์ฑ์ผ๋ก SSH ์ฐ๊ฒฐ์ ํตํด์ ํ์ผ์ put๊น์ง๋ ํ ์ ์์๋ค. ์ฐ๊ฒฐ๋ git์ ํ์ผ์ ๊ฐ์ ธ์ค๋ command ์ชฝ์ ๋ฐฐํฌ์ ํ์ํ ์ ๋ณด๋ฅผ ๊ธฐ์ ํ flag.txt ํ์ผ์ ๋ง๋ค์ด์ put์ ํตํด ๋ฐฐํฌํ ๊ฐ๋ฐ ์๋ฒ๋ก ์ ๋ฌํ๋ค.
2. flag.txt ํ์ผ ๊ฐ์ง sh ๋ง๋ค๊ธฐ
์ด๋ฒ ๊ธ์ ์ฃผ์ ์ธ ํ์ผ ๋ชจ๋ํฐ๋ง ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ ๋ค.
#!/bin/bash
# flag ํ์ผ ๊ฒฝ๋ก ๋ฐ ์ด๋ฆ
FILE_PATH="/home/user/flag/"
FILE_NAME="/deployFlag.txt"
FLAG_FILE=${FILE_PATH}${FILE_NAME}
# 2์ด๋ง๋ค flag ํ์ผ์ ํ์ธ
while true; do
if [-f "$FLAG_FILE"]; then
# ์ฒซ ์ค๊ณผ ๋ง์ง๋ง ์ค์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ
$FIRST_LINE=$(head -n 1 "$FLAG_FILE")
$LAST_LINE=$(tail -n 1 "$FLAG_FILE")
fi
# 2์ด ๋๊ธฐ
sleep 2
done
์ ์คํฌ๋ฆฝํธ๋ 2์ด๋ง๋ค ํน์ ์์น์ deployFlag.txt ํ์ผ์ด ์๋์ง ํ์ธํ๊ณ ์กด์ฌํ๋ค๋ฉด, ํ์ผ์ ์ฒซ ์ค๊ณผ ๋ง์ง๋ง ์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์คํฌ๋ฆฝํธ์ด๋ค.
์ค์ ํ์ฌ์์ ์ฌ์ฉํ๋ ์คํฌ๋ฆฝํธ๋ ์ ๋ณด๋ค ๋ ๋ณต์กํ์ง๋ง, ์์ ๊ฐ์ด ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ๋ฐฐํฌ๋ฅผ ๋ด๋นํ๋ ๋ณ๋์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํ์์ผ ๋ฐฐํฌ๋ฅผ ์งํํ๋ค.
3. ๋ฐฑ๊ทธ๋ผ์ด๋์์ ํ์ผ ๊ฐ์ง sh ์คํ ์ํค๊ธฐ
๋ฐฐํฌ๊ฐ๋ ๊ฐ๋ฐ ์๋ฒ์์ user์ ์ ์์ด ํด์ ๋๋๋ผ๊ณ ๊ณ์ํด์ ์์ด ์คํ ๋์ด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํ์์ผ์ผ ํ๋ค.
$ nohup sh /home/user/deployShell.sh &
nohup ๋ช ๋ น์ด๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๋ช ๋ น์ด๋ก ํ์ผ ๋ชจ๋ํฐ๋ง ์ (deployShell.sh)์ ์งํํ๋ค.
nohup ๋ช ๋ น์ด๋ ๋ค๋ฅธ ์์ ์ด ๋ค์ด์์ ๋๊ธฐ์ง ์๊ณ ํ๋ก์ธ์ค๋ฅผ ์งํํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋ช ๋ น์ด์ธ๋ฐ ์ฐ๋ฆฌ๋ ์๋ฒ์ ์ ์ํ ํฐ๋ฏธ๋์ด ์ข ๋ฃ๋์ด๋ ๊ณ์ ์์ด ์คํ๋ ์ ์๊ฒํด์ผํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋ง์ง๋ง์ "&"(๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ)๋ฅผ ๋ถ์ฌ์ค๋ค.
์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋ฉด "nuhup.out" ํ์ผ์ด nuhup ๋ช ๋ น์ผ๋ฅด ์คํํ ์์น์ ์์ฑ๋๊ณ ํด๋น ํ์ผ์ nuhup ์์ ์ผ๋ก ์ธํ ๋ก๊ทธ๊ฐ ์์ด๊ฒ ๋๋ค.
4. ์์ ๋ชจ๋ํฐ๋ง ํ๊ธฐ
๋ฐฑ๊ทธ๋ผ์ด๋์์ ํ์ผ์ ๋ชจ๋ํฐ๋งํ๋ shell์ ์ง์์ ์ผ๋ก ์คํํ๋ ๊ฒ์ด๋ค๋ณด๋ ์๋ฒ์ ์์์ ๊ณ์ํด์ ์ฌ์ฉํ๊ฒ ๋๋ค.
์ด๋ cpu์ memory์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๊ธฐ์ top ๋ช ๋ น์ด๋ก ์ธํด ์์ ์ ํ๋ก ์์์ ์ํ๋ฅผ ํ์ธํด ๋ณธ๋ค.
$ top
๋์ ๊ฒฝ์ฐ๋, ๋ฐฐํฌ๋ฅผ ๋ด๋นํ๋ ์์ ๋ณ๋๋ก ๊ตฌ์ฑ๋์ด์๊ณ 2์ด ๋ง๋ค ํ์ผ์ ์กด์ฌ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ๊ฒ์ด ์ฃผ์๊ธฐ์ ์ ํ ์ฑ๋ฅ์ ์ฐจ์ด๋ ๊ฑฐ์ ํ์ธํ ์ ์์ ๋งํผ ์์๋ค.
๋ฌผ๋ก , ์๋ฒ์ ์ํ๋ ์ ์คํฌ๋ฆฝํธ์ ์๋ง๋ค ๋ค๋ฅผ ์ ์๊ฒ ์ง๋ง, ๋์ฒด๋ก ํฐ ์ํฅ์ ์์ ๊ฒ ๊ฐ๋ค.
๋ง์ฝ, ์๋ฒ์ ์ํฅ์ด ์์๋ค๋ฉด ์คํฌ๋ฆฝํธ ๋ถ๋ฆฌ๋ฅผ ํด๋ณด๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด ๋ ์๋ ์๊ฒ ๋ค.
...
๋ฆฌ๋ ์ค๋ ์ปค๋์์ ํ์ผ์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์๋ inotify๋ผ๋ tool์ ์ ๊ณตํ๋ค. ์ด tool์ ์ด์ฉํ๋ค๋ฉด ๋ ์ ๋ฆฌํ๊ฒ ์ง๋ง, ์ด ์ญ์ ํ์ฌ์์ ๋ณด์์ผ๋ก ์ธํ์ฌ ์ค์นํ ์ ์์๊ธฐ์ ์์ ๊ฐ์ ์์ ์ ์งํํ๊ฒ ๋์๋ค.
๋ง์ฝ, ๋น์ทํ ์ํฉ์ด ์๋ค๋ฉด ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ๋ค.