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

Programming/Linux

[Linux] CI/CD ๊ฐœ์„ : Jenkins๋ฅผ ํ™œ์šฉํ•œ ์ž๋™ํ™” ๋ฐฐํฌ ์‹œ์Šคํ…œ ๊ตฌ์ถ•(nonub)

728x90
๋ฐ˜์‘ํ˜•

โ–  ๋ฐฐ๊ฒฝ

ํšŒ์‚ฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด CI/CD ์‹œ์Šคํ…œ์—์„œ๋Š” Jenkins๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ๋œ ํŒŒ์ผ์ด ์„œ๋ฒ„๋กœ ์˜ฎ๊ฒจ์ง€๋Š” ๊ตฌ์กฐ๊ฐ€ ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐฐํฌ ๊ณผ์ •์€ ์—ฌ์ „ํžˆ ์ˆ˜์ž‘์—…์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์„œ๋ฒ„์— ์›๊ฒฉ ์ ‘์†ํ•˜์—ฌ ๊ฐ ๋„๋ฉ”์ธ์— ๋งž๊ฒŒ ๋ฐฐํฌํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์šด ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ๋ถˆํŽธํ•จ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ƒ์‚ฐ์„ฑ์„ ์ €ํ•˜์‹œํ‚จ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๊ฐœ์„ ์„ ํ•˜๊ธฐ๋กœ ๊ฒฐ์‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

โ–  ๊ฐœ์„  ๋ชฉํ‘œ
์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์ €๋Š” CI/CD ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜์—ฌ ๋ฐฐํฌ ๊ณผ์ •์—์„œ์˜ ์ธ์  ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ณ , ์—…๋ฌด ํšจ์œจ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Jenkins๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋Š” ์••์ถ•๋œ ๋นŒ๋“œํŒŒ์ผ์„ ํƒ€๊ฒŸ์„œ๋ฒ„์ธ linux์˜ nonub ์ด์šฉํ•œ ์ž๋™ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์‹œํ‚ค๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.


โ–  ๊ตฌํ˜„ ๊ณผ์ •

1. ํ”Œ๋ž˜๊ทธ(flag) ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

๋นŒ๋“œ๋œ ์†Œ์Šค ํŒŒ์ผ์ด ์™ธ์— ์†Œ์Šค ํŒŒ์ผ์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜์—ฌ ํ•จ๊ป˜ ์›น์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•œ๋‹ค.

๋‚ด ๊ฒฝ์šฐ์—๋Š” ๋นŒ๋“œ๊ฐ€ ์ด๋ค„์ง€๋Š” work ์—ฌ๋Ÿฌ๊ฐœ ์กด์žฌํ•ด์„œ ์ด๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” {JOB_NAME}์„ ํ”Œ๋ž˜๊ทธ ํŒŒ์ผ์— ์ž‘์„ฑํ•ด์„œ ์ „๋‹ฌํ–ˆ๋‹ค.

 

์˜ˆ์‹œ

$ echo ${JOB_NAME} > deploy_flag.txt

2. ๋ฐฐํฌ ์‰˜ ๋งŒ๋“ค๊ธฐ

๋ฐฐํฌ ์‰˜์˜ ๋‚ด์šฉ์€ ํŠน์ • ์œ„์น˜์— ํ”Œ๋ž˜๊ทธ ํŒŒ์ผ์ด ์žˆ์„ ๊ฒฝ์šฐ, ํ”Œ๋ž˜๊ทธ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ์–ด์„œ job์— ๋งž๋Š” ์œ„์น˜์— ์†Œ์Šค๋ฅผ ๋ฐฐํฌํ•ด์ฃผ๊ณ  ์™„๋ฃŒ๋˜๋ฉด ํ”Œ๋ž˜๊ทธ ํŒŒ์ผ์„ ์‚ญ์ œํ•œ๋‹ค. ํ”Œ๋ž˜๊ทธ ํŒŒ์ผ์€ 2์ดˆ์— ํ•œ๋ฒˆ์”ฉ ํ™•์ธํ•œ๋‹ค.

3. ์™€์ณ(watcher) ๋งŒ๋“ค๊ธฐ

1๋ฒˆ์—์„œ ์ž‘์„ฑํ•œ ํ”Œ๋ž˜๊ทธ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ, 2๋ฒˆ์—์„œ ๋งŒ๋“  ๋ฐฐํฌ ์‰˜์ด ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๊ฒŒ ์™€์ณ(watcher)๋ฅผ ๋ฆฌ๋ˆ…์Šค nohub์„ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค. nohub์€ ์›น์„œ๋ฒ„์— ์ ‘์†ํ•œ ์œ ์ €์˜ ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜์–ด๋„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๊ฒŒํ•ด์ฃผ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ์ด๋‹ค.

 

๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ํ”„๋กœ์„ธ์Šค ์ˆ˜ํ–‰ํ•˜๊ธฐ

$ nohup command [arguments] &

์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. '&'๋ฅผ ์ œ์™ธํ•˜๋ฉด ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๊ฒŒ๋”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐฐํฌ ์‰˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ํ•˜๊ธฐ

$ nohub sh /deploy.sh &

2์—์„œ ์ž‘์„ฑํ•œ ๋ฐฐํฌ ์‰˜์ด root ๊ฒฝ๋กœ(/)์˜ deploy.sh์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์‰˜์ผ ๊ฒฝ์šฐ, ์œ„์™€ ๊ฐ™์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

nohub์„ ์‹คํ–‰ํ•˜๋ฉด ์ถ”๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๋‚˜์˜ค๋Š”๋ฐ ์•„๋ฌดํ‚ค๋‚˜ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ctl + c๋กœ ์ข…๋ฃŒํ•˜๋ฉด ๋œ๋‹ค.

์ข…๋ฃŒํ•˜์—ฌ๋„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ deploy.sh์€ ๊ณ„์† ์‹คํ–‰๋œ๋‹ค.

nohub์„ ์‹คํ–‰ํ•œ ์œ„์น˜์— nohub.out ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋ฉด, ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์€ nohub์œผ๋กœ ์‹คํ–‰ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ๋กœ๊ทธํŒŒ์ผ๋กœ deploy.sh์— echo ๋“ฑ์œผ๋กœ ํŠน์ • ์ƒํ™ฉ์—์„œ ์ถœ๋ ฅ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด, ๋กœ๊ทธ๋ฅผ ์Œ“์•„์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

4. nohub ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒํ•˜๊ธฐ

$ ps -ef | grep deploy

deploy.sh์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ id๋ฅผ ํ™•์ธํ•œ๋‹ค.

$ kill -9 [processId]

# ์˜ˆ์‹œ: kill -9 5876

ํ™•์ธํ•œ ํ”„๋กœ์„ธ์Šค id๋ฅผ ๊ฐ•์ œ์ข…๋ฃŒ(9 ์˜ต์…˜) ์‹œํ‚จ๋‹ค.

 

โ–  ๊ฒฐ๊ณผ
์—…๋ฌด ํšจ์œจ์„ฑ ํ–ฅ์ƒ: ๋ฐฐํฌ ๊ณผ์ •์ด 5๋‹จ๊ณ„์—์„œ 1๋‹จ๊ณ„๋กœ ์ค„์–ด๋“ค๋ฉด์„œ, ๊ฐœ๋ฐœ์ž๋“ค์€ ๋” ์ด์ƒ ์„œ๋ฒ„์— ์ง์ ‘ ์ ‘์†ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŒ€์˜ ์ƒ์‚ฐ์„ฑ์„ ๋Œ€ํญ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.
์ธ์  ์˜ค๋ฅ˜ ๊ฐ์†Œ: ์ž๋™ํ™”๋œ ๋ฐฐํฌ ๊ณผ์ • ๋•๋ถ„์— ์ธ์  ์˜ค๋ฅ˜๊ฐ€ ํฌ๊ฒŒ ์ค„์–ด๋“ค์–ด, ๋ฐฐํฌ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋ณด์•ˆ ๊ฐ•ํ™”: ์›๊ฒฉ ์ ‘์†์„ ์ตœ์†Œํ™”ํ•จ์œผ๋กœ์จ ๋ณด์•ˆ์ ์ธ ์œ„ํ—˜ ์š”์†Œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

 

ํ์‡„๋ง์ด๋‚˜ ๋ณด์•ˆ์ •์ฑ…์ด ๊ฐ•๋ ฅํ•œ ํ™˜๊ฒฝ์—์„œ ๋ถ€์กฑํ•œ CI/CD ํ™˜๊ฒฝ์„ ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋น„์Šทํ•œ ํ™˜๊ฒฝ์—์„œ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒช๋Š”๋‹ค๋ฉด ๋„์›€์ด ๋  ์ˆ˜ ๋„ ์žˆ์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•