[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ][Deploy] CI/CD

JiEunยท2023๋…„ 6์›” 5์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

CI/CD์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ์ง์ ‘ ์‹ค์Šตํ•˜๋Š” ํ•™์Šต์„ ์ง„ํ–‰ํ–ˆ๋‹ค.


๐Ÿ“ ๋ฐฐ์šด ๊ฒƒ

โœ”๏ธ CI/CD

CI(Continuous Integration)

  • ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค์ธ ์ง€์†์ ์ธ ํ†ตํ•ฉ

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

CD(Continuous Delivery / Continuous Deployment)

  • ์ง€์†์ ์ธ ์„œ๋น„์Šค ์ œ๊ณต(Continuous Delivery) ๋˜๋Š” ์ง€์†์ ์ธ ๋ฐฐํฌ(Continuous Deployment)๋ฅผ ์˜๋ฏธ (๋‘ ์šฉ์–ด๋Š” ์ƒํ˜ธ ๊ตํ™˜์ ์œผ๋กœ ์‚ฌ์šฉ)
  • ๋‘ ๊ฐ€์ง€ ์˜๋ฏธ ๋ชจ๋‘ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ถ”๊ฐ€ ๋‹จ๊ณ„์— ๋Œ€ํ•œ ์ž๋™ํ™”๋ฅผ ๋œปํ•˜์ง€๋งŒ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ž๋™ํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•œ๋‹ค.

CI/CD์˜ ๋‹จ๊ณ„

Code - Build - Test - Release - Deploy - Operate - Plan

์ง€์†์  ํ†ตํ•ฉ(Continuous Integration, CI)

  • ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค
  • Code - Build - Test ๋‹จ๊ณ„์— ํ•ด๋‹น
    - Code : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์›๊ฒฉ ์ฝ”๋“œ ์ €์žฅ์†Œ(github repository ๋“ฑ)์— pushํ•˜๋Š” ๋‹จ๊ณ„
    - Build: ์›๊ฒฉ ์ฝ”๋“œ ์ €์žฅ์†Œ๋กœ ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ์œ ๋‹› ํ…Œ์ŠคํŠธ ํ›„ ๋นŒ๋“œํ•˜๋Š” ๋‹จ๊ณ„
    - Test: ์ฝ”๋“œ ๋นŒ๋“œ์˜ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์™€ ์ž˜ ํ†ตํ•ฉ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •
  • ๋ฒ„๊ทธ๋ฅผ ์ผ์ฐ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋œ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋น ๋ฅธ ์ „๋‹ฌ๊ณผ ์ง€์†์ ์ธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
  • ๋ชจ๋“  ๊ฐœ๋ฐœํŒ€์ด ์ฝ”๋“œ์˜ ๋ณ€ํ™”๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ธฐ์— ํˆฌ๋ช…ํ•˜๊ฒŒ ๋ฌธ์ œ์ ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
    (์žฆ์€ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(pull request)์™€ ๋จธ์ง€(merge)๋กœ ์ฝ”๋“œ๋ฅผ ์ž์ฃผ ํ†ตํ•ฉํ•œ๋‹ค.)
  • ๊ฐœ๋ฐœํŒ€์€ ๊ฐ์ž ๊ฐœ๋ฐœํ•œ ์ฝ”๋“œ๋ฅผ ์ด๋ฅธ ์‹œ์ ์— ์ž์ฃผ ํ•ฉ์น˜๊ณ  ํ…Œ์ŠคํŠธ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณด์•ˆ ์ด์Šˆ, ์—๋Ÿฌ ๋“ฑ์„ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด ํ•ด๋‹น ์ด์Šˆ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฝ”๋“œ๋ฅผ ๋จธ์ง€ํ•˜๊ธฐ ์ „, ์ด๋ฏธ ๋นŒ๋“œ ์˜ค๋ฅ˜๋‚˜ ํ…Œ์ŠคํŠธ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•ด ํ›จ์”ฌ ๋” ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ง€์†์  ๋ฐฐํฌ(Continuous Delivery/Deployment, CD)

  • ์ง€์†์ ์ธ ์„œ๋น„์Šค ์ œ๊ณต(Continuous Delivery) ๋ฐ ์ง€์†์ ์ธ ๋ฐฐํฌ(Continuous Deployment)๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    (๋‘ ์šฉ์–ด๋Š” ์ƒํ˜ธ ๊ตํ™˜์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.)

  • Release - Deploy - Operate ๋‹จ๊ณ„์— ํ•ด๋‹น
    - Release: ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง€๋ฅผ ์ž‘์„ฑ
    - Deploy: ํ”„๋กœ๋น„์ €๋‹์„ ์‹คํ–‰ํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœํ•œ๋‹ค.(์‹ค์งˆ์ ์ธ ๋ฐฐํฌ)
    - Operate: ์„œ๋น„์Šค ํ˜„ํ™ฉ์„ ํŒŒ์•…ํ•˜๊ณ  ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€

  • ์ฝ”๋“œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์˜ ๋ณ‘ํ•ฉ๋ถ€ํ„ฐ ํ”„๋กœ๋•์…˜์— ์ ํ•ฉํ•œ ๋นŒ๋“œ ์ œ๊ณต์— ์ด๋ฅด๋Š” ๋ชจ๋“  ๋‹จ๊ณ„

  • ํ…Œ์ŠคํŠธ ์ž๋™ํ™”์™€ ์ฝ”๋“œ ๋ฐฐํฌ ์ž๋™ํ™”๊ฐ€ ํฌํ•จ๋œ๋‹ค.

  • ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์™„๋ฃŒํ•˜๋ฉด ํ”„๋กœ๋•์…˜ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋œ ๋นŒ๋“œ๋ฅผ ์ฝ”๋“œ ๋ฆฌํฌ์ง€ํ† ์ด๋ ˆ ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์šด์˜ํŒ€์ด ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ์†์‰ฝ๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ”„๋กœ๋•์…˜์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

ํด๋ผ์šฐ๋“œ ๊ธฐ์ˆ  ๋ฐœ์ „๊ณผ ๋งž๋ฌผ๋ ค ์ง€์†์  ํ†ตํ•ฉ๊ณผ ์ง€์†์  ๋ฐฐํฌ๊ฐ€ ๋น ๋ฅธ ์†๋„๋กœ ์ง„ํ–‰๋˜๋ฉด์„œ CI/CD๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ ์ฐจ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค.

  • ์š”์ฆ˜์€ ๊ณ ๊ฐ์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋นจ๋ฆฌ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋ผ๋„, ์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ๋ผ๋„ ๋ฆด๋ฆฌ์Šค๋งŒ ์ž˜ ๊ธฐ๋กํ•ด ๋‘๊ณ  ๋ฐ”๋กœ๋ฐ”๋กœ ๋ฐฐํฌํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค.

CI/CD์˜ ์˜์—ญ

CI/CD๋Š” ์ง€์†์  ํ†ตํ•ฉ ๋ฐ ์ง€์†์  ์ œ๊ณต(CD, Continuous Delivery)์˜ ๊ตฌ์ถ• ์‚ฌ๋ก€๋งŒ์„ ์ง€์นญํ•  ๋•Œ๋„ ์žˆ๊ณ , ์ง€์†์  ํ†ตํ•ฉ, ์ง€์†์  ์ œ๊ณต, ์ง€์†์  ๋ฐฐํฌ๋ผ๋Š” 3๊ฐ€์ง€ ๊ตฌ์ถ• ์‚ฌ๋ก€ ๋ชจ๋‘๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

"์ง€์†์ ์ธ ์„œ๋น„์Šค ์ œ๊ณต"์€ ๋•Œ๋กœ ์ง€์†์ ์ธ ๋ฐฐํฌ์˜ ๊ณผ์ •๊นŒ์ง€ ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•œ๋‹ค.

  • CI/CD๋Š” ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ํ‘œํ˜„๋˜๋Š” ์‹ค์ œ ํ”„๋กœ์„ธ์Šค ๋งํ•˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ง€์†์ ์ธ ์ž๋™ํ™” ๋ฐ ์ง€์†์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ์šฉ์–ด๋Š” ์‚ฌ๋ก€๋ณ„๋กœ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ๊ตฌํ˜„๋œ ์ž๋™ํ™” ์ˆ˜์ค€ ์ •๋„์— ๋”ฐ๋ผ ๊ทธ ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์—…์—์„œ๋Š” CI๋ฅผ ๋จผ์ € ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ถ€๋กœ์„œ ๋ฐฐํฌ ๋ฐ ๊ฐœ๋ฐœ ์ž๋™ํ™”๋ฅผ ๊ตฌํ˜„ํ•ด ๋‚˜๊ฐ„๋‹ค.

๋ฐฐํฌ ์ž๋™ํ™”

  • ํ•œ ๋ฒˆ์˜ ํด๋ฆญ ํ˜น์€ ๋ช…๋ น์–ด ์ž…๋ ฅ์„ ํ†ตํ•ด ์ „์ฒด ๋ฐฐํฌ ๊ณผ์ •์„ ์ž๋™์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ
    - ์ˆ˜๋™์ ์ด๊ณ  ๋ฐ˜๋ณต์ ์ธ ๋ฐฐํฌ ๊ณผ์ •์„ ์ž๋™ํ™” ๋˜๊ธฐ์— ์‹œ๊ฐ„ ์ ˆ์•ฝ๋œ๋‹ค.
    - ํœด๋จผ ์—๋Ÿฌ(Human Error)๋ฐฉ์ง€ํ•œ๋‹ค.
    ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด ์ „์ฒด ๋ฐฐํฌ ๊ณผ์ •์„ ๋งค๋ฒˆ ์ผ๊ด€๋˜๊ฒŒ ์ง„ํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•ด ํœด๋จผ ์—๋Ÿฌ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค.

ํœด๋จผ ์—๋Ÿฌ?
์‚ฌ๋žŒ์ด ์ˆ˜๋™์ ์œผ๋กœ ๋ฐฐํฌ ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๋Š” ์ค‘์— ์ƒ๊ธฐ๋Š” ์‹ค์ˆ˜๋“ค

โœ”๏ธ CI/CD ํŒŒ์ดํ”„๋ผ์ธ

  • ๋ฐฐํฌ ๊ณผ์ •์„ ์ž๋™ํ™”์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์žฅ์ 

๊ตฌ์„ฑ

  • ๋นŒ๋“œ (์†Œํ”„ํŠธ์›จ์–ด ์ปดํŒŒ์ผ)
  • ํ…Œ์ŠคํŠธ (ํ˜ธํ™˜์„ฑ ๋ฐ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ)
  • ๋ฆด๋ฆฌ์Šค (๋ฒ„์ „ ์ œ์–ด ์ €์žฅ์†Œ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—…๋ฐ์ดํŠธ)
  • ๋ฐฐํฌ (๊ฐœ๋ฐœ์—์„œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์œผ๋กœ์˜ ๋ณ€ํ™˜)
  • ๊ทœ์ • ์ค€์ˆ˜ ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

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

๊ตฌ์ถ•๋œ ํŒŒ์ดํ”„๋ผ์ธ์€ ์ตœ์‹  ๋ฒ„์ „์˜ ์†Œํ”„ํŠธ์›จ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ œ๊ณตํ•˜๋Š”
์ผ๋ จ์˜ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ˆ˜๋™์œผ๋กœ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค

  • ๋” ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ด๋ฉฐ ํšจ๊ณผ์ ์œผ๋กœ ์ค„์—ฌ์ฃผ๊ณ 
  • CI/CD ์ธํ”„๋ผ์™€์˜ ํ˜ธํ™˜์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค.

Github Action

  • Github๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” CI/CD ํ”Œ๋žซํผ
  • ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ Pull Request ๋‚˜ push ๊ฐ™์€ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐ๋กœ GitHub ์ž‘์—… ์›Œํฌํ”Œ๋กœ์šฐ(Workflow)๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์›Œํฌํ”Œ๋กœ์šฐ ?

  • ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž‘์—…์ด ์‹คํ–‰๋˜๋Š” ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค
  • ๊ฐ ์ž‘์—…์€ ์ž์ฒด ๊ฐ€์ƒ ๋จธ์‹  ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋œ๋‹ค.
  • .yml (ํ˜น์€ .yaml ) ํŒŒ์ผ์— ์˜ํ•ด ๊ตฌ์„ฑ๋œ๋‹ค.
  • ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋“ฑ ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” .github/workflows ๋””๋ ‰ํ† ๋ฆฌ ์ดํ•˜์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.

๊ณต๊ฐœ(public) ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ํ•ด์•ผ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ Github Action ์‹ค์Šต

๋ฐฐ์› ๋˜ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ์‹ค์Šต์„ ์ง„ํ–‰ ํ–ˆ๋‹ค.
์ดˆ๋ฐ˜์— ๋ฌด์Šจ ๋ง์ธ์ง€.. ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•˜์ง€๋งŒ...ใ… 

๊ธฐ์กด์— ์žˆ๋˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ์ง„ํ–‰์„ ํ–ˆ๋‹ค.
git clone ํ›„ YAML ํŒŒ์ผ์— ์ ํžŒ ๋ช…๋ น์–ด๋ฅผ ํ† ๋Œ€๋กœ Webpack์„ ์ด์šฉํ•ด ๋นŒ๋“œํ•œ๋‹ค.

client.yml ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค.

name: client
on:
  push:
    branches:
      - reference

ํŒŒ์ผ ๋ช…๊ณผ branch ๋ช…์„ ์ž‘์„ฑํ•ด ์ฃผ๋ฉด ๋˜๋Š” ๋“ฏ ์‹ถ์–ด ์ž‘์„ฑํ•ด ์ฃผ์—ˆ๋‹ค.

jobs:
  build:
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout source code.
        uses: actions/checkout@v2
      - name: Install dependencies
        run: npm install
        working-directory: ./my-agora-states-client-react

name์€ ํ•ด๋‹น ํ–‰๋™ ๋ช…์นญ์„ ๋œปํ•˜๋Š” ๊ฑฐ ๊ฐ™๊ณ 
run์€ ํ•ด๋‹น ํ–‰๋™์„ ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ๋ฉด ๋˜๋Š” ๋“ฏ ์‹ถ์–ด ์ž‘์„ฑํ•ด ์ฃผ์—ˆ๋‹ค.
working-directory๋Š” ์‹คํ–‰ํ•  ํŒŒ์ผ ๊ฒฝ๋กœ์ธ ๋“ฏ ์‹ถ๋‹ค..

build ๋ถ€๋ถ„๋„ ๋™์ผํ•˜๊ฒŒ ์ž‘์„ฑํ•ด ์ฃผ์—ˆ๋‹ค.

AWS๋กœ ๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

 - name: SHOW AWS CLI VERSION
        run: |
          aws --version

์ด ๋ถ€๋ถ„์€ ๊ตฌ๊ธ€๋ง ํ•˜๋‹ˆ ๋ฒ„์ „ ํ™•์ธ ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_EC2_METADATA_DISABLED: true

AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY๋Š” ๋…ธ์ถœ ๋˜๋ฉด ์•ˆ๋˜๋Š” ๋ถ€๋ถ„์ด๋ผ
ํ•˜๋“œ ์ฝ”๋”ฉํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.

์ฒ˜์Œ์—๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ž‘์„ฑํ•˜๋Š” ์ค„ ์•Œ์•˜์ง€๋งŒ github์—์„œ ์ €์žฅ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
โฌ‡๏ธ
github actions ์‹œํฌ๋ฆฟ ํ‚ค ์ €์žฅ ํ•˜๋Š” ๋ฒ•

run: |
          aws s3 sync \
            --region ap-northeast-2 \
            build s3://fe-119-jieun419-s3 \
            --delete
        working-directory: ./my-agora-states-client-react

๊ตฌ๊ธ€๋งํ•ด๋ณด๋‹ˆ
aws s3 sync \ ๋Š” sync, cp์— ๋”ฐ๋ผ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
--region ap-northeast-2 \ ๋ฆฌ์ „์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋‹ค.
build s3://fe-119-jieun419-s3 \ ํ•ด๋‹น ๋ถ€๋ถ„์€ ๋ฒ„ํ‚ท ์ด๋ฆ„์„ ์ž‘์„ฑํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์„ฑ๊ณตํ•œ ํ™”๋ฉด ใ… ใ…  ์ดˆ๋ฐ˜์— ์ž๊พธ ์–ด๋””๊ฐ€ ๋ฌธ์ œ์ด์ง€? ํ–ˆ์—ˆ๋‹ค.
์•Œ๊ณ  ๋ณด๋‹ˆ working-directory๊ฐ€ ๋งž์ง€ ์•Š์•˜์—ˆ๋‹ค.
๊ทธ๋ถ€๋ถ„์„ ์ „๋ถ€ ์ˆ˜์ •ํ•ด ์ฃผ๋‹ˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

AWS S3์—์„œ ํ™•์ธ ํ–ˆ์„ ๋•Œ๋„ ์ž˜ ๋‚˜์™”๋‹ค.


โœ๏ธ ๋งˆ์น˜๋ฉฐ

์‹ค์Šต ์ค‘ build ๊นŒ์ง€๋Š” ๋ฌด๋‚œํ•˜๊ฒŒ ์ž˜ ๋„˜์–ด ๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
aws s3 ์—ฌ๊ธฐ ๋ถ€ํ„ฐ ๋ญ”๊ฐ€ ๊ฒฝ๋กœ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๊ฑฐ ๊ฐ™์€๋ฐ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š”์ง€ ๊ฐ์ด ์žกํžˆ์ง€ ์•Š์•„
์‹œ๊ฐ„ ์†Œ๋น„๊ฐ€ ๊ฝค ๋์—ˆ๋‹ค.

๊ตฌ๊ธ€๋ง ํ•˜๋‹ค ๋‹ค๋ฅธ ๋ถ„์ด ํ•˜์…จ๋˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์ฐธ๊ณ ๋ฅผ ํ–ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.๐Ÿ™‡โ€โ™€๏ธ

๋˜ํ•œ ymlํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ดˆ๋ฐ˜์— ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด์ง€? ์‹ถ์—ˆ์ง€๋งŒ
์•ž์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ์ƒ๊ฐํ•ด ๋ณด๋ฉด ์ž๋™ํ™” ๋ฐฐํฌ์ด๊ธฐ์—
ํ•ด๋‹น ๋ช…๋ น์–ด์™€ ๊ทธ ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋œ ํด๋”๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค.

์‹ค์Šต์„ ํ†ตํ•ด ํ•˜๋‚˜์”ฉ ์ดํ•ดํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์ฐธ๊ณ 
https://velog.io/@shinnh2/Github-Actions-AWS-S3-yml

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

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