CI/CD & Github Action

Jihoonยท2023๋…„ 1์›” 11์ผ
0

CI/CD

๋ชฉ๋ก ๋ณด๊ธฐ
1/3
post-thumbnail

๐ŸŒŸ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค - ๊ฐœ๋ฐœํ™˜๊ฒฝ

โœ… Local

  • ๊ฐ์ž ์ปดํ“จํ„ฐ์—์„œ ๊ฐœ๋ฐœ์„ ํ•จ
  • ๊ฐ์ž์˜ ํ™˜๊ฒฝ์„ ํ†ต์ผํ•ด์ค˜์•ผ ํ•˜๋‹ˆ๊นŒ Docker ๋“ฑ์„ ์‚ฌ์šฉํ•จ !

โœ… Dev - [dev] Branch

  • Local์—์„œ ๊ฐœ๋ฐœํ•œ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธํ•˜๋Š” ํ™˜๊ฒฝ
  • Test ์„œ๋ฒ„

โœ… Staging - [staging] Branch

  • Production ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๊ธฐ ์ „์— ์šด์˜, ๋ณด์•ˆ, ์„ฑ๋Šฅ ์ธก์ •ํ•˜๋Š” ํ™˜๊ฒฝ
  • Staging ์„œ๋ฒ„

โœ… Production - [main] Branch

  • ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋Š” ํ™˜๊ฒฝ
  • ์šด์˜ ์„œ๋ฒ„

๐ŸŒŸ Why? ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ๋‚˜๋ˆ„๋‚˜?

์‹ค์ œ ์šด์˜ ์ค‘์ธ ์„œ๋น„์Šค์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— !

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ํ…Œ์ŠคํŠธํ•˜๋Š” ํ™˜๊ฒฝ๊ณผ ์„œ๋น„์Šค๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ํ™˜๊ฒฝ์ด ๋™์ผํ•˜๋‹ค๋ฉด, ํ…Œ์ŠคํŠธ ๊ณผ์ •์—์„œ ์—๋Ÿฌ๋Š” ์„œ๋น„์Šค์˜ ์—๋Ÿฌ๋กœ ์ง๊ฒฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ๋‚˜๋ˆ ์ค˜์•ผ ํ•จ !!

๐ŸŒŸ How? Git Flow ์ฐธ๊ณ 

[ main ] โ† [ staging ] โ† [ dev ] โ† [ feature/๊ธฐ๋Šฅ ์ด๋ฆ„ ]

  • Dev Branch์— Merge๋˜๋ฉด => Local์—์„œ Git Pull & Test ์‹คํ–‰ ํ›„ ๊ดœ์ฐฎ์œผ๋ฉด ์ฝ”๋“œ ๋ฐฐํฌ(FTP๋กœ ํŒŒ์ผ ์ „์†ก) ํ˜•ํƒœ๋กœ ์ง„ํ–‰

โœจ Continuous Integration(CI)

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

โœจ Continuous Deploy/Delivery(CD)

  • ์ง€์†์  ๋ฐฐํฌ ! (๋ฐฐํฌ ์ž๋™ํ™”)
  • ์ž‘์„ฑ ์ฝ”๋“œ๊ฐ€ ํ•ญ์ƒ ์‹ ๋ขฐ ๊ฐ€๋Šฅ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ณผ์ •์ž„ !! ๋‹น์—ฐํžˆ CI โ†’ CD ์ˆœ์„œ
  • main / staging / dev ๋ธŒ๋žœ์น˜์— Merge๊ฐ€ ๋  ๊ฒฝ์šฐ ์ฝ”๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์„œ๋ฒ„์— ๋ฐฐํฌํ•จ

๐ŸŽ‡ Github Action

  • Github์—์„œ ์ถœ์‹œํ•œ ๊ธฐ๋Šฅ์œผ๋กœ, ์†Œํ”„ํŠธ์›จ์–ด Workflow ์ž๋™ํ™” ๋•๋Š” ๋„๊ตฌ

๐Ÿ‘ฉโ€๐Ÿ’ป Workflow

1. Test Code

  • ํŠน์ • ํ•จ์ˆ˜์˜ Return ๊ฐ’ ์–ด๋–ป๊ฒŒ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธ ๋ฐ ํŠน์ • ๋ณ€์ˆ˜์˜ Type ํ™•์ธ
  • Unit Test, End to End Test

2. ๋ฐฐํฌ

  • Prod, Staging, Dev ์„œ๋ฒ„์— ์ฝ”๋“œ ๋ฐฐํฌ / FTP๋กœ ํŒŒ์ผ ์ „์†ก or Docker Image๋ฅผ Push
  • Node.js ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด ๋ฐฐํฌ ์ง€์›

3. ํŒŒ์ด์ฌ, ์‰˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

  • Github Repo์— ์ €์žฅ๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ผ์ • ์ฃผ๊ธฐ์— ๋”ฐ๋ผ ์‹คํ–‰์‹œ์ผœ ์คŒ
  • crontab ๋Œ€์šฉ์ด๋ฉฐ, ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•ด์•ผํ•  ๊ฒฝ์šฐ ํ™œ์šฉ ๊ฐ€๋Šฅ

4. Github Tag, Release ์ž๋™์œผ๋กœ ์„ค์ •

  • Main ๋ธŒ๋žœ์น˜์— Merge ๋  ๊ฒฝ์šฐ ํŠน์ • ์ž‘์—… ์‹คํ–‰์‹œ์ผœ์ฃผ๋ฉฐ, ๊ธฐ์กด ๋ฒ„์ „์—์„œ ๋ฒ„์ „ Upํ•˜๊ธฐ
  • ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ์‹œ ํŠน์ • ์ž‘์—… ์‹คํ–‰๋„ ๊ฐ€๋Šฅํ•จ !

๐Ÿค Github Action ์ œ์•ฝ ์กฐ๊ฑด

  • ํ•˜๋‚˜์˜ Github Repository ๋‹น Workflow๋Š” ์ตœ๋Œ€ 20๊ฐœ๊นŒ์ง€ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Œ
  • Workflow์— ์กด์žฌํ•˜๋Š” Job(์‹คํ–‰)์€ ์ตœ๋Œ€ 6์‹œ๊ฐ„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ดˆ๊ณผ์‹œ ์ž๋™์œผ๋กœ ์ค‘์ง€๋จ
  • ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” Job ์ œํ•œ ์กด์žฌ

๐Ÿค Github Action ์‚ฌ์šฉ ๋ฐฉ์‹

1) ์ฝ”๋“œ ์ž‘์—…
2) ์ฝ”๋“œ ์ž‘์—… ํ›„, Github Action์œผ๋กœ ๋ฌด์—‡์„ ํ•  ๊ฒƒ์ธ์ง€ ์ƒ๊ฐ
3) ์‚ฌ์šฉํ•  Workflow ์ •์˜
4) Workflow ์ •์˜ ํ›„ ์ •์ƒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ

๐Ÿ‘ฉโ€๐Ÿ’ป Github Action Core ํ•ต์‹ฌ !!

ํ•ต์‹ฌ ๊ฐœ๋… : Workflow, Event, Job, Step, Action, Runner

1. Workflow

  • ์—ฌ๋Ÿฌ Job์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ณ  Event๋กœ Trigger(์‹คํ–‰)๋˜๋Š” ์ž๋™ํ™”๋œ Process
  • ์ตœ์ƒ์œ„ ๊ฐœ๋…
  • Workflow ํŒŒ์ผ์€ YAML์œผ๋กœ ์ž‘์„ฑ๋˜๊ณ , Github Repository์˜ .github/workflows ํด๋”์— ์ €์žฅ

2. Event

on: [push]
  • Workflow๋ฅผ Triggerํ•˜๋Š” ํŠน์ • ํ™œ๋™, ๊ทœ์น™
  • ํŠน์ • Branch๋กœ Push, Pull Requestํ•˜๋Š” ๊ฒฝ์šฐ
  • ํŠน์ • ์‹œ๊ฐ„๋Œ€์— ๋ฐ˜๋ณต(Cron)

3. Jobs

  • Runner์—์„œ ์‹คํ–‰๋˜๋Š” Steps์˜ ์กฐํ•ฉ
  • ์—ฌ๋Ÿฌ Job์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๋ฉฐ, ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Œ
  • ๋‹ค๋ฅธ Job์— ์˜์กด ๊ด€๊ณ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ

4. Steps

  • Step์€ Job์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐœ๋ณ„ ์ž‘์—…
  • Action์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์‰˜ ์ปค๋งจ๋“œ ์‹คํ–‰
  • ํ•˜๋‚˜์˜ Job์—์„  ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Œ

5. Actions

  • Workflow์˜ ์ œ์ผ ์ž‘์€ ๋‹จ์œ„
  • Job์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ Step์„ ๋ฌถ์€ ๊ฐœ๋…
  • ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ Component
  • ๊ฐœ์ธ์ ์œผ๋กœ Action์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๊ณ , Marketplace์˜ Action์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Œ

6. Runner

  • Github Action๋„ ์ผ์ข…์˜ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐœ๋…
  • Workflow๊ฐ€ ์‹คํ–‰๋  ์„œ๋ฒ„
  • Github-hosted Runner : Github Action์˜ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• (์„ฑ๋Šฅ : vCPU2, Memory 7GB, Storage 14GB)
  • Self-hosted Runner : ์ง์ ‘ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

Compute Engine์— Docker ์ด๋ฏธ์ง€ ๋ฐฐํฌํ•˜๊ธฐ - Github Action

์ž‘์—… ํ๋ฆ„

1) Feature/xxx Branch์—์„œ ์ž‘์—…
2) Main Branch๋กœ Pull Request
3) Review ํ›„ Merge

CI/CD

4) Merge๋œ ํŒŒ์ผ์—์„œ Docker Image Build

docker build . -t "steamrec"

5) Docker Image Push
6) Compute Engine์— Docker Image ์—…๋ฐ์ดํŠธ ์š”์ฒญ

profile
์žฅ๋‚œ๊ฐ์ด ๋ฐ์ดํ„ฐ์ธ ์‚ฌ๋žŒ

0๊ฐœ์˜ ๋Œ“๊ธ€