๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Programming/Linux

[Shell Script] CI/CD ์ž๋™ํ™” ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ํŒŒ์ผ ๋ชจ๋‹ˆํ„ฐ๋‹ ์‰˜ ์Šคํฌ๋ฆฝํŠธ ๋งŒ๋“ค๊ธฐ

728x90
๋ฐ˜์‘ํ˜•

ํšŒ์‚ฌ ๋‚ด์˜ ๋ฐฐํฌ ํ™˜๊ฒฝ์ด ๋ณต์žกํ•˜๋‹ค.

 

ํ˜„์žฌ ์žฌ์ง ์ค‘์ธ ํšŒ์‚ฌ๋Š” ํŠนํžˆ, ๋ณด์•ˆ์ ์ธ ๋ถ€๋ถ„์— ๋ฏผ๊ฐํ•ด์„œ ์—…๋ฌด๋ณ„๋กœ ๋‹ค์–‘ํ•œ ๋ฐฐํฌ ํ™˜๊ฒฝ์ด ๊ตฌ์„ฑ ๋˜์–ด์žˆ๋‹ค.

 

๊ทธ ์ค‘์— ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๋ฐ˜์ชฝ์งœ๋ฆฌ 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์„ ์ด์šฉํ•œ๋‹ค๋ฉด ๋” ์œ ๋ฆฌํ–ˆ๊ฒ ์ง€๋งŒ, ์ด ์—ญ์‹œ ํšŒ์‚ฌ์—์„œ ๋ณด์•ˆ์œผ๋กœ ์ธํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ์— ์œ„์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๋งŒ์•ฝ, ๋น„์Šทํ•œ ์ƒํ™ฉ์ด ์žˆ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

728x90
๋ฐ˜์‘ํ˜•