ETC.

[Jenkins] Jenkins์™€ CI/CD์˜ ๊ฐœ๋…

carsumin 2024. 8. 6. 23:30

Jenkins๋ž€?

 

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

 

Jenkins์˜ ์ฃผ์š” ํŠน์ง•

 

1. ์˜คํ”ˆ ์†Œ์Šค์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›

  • ์˜คํ”ˆ ์†Œ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ์ˆ˜๋งŽ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์กด์žฌํ•˜๋ฉฐ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

2. ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ

  • ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ๊ฑฐ์˜ ๋ชจ๋“  ๊ฐœ๋ฐœ ํˆด๊ณผ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ์Œ
  • ์†Œ์Šค ์ฝ”๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ (Git, SVN)
  • ๋นŒ๋“œ ๋„๊ตฌ (Maven, Gradle)
  • ์ปจํ…Œ์ด๋„ˆ ํ”Œ๋žซํผ (Docker)
  • ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ (JUnit, TestNG)
  • ๋ฐฐํฌ ๋„๊ตฌ (Ansible, Kubernetes)

3. ํŒŒ์ดํ”„๋ผ์ธ

  • Jenkins ํŒŒ์ดํ”„๋ผ์ธ์€ CI/CD ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฝ”๋“œ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ
  • Jenkinsfile์ด๋ผ๋Š” ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ํ†ตํ•ด ๋ณต์žกํ•œ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๊ณผ์ •์„ ํ•˜๋‚˜์˜ ์—ฐ์†์ ์ธ ํ๋ฆ„์œผ๋กœ ์„ค์ •

4. ๋ถ„์‚ฐ ๋นŒ๋“œ ์‹œ์Šคํ…œ

  • Jenkins๋Š” Master-Slave ์•„ํ‚คํ…์ณ๋ฅผ ํ†ตํ•ด ๋ถ„์‚ฐ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์ง€์›ํ•จ
  • Master๋Š” ๋นŒ๋“œ๋ฅผ ์กฐ์ •ํ•˜๊ณ  Slave ๋…ธ๋“œ๋Š” ์‹ค์ œ ๋นŒ๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰
  • ์—ฌ๋Ÿฌ ๋…ธ๋“œ์—์„œ ๋ณ‘๋ ฌ๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ, ๋นŒ๋“œ ์†๋„ ํ–ฅ์ƒ

5. ๊ฐ•๋ ฅํ•œ ์•Œ๋ฆผ ๋ฐ ํ”ผ๋“œ๋ฐฑ ์‹œ์Šคํ…œ

  • Jenkins๋Š” ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฉ”์ผ์ด๋‚˜ Jira๋“ฑ์„ ํ†ตํ•ด ์•Œ๋ฆผ์œผ๋กœ ์ „๋‹ฌํ•จ
  • ๋นŒ๋“œ ์‹คํŒจ๋‚˜ ํ…Œ์Šค๋ฅผ ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ์— ์ž๋™์œผ๋กœ ๋กค๋ฐฑํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค์ • ๊ฐ€๋Šฅ

6. ์œ ์—ฐํ•œ ์„ค์ •

  • Jenkins๋Š” ๋‹ค์–‘ํ•œ ์„ค์ • ์˜ต์…˜์„ ์ œ๊ณต
  • UI๋ฅผ ํ†ตํ•ด ์ง๊ด€์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฝ”๋“œ๋กœ ์„ธ๋ถ€ ์„ค์ • ๊ด€๋ฆฌ๋„ ๊ฐ€๋Šฅ

 

Jenkins์˜ ์•„ํ‚คํ…์ณ

 

1. Jenkins Master

  • ์ „์ฒด Jenkins ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„
  • ๋นŒ๋“œ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ด๋ฅผ ์กฐ์ •ํ•˜๋Š” ์—ญํ• 
  • UI ์ œ๊ณต, ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ, ๋นŒ๋“œ ์Šค์ผ€์ค„๋ง, ๋ถ„์‚ฐ๋œ Slave ๋…ธ๋“œ๋กœ ์ž‘์—… ํ• ๋‹น ๋‹ด๋‹น

2. Jenkins Slave

  • Master์— ์˜ํ•ด ํ• ๋‹น๋œ ๋นŒ๋“œ ์ž‘์—…์„ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋…ธ๋“œ
  • ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์šด์˜๋จ

3. Jenkinsfile

  • Jenkins ํŒŒ์ดํ”„๋ผ์ธ์„ ์ฝ”๋“œ๋กœ ์ •์˜ํ•˜๋Š” ํŒŒ์ผ
  • ์ด ํŒŒ์ผ์„ ํ†ตํ•ด ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ์˜ ๊ฐ ๋‹จ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•จ
  • Declarative, Scripted ๋‘ ๊ฐ€์ง€ ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑ

 

Jenkins์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

 

1. CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์ž๋™ํ™”

  • Jenkins๋Š” ์ฝ”๋“œ ์ปค๋ฐ‹๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€์˜ ๋ชจ๋“  ๊ณผ์ •์„ ์ž๋™ํ™”
  • ๊ฐœ๋ฐœ์ฃผ๊ธฐ๋ฅผ ๋‹จ์ถ•์‹œํ‚ค๊ณ  ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ์ž‘์—… ์ค„์—ฌ์คŒ

2. ์œ ์—ฐํ•œ build trigger

  • ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋นŒ๋“œ๋ฅผ ํŠธ๋ฆฌ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Œ

3. ๊ฐ•๋ ฅํ•œ ๋กœ๊ทธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

  • ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๊ณผ์ •์˜ ๋กœ๊ทธ๋ฅผ ์ƒ์„ธํžˆ ๊ธฐ๋กํ•จ
  • ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•… ๊ฐ€๋Šฅ

4. ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ์ง€์›

  • ๋กœ์ปฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ(AWS, Azure ๋“ฑ) ์—์„œ๋„ Jenkins ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๋„๊ตฌ์™€ ์—ฐ๋™ ๊ฐ€๋Šฅ

 

Jenkins ์‚ฌ์šฉ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ

 

1. ์„ฑ๋Šฅ

  • ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ฑฐ๋‚˜ ๋นŒ๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด Jenkins ์„ฑ๋Šฅ์ด ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋นŒ๋“œ๋ฅผ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹ ๋“ฑ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Œ

2. ๋ณด์•ˆ

  • Jenkins๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์†Œ์Šค ์ฝ”๋“œ์™€ ๋ฐฐํฌ ํ™˜๊ฒฝ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์— ์ฃผ์˜ํ•ด์•ผํ•จ
  • ์‚ฌ์šฉ์ž ๊ถŒํ•œ ๊ด€๋ฆฌ, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ณด์•ˆ, SSL ์„ค์ • ๋“ฑ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผํ•จ

3. ์œ ์ง€๋ณด์ˆ˜

  • ํ”Œ๋Ÿฌ๊ทธ์ธ ์—…๋ฐ์ดํŠธ๋‚˜ Jenkins ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ฃผ์˜ํ•ด์•ผ ํ•จ

 


 

 

CI/CD ๊ฐœ๋…

 

1. Continuous Integration ์ง€์†์  ํ†ตํ•ฉ

  • CI๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฝ”๋“œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ž์ฃผ (์ตœ์†Œ ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ ์ด์ƒ) ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ
  • ๋ชจ๋“  ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์— ํ†ตํ•ฉ๋จ
  • Jenkins์™€ ๊ฐ™์€ CI ๋„๊ตฌ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ

2. Continuous Deilvery ์ง€์†์  ๋ฐฐํฌ

  • CD์—์„œ ์ง€์†์  ๋ฐฐํฌ๋Š” ์ƒˆ๋กœ์šด ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ†ตํ•ฉ๋œ ํ›„ ์–ธ์ œ๋“ ์ง€ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ
  • ๋ฐฐํฌ๋Š” ์ž๋™ํ™”๋˜์ง€ ์•Š์•˜์ง€๋งŒ ์–ธ์ œ๋“  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
  • ์ตœ์ข… ๋ฆด๋ฆฌ์ฆˆ๋Š” ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰

3. Continuous Deployment ์ง€์†์  ๋ฐฐํฌ

  • CI/CD ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„
  • ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ๊ฒƒ
  • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น ๋ฅด๊ฒŒ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ œ๊ณตํ•˜๋ฉฐ ๋ฐฐํฌ ์†๋„๋ฅผ ๋†’์ด๊ณ  ์‹ ๋ขฐ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ

 

Jenkins์™€ CI/CD์˜ ๊ด€๊ณ„

 

  • Jenkins๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ