๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ“š ์‹œ๋ฆฌ์ฆˆ/- Jenkins์™€ Webhook์„ ์ด์šฉํ•œ CICD

[Webhook์„ ์ด์šฉํ•˜์—ฌ CI CD ๊ตฌ์„ฑํ•˜๊ธฐ] - ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ

by Wonit 2021. 8. 30.

ํ•ด๋‹น ๊ธ€์€ Jenkins์™€ Github Webhook์„ ์ด์šฉํ•œ CICD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑํ•˜๊ธฐ ์‹œ๋ฆฌ์ฆˆ ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์‚ฌํ•ญ์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

๋งŒ์•ฝ ํ•ด๋‹น ์‹ค์Šต ๋‚ด์šฉ์˜ ์ฝ”๋“œ๊ฐ€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ํ”„๋กœ์ ํŠธ ๊นƒํ—ˆ๋ธŒ ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

GitHub - my-research/todo-with-cicd: Jenkins๋ฅผ ์ด์šฉํ•˜์—ฌ CICD Pipeline ์ด ๊ตฌ์„ฑ๋œ TodoList

Jenkins๋ฅผ ์ด์šฉํ•˜์—ฌ CICD Pipeline ์ด ๊ตฌ์„ฑ๋œ TodoList. Contribute to my-research/todo-with-cicd development by creating an account on GitHub.

github.com

 

 

 

Jenkins์™€ Github Webhook์„ ์ด์šฉํ•œ CICD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑํ•˜๊ธฐ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ...

 

๋‚ด๊ฐ€ ์ฒ˜์Œ์œผ๋กœ cicd์— ๊ด€์‹ฌ์„ ๊ฐ€์กŒ๋˜ ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋–ค ํ•œ ์Œ์•… ์—ฐ์Šต์‹ค์˜ ํ™ˆํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉด์„œ๋ถ€ํ„ฐ์˜€๋‹ค.

 

๊ทธ ๋•Œ ๋‹น์‹œ์—๋Š” Travis CI์™€ AWS์˜ CodeDeploy๋ฅผ ์ด์šฉํ–ˆ์—ˆ๋Š”๋ฐ, ๊ทธ ๊ณผ์ •์ด ๋„ˆ๋ฌด๋‚˜๋„ ์žฌ๋ฏธ์žˆ์—ˆ๊ณ  ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด ๊ฟˆ์ธ ๋‚˜์—๊ฒŒ ๋ฐ๋ธŒ์˜ต์Šค ์—”์ง€๋‹ˆ์–ด๋Š” ์–ด๋–จ๊นŒ? ํ•˜๋Š” ์ƒ๊ฐ์œผ๋กœ ํ™•์žฅ์‹œ์ผœ์ฃผ์—ˆ๋˜ ๊ฒฝํ—˜์ด์—ˆ๋‹ค.

 

์‚ฌ์‹ค ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ๊ธฐ์— ์กฐ๊ธˆ ํž˜๋“  ๋ถ€๋ถ„์ด ์—†์ง€ ์•Š์•„ ์กด์žฌํ•œ๋‹ค.

 

์šฐ์„  Official Docs ์ž์ฒด๊ฐ€ ์˜์–ด๋กœ ๋˜์–ด์žˆ๊ธฐ๋„ ํ•˜๊ณ , ์‹ ์ž…์˜ ์ž…์žฅ์—์„œ ๋‹น์žฅ ์ทจ์—…์—์„œ ์›ํ•˜๋Š” ๊ฒƒ์€ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋ณด๋‹ค๋Š” ๊นŠ์ด ์žˆ๋Š” ์ดํ•ด๋ฅผ ์ฃผ๋กœ ๋ณด๊ธฐ ๋•Œ๋ฌธ์— CICD ์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์–ด๋ดค๋˜ ๋Œ€ํ•™์ƒ ๊ฐœ๋ฐœ์ž๋“ค์€ ์žˆ์–ด๋„ ์‹ค์ œ ๊ตฌ์„ฑํ•ด๋ณธ ํ•™์ƒ๋“ค์€ ๋“œ๋ฌผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค.

 

๋‚˜๋Š” CICD๋ฅผ ๊ตฌ์„ฑํ•ด๋ณด๊ณ  ๊ฒฝํ—˜ํ•˜๋Š” ๊ฒƒ ์ž์ฒด๋ฅผ ํ•˜๋‚˜์˜ ์ŠคํŽ™ ๊ทธ ์ด์ƒ์œผ๋กœ ์ƒ๊ฐํ•œ๋‹ค.

 

์ด ๊ณผ์ •์—์„œ ์›น ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฉํ–ฅ์„ฑ๊ณผ ๊ตฌ์กฐ์˜ ํ๋ฆ„์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•˜๋Š” ๊ทธ ์ž์ฒด์˜ ์žฌ๋ฏธ๊ฐ€ ๋˜ ์กด์žฌํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ ์•ž์„œ ์ด์•ผ๊ธฐํ–ˆ๋˜ ์˜์–ด์˜ ๋ฌธ์ œ๋„ ๊ทธ๋ ‡๊ณ  ์—ฌ๋Ÿฌ ์ด์œ  ๋•Œ๋ฌธ์— ํ•ด๋ณด๊ณ ๋Š” ์‹ถ์œผ๋‚˜ ํ•  ์‹œ๊ฐ„์ด ์—†๊ณ  ์–ด๋–ค ์•ฑ์„ ๊ฐ€์ง€๊ณ  CICD๋ฅผ ํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด์„œ ์ด ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค

 

์‚ฌ์‹ค์ƒ ์—…๊ณ„์˜ ํ‘œ์ค€์ด Jenkins๋ผ๊ณ  ์–ด๋””์„ ๊ฐ€ ๋“ค์—ˆ๋˜ ์ ์ด ์žˆ๋‹ค.

 

๋‚˜๋Š” Travis CI์™€ CodeDeploy ๋งŒ ํ•ด๋ณด์•˜์—ˆ๊ณ  Jenkins ์— ๋Œ€ํ•ด์„œ๋Š” '๋‹ค์Œ์— ํ•ด๋ด์•ผ ํ•˜๋Š” ๊ฒƒ' ์ฏค์ด์—ˆ๋Š”๋ฐ, ํ˜„์žฌ ํ™œ๋™์ค‘์ธ BOB ์—์„œ CICD ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•œ ์ˆ˜์—…์ด ์žˆ์—ˆ๊ณ , ํ•ด๋‹น ์ˆ˜์—…์—์„œ ๋“ฃ๊ณ  ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ง์ ‘ ๋‚ด๊ฐ€ ์•ฑ์„ ๋งŒ๋“ค๊ณ  ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•ด๋ณด๋Š” ๊ฒƒ์œผ๋กœ ์ด๋ฒˆ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์ฑ„์› ์—ˆ๋‹ค.

 

์ด ๊ธ€์„ ๋ณด๊ณ  ๋ถ€๋”” ๋ณธ์ธ์˜ ๊ฐœ๋ฐœ ๊ฒฝํ—˜๊ณผ ์—ญ๋Ÿ‰์—์„œ ๋งŽ์€ ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ผ๋ฉฐ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

ํ•ด๋‹น ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ์—ญ๋Ÿ‰

 

์ด๋ฒˆ ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ์›น ๊ฐœ๋ฐœ ๋„๊ตฌ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ & ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด ๋งŽ์ด ๋‚˜์˜จ๋‹ค.

 

zero base ์ƒํ…Œ์—์„œ ์ด ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๋ณธ๋‹ค๋ฉด ๋งค์šฐ ํž˜๋“ค ์ˆ˜๋„ ์žˆ๊ณ  ์–ด์ฉŒ๋ฉด ๋”ฐ๋ผ์˜ฌ ์ˆ˜ ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ผ๋‹จ ๋๊นŒ์ง€ ์™„์ฃผํ•œ๋‹ค๋ฉด CICD์— ๋Œ€ํ•œ ์ฒซ ๊ฑธ์Œ์€ ๋‚ด๋”›๋Š” ๊ฒƒ์ด๋‹ˆ ๋งค์šฐ ์ข‹์€ ๊ฒฝํ—˜์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์•ฝ์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ๋ชจ๋‘ ์ง์ ‘ ๊ตฌ์„ฑํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด ์‹œ๋ฆฌ์ฆˆ๊ฐ€ ์›น ๊ฐœ๋ฐœ ์‹œ๋ฆฌ์ฆˆ๊ฐ€ ์•„๋‹ˆ๋ผ CICD ๊ตฌ์„ฑ์ด ๋ชฉ์ ์ด๋ผ์„œ ์›น์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ํž˜์„ ์กฐ๊ธˆ ๋œ ์‹ค์„ ์˜ˆ์ •์ด๋‹ค.

 

๋ฌผ๋ก  ๋Œ“๊ธ€๋กœ ๋ฌผ์–ด๋ณธ๋‹ค๋ฉด ์นœ์ ˆํžˆ ๋‹ต๋ณ€ํ•ด๋“œ๋ ค์šฉ ใ…Žใ…Ž

 

๊ธฐ์ˆ  ์Šคํƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

๊ธฐ์ˆ  ์Šคํƒ

 

  • react
    • create-react-app
    • styled-components
    • axios
    • jest
  • Spring Boot
    • Spring Data JPA
    • JUnit5
  • Nginx
    • ๋ฆฌ๋ฒ„์‹œ ํ”„๋ก์‹œ ์šฉ๋„
    • nginx.conf
  • Docker
    • docker ๊ธฐ๋ณธ ๋ช…๋ น์–ด
  • EC2
    • ssh ์ ‘์†
    • ๋ณด์•ˆ ๊ทธ๋ฃน

 

์ค€๋น„๋ฌผ

 

์ค€๋น„๋ฌผ์€ ์šฐ์„  AWS ๊ณ„์ •์ด ํ•„์š”ํ•˜๋‹ค.

 

์šฐ๋ฆฌ๋Š” Free Tier๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  T2-medium ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ ์•ฝ๊ฐ„์˜ ๋ˆ๋„ ํ•„์š”ํ•˜์ง€๋งŒ ์ด๋Š” ํฌ๊ฒŒ ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์ง€ ์•Š๋Š” ์„ ์ผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ณ , Github Id๋„ ๋ฌผ๋ก  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

์•„๋งˆ ์ด ๊ธ€์„ ์ฝ๋Š” ๋Œ€๋ถ€๋ถ„์€ ์žˆ๊ฒ ์ง€๋งŒ ๋ฌผ๋ก  ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ, vscode๋‚˜ intellij ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

๋˜ ssh ์ ‘์†์„ ์œ„ํ•œ SSH Client๋„ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

windows ๋ผ๋ฉด putty๋ฅผ ์ถ”์ฒœํ•˜์ง€๋งŒ ์—†์–ด๋„ ์›น ์ฝ˜์†”์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ญ ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋‹ค.

 

์‹ค์Šต ๋ฐ ์‹œ๋ฆฌ์ฆˆ ํ๋ฆ„

 

์šฐ๋ฆฌ๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ TODO List๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค.

 

 

์ด Todo List๋ฅผ ์ง์ ‘ ํ”„๋ก ํŠธ UI๋„ ๊ฐœ๋ฐœํ•˜๊ณ  ์Šคํƒ€์ผ๋ง๋„ ํ•ด๋ณด๋ฉฐ ํ†ต์‹  ๋ชจ๋“ˆ์„ ๋งŒ๋“ค ๊ฒƒ์ด๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ ํ˜น์€ ๊ฐฑ์‹ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” Backend API๋„ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋งŒ์•ฝ '๋‚˜๋Š” ๋ฆฌ์•กํŠธ๋ฅผ ๋ชฐ๋ผ..' ํ˜น์€ '๋‚˜๋Š” ์Šคํ”„๋ง์„ ๋ชฐ๋ผ' ํ˜น์€ '๋‚˜๋Š” ๋‘˜ ๋‹ค ๋ชฐ๋ผ' ํ•œ๋‹ค๋ฉด ๋ฐ”๋กœ ์ฑ•ํ„ฐ 4๋กœ ๋„˜์–ด๊ฐ€์„œ ๋‚ด github์— ์žˆ๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ pull ํ•ด์„œ ์‹œ์ž‘ํ•˜๋ฉด ๋œ๋‹ค.

 

์ค‘์š”ํ•œ ๊ฒƒ์€ CICD๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ ์ž์ฒด์ด์ง€ ํฌ์ปค์Šค๊ฐ€ ์›น์œผ๋กœ ๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค.

 

๋˜ํ•œ ๋ฐฐํฌ๋Š” ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์‚ฌ์‹ค ํ•ด๋‹น ์‹ค์Šต์„ Blue-Green ๋ฐฐํฌ๋กœ ๋ฐฉํ–ฅ์„ฑ์„ ์žก์œผ๋ ค ํ–ˆ์œผ๋‚˜, ๊ฐœ์ธ์ ์ธ ์ผ์ • ๋ฌธ์ œ๋กœ ๋‹จ์ˆœํ•œ CICD๋งŒ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•˜์˜€๋‹ค.

 

๋งŒ์•ฝ ์ถ”ํ›„์— ๋ฐ˜์‘์ด ์ข‹๋‹ค๋ฉด Blue-Green๊ณผ Rolling Update ๊นŒ์ง€ ์ถ”๊ฐ€ํ•˜๋ ค ํ•œ๋‹ค.

 

๋์œผ๋กœ..

 

์ €๋Š” ์•„์ง ๋Œ€ํ•™์ƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์—…๋ฌด์—์„œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœ์ด ๋˜๋Š”์ง€ ์ „ํ˜€ ๊ฒฝํ—˜ํ•ด๋ณด์ง€ ๋ชปํ–ˆ์–ด์š” ใ…Žใ…Ž..

 

๊ทธ๋ž˜์„œ ์ œ๊ฐ€ ํ•˜๋Š” ์‹ค์Šต์ด ์ „๋ฐ˜์ ์œผ๋กœ ๋น„ํšจ์œจ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋„๊ฑฐ๋‚˜ ์ข‹์ง€ ๋ชปํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ง„ํ–‰๋  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋‚˜๋ฆ„ ์ถ”๋ฆฌ๊ณ  ์ถ”๋ ค์„œ ๊ตฌ์„ฑํ•œ ์ปจํ…์ธ ์ด๋‹ˆ ๋”ฐ๋ผ ํ•˜๋‹ค ๋น„ํšจ์œจ์ ์ธ ๊ตฌ์กฐ๋‚˜ ์ž˜๋ชป๋œ๊ฒŒ ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ๋ฐ”๋กœ ์ง€์ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค..!

 

์ด๋ฅผ ๋„ˆ๊ทธ๋Ÿฝ๊ฒŒ ์ดํ•ดํ•ด์ค€๋‹ค๋ฉด ๊ฐ์‚ฌํ•  ๊ฒƒ ๊ฐ™์•„์š” โ˜บ๏ธ

 

์—ด์‹ฌํžˆ ์ค€๋น„ํ•œ ์‹œ๋ฆฌ์ฆˆ์ด๋‹ˆ ๋ถ€๋”” ๋งŽ์€ ๋„์›€์ด ๋˜์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค!

 

๋Œ“๊ธ€