๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[DevOps]/CI & CD

์  ํ‚จ์Šค(jenkins)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๊ณ„ํš์„ ์„ธ์›Œ๋ณด์ž

by ํŒกํŽ‘ํ 2023. 11. 15.
728x90
๐Ÿ’ก ์‚ฌ๋‚ด ํ”„๋กœ์ ํŠธ์— ์  ํ‚จ์Šค๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ธฐ์กด์˜ ๊ณ ์ „์ ์ธ ๋นŒ๋“œ & ๋ฐฐํฌ ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ณผ์ •์„ ๊ธฐ๋กํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

 

๐Ÿค” What is Jenkins?

  • ์  ํ‚จ์Šค(Jenkins)๋Š” ์ง€์†์ ์ธ ํ†ตํ•ฉ(Continuous Integration)๊ณผ ์ง€์†์ ์ธ ๋ฐฐํฌ(Continuous Deployment)๋ฅผ ์ง€์›ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์ž๋™ํ™” ๋„๊ตฌ์ด๋‹ค.
  • ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.
  • ์  ํ‚จ์Šค๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํŒ€์€ ํ’ˆ์งˆ ํ–ฅ์ƒ, ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ, ์ง€์†์ ์ธ ํ†ตํ•ฉ ๋ฐ ๋ฐฐํฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“Œ ์  ํ‚จ์Šค์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

์ง€์†์ ์ธ ํ†ตํ•ฉ: ๊ฐœ๋ฐœ์ž๋“ค์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ , ํ…Œ์ŠคํŠธํ•˜์—ฌ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋ฉฐ, ๋ฒ„๊ทธ๋ฅผ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ง€์†์ ์ธ ๋ฐฐํฌ: ๋นŒ๋“œ๋œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•˜์—ฌ ์‹ ์†ํ•˜๊ณ  ์•ˆ์ •์ ์ธ ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•œ๋‹ค.

์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ: ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ ๋„๊ตฌ์™€ ํ†ตํ•ฉํ•˜์—ฌ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ•œ๋‹ค.

ํ™•์žฅ์„ฑ: ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ†ตํ•ฉ์„ ์ง€์›ํ•˜์—ฌ ์  ํ‚จ์Šค๋ฅผ ๋‹ค๋ฅธ ๋„๊ตฌ์™€ ์—ฐ๋™ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ex ) slack๊ณผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋นŒ๋“œ ์„ฑ๊ณต ์‹คํŒจ ์—ฌ๋ถ€ ์•Œ๋žŒ ๋ณด๋‚ด๊ธฐ ๋“ฑ

๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์•Œ๋ฆผ: ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ์ด์ƒ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์•Œ๋ฆผ์„ ์ œ๊ณตํ•œ๋‹ค.

 

๐Ÿ“œ ์ •๋ฆฌ

์  ํ‚จ์Šค๋Š” ๋งŽ์€ ๊ธฐ์—…๊ณผ ํ”„๋กœ์ ํŠธ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒํ•˜๊ณ  ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜์—ฌ ์•ˆ์ •์ ์ด๊ณ  ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

 

๐Ÿ“Ž ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ํŒŒ์ผ ๋ฐฐํฌ ์ง„ํ–‰ ๋ฐฉ์‹

  • ๋กœ์ปฌ์—์„œ ์„œ๋ฒ„ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ ์ถ”๊ฐ€์‚ฌํ•ญ์„ ์ ์šฉํ•œ๋‹ค.
  • ๋กœ์ปฌ์—์„œ ๊ฐ์ž์˜ ๋ฐฉ์‹์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
  • ๋กœ์ปฌ PC์—์„œ ๋นŒ๋“œํ•œ jar ํŒŒ์ผ์„ SFTP ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ์›๊ฒฉ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.
  • ๋กœ์ปฌ PC์—์„œ ์›๊ฒฉ ์„œ๋ฒ„๋กœ SSH ์ ‘์†์„ ํ•œ๋‹ค.
  • ์›๊ฒฉ ์„œ๋ฒ„์—์„œ ์‰˜ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ(ex. start.sh) ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • ๊นƒํ—ˆ๋ธŒ๋กœ์˜ PUSH๋Š” ๋ณ„๋„๋กœ ์ง„ํ–‰ํ•œ๋‹ค.

 

๐Ÿšจ ๋ฌธ์ œ์ 

  1. ํ˜„์žฌ ๋ฐฐํฌ์ค‘์ธ ํŒŒ์ผ์˜ ๋ฒ„์ „๊ณผ ๊นƒํ—ˆ๋ธŒ์— ์—…๋กœ๋“œ๋œ ๋ฒ„์ „์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ๋ฒ„์ „๊ด€๋ฆฌ๊ฐ€ ์ „ํ˜€ ๋˜๊ณ  ์žˆ์ง€ ์•Š์Œ
  2. ํ•œ ๋ฒˆ ๋ฐฐํฌํ•  ๋•Œ๋งˆ๋‹ค ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์ด ๋งŽ์Œ(์‹œ๊ฐ„์„ ๋งŽ์ด ๋นผ์•—๊น€)

 

๐Ÿง‘๐Ÿป‍๐Ÿ”ฌ ๊ณ„ํš์ค‘์ธ Jenkins blue & Green ๋นŒ๋“œ ํŒŒ์ผ ๋ฐฐํฌ ๋ฐฉ์‹

  • ๋กœ์ปฌ์—์„œ ์„œ๋ฒ„ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ ์ถ”๊ฐ€์‚ฌํ•ญ์„ ์ ์šฉํ•œ๋‹ค.
  • ๋กœ์ปฌ์—์„œ ๊นƒํ—ˆ๋ธŒ๋กœ PUSHํ•œ๋‹ค.
  • ๊นƒํ—ˆ๋ธŒ์—์„œ ์ถฉ๋Œ ์‚ฌํ•ญ ๋ฐ ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž์˜ ์ฒดํฌ ํ›„ MERGE ํ•œ๋‹ค.
  • ๊นƒํ—ˆ๋ธŒ์˜ MERGE ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•œ ์  ํ‚จ์Šค๊ฐ€ ์ตœ์‹  ๋ฒ„์ „์˜ jar ํŒŒ์ผ์„ ๋นŒ๋“œํ•œ๋‹ค.
  • ๋ธ”๋ฃจ๊ฐ€ ์‚ด์•„์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

์ƒํ™ฉ 1) ๋ธ”๋ฃจ ์‹คํ–‰ ์ค‘ → ๊ทธ๋ฆฐ์— ๋ฐฐํฌ ํ›„ ์‹คํ–‰ → ๋ธ”๋ฃจ ์ค‘๋‹จ

 

if) ๋ธ”๋ฃจ๊ฐ€ ์‚ด์•„์žˆ๋Š” ๊ฒฝ์šฐ

  • ๊ทธ๋ฆฐ์— ๋นŒ๋“œํ•œ ์ตœ์‹ ๋ฒ„์ „์˜ jar ํŒŒ์ผ์„ ์ „์†กํ•˜๊ณ  ์‹คํ–‰์‹œํ‚จ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ •ํ•œ ๋ช‡ ์ดˆ์˜ ์ฃผ๊ธฐ๋งˆ๋‹ค ๊ทธ๋ฆฐ ์„œ๋ฒ„๊ฐ€ ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ๊ทธ๋ฆฐ ์„œ๋ฒ„๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋ฉด NGINX์—๊ฒŒ ํ”„๋ก์‹œ ๋ฐฉํ–ฅ์„ ๊ทธ๋ฆฐ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋„๋ก ๋ช…๋ นํ•œ๋‹ค.
  • ๋ธ”๋ฃจ ์„œ๋ฒ„์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.

 

์ƒํ™ฉ 2) ๊ทธ๋ฆฐ ์‹คํ–‰ ์ค‘ → ๋ธ”๋ฃจ์— ๋ฐฐํฌ ํ›„ ์‹คํ–‰ → ๊ทธ๋ฆฐ ์ค‘๋‹จ

if) ๋ธ”๋ฃจ๊ฐ€ ์ฃฝ์–ด์žˆ๋Š” ๊ฒฝ์šฐ

  • ๋ธ”๋ฃจ์— ๋นŒ๋“œํ•œ ์ตœ์‹ ๋ฒ„์ „์˜ jar ํŒŒ์ผ์„ ์ „์†กํ•˜๊ณ  ์‹คํ–‰์‹œํ‚จ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ •ํ•œ ๋ช‡ ์ดˆ์˜ ์ฃผ๊ธฐ๋งˆ๋‹ค ๋ธ”๋ฃจ ์„œ๋ฒ„๊ฐ€ ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ๋ธ”๋ฃจ ์„œ๋ฒ„๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋ฉด NGINX์—๊ฒŒ ํ”„๋ก์‹œ ๋ฐฉํ–ฅ์„ ๋ธ”๋ฃจ๋กœ ๋ณ€๊ฒฝํ•˜๋„๋ก ๋ช…๋ นํ•œ๋‹ค.
  • ๊ทธ๋ฆฐ ์„œ๋ฒ„์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.

 

๐Ÿ™๐Ÿป ๊ธฐ๋Œ€ ํšจ๊ณผ

  1. ๊นƒํ—ˆ๋ธŒ์— ํ‘ธ์‹œํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋ชจ๋“  ๋ฐฐํฌ ๊ณผ์ •์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ๊นƒํ—ˆ๋ธŒ์™€ ์ƒ์šฉ ์„œ๋ฒ„์˜ ๋ฐฐํฌ ๋ฒ„์ „์ด ํ†ต์ผ๋œ๋‹ค.
  3. ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

 

 

์ฐธ๊ณ 

๋คผํŠผ

https://iizz.tistory.com/341

https://hyunminh.github.io/nonstop-deploy/

https://hudi.blog/zero-downtime-deployment-with-jenkins-and-nginx/

 

728x90