๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ Etc.../- linux, aws, docker, k8s

[Travic CI] Travis ๋ง›๋ณด๊ธฐ (1) Travis-CI ์™€ Github Repo์™€ ์—ฐ๋™ํ•˜๊ธฐ

by Wonit 2020. 12. 6.

์ด ๊ธ€์€ Travis CI ๋ง›๋ณด๊ธฐ ์‹œ๋ฆฌ์ฆˆ์˜ 2๋ถ€์ž‘์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Travis-CI ์— ๊ฐ€์ž…ํ•˜๊ณ  Github Repo์™€ ์—ฐ๋™ํ•˜๊ณ  CI๋ฅผ ๋ง›๋ณด์ž.
  2. Travis์™€ Github๋ฅผ ์—ฐ๋™ํ•˜๊ณ  CI ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋ฉด ๋‘˜ ์‚ฌ์ด์— ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ?
์„œ๋กœ ๋‚ด์šฉ์„ ๋ณด์™„ํ•˜๊ณ  ์žˆ๋Š” ๊ด€๊ณ„์ด๋ฏ€๋กœ ํ•œ ๋ฒˆ ํ•ด๋‹น ํฌ์ŠคํŒ…์œผ๋กœ ๊ฐ€์„œ ๊ฐ€๋ฒผ์šด ๋งˆ์Œ์œผ๋กœ ์ฝ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ Travis CI ์— ๋Œ€ํ•ด ๊ฐ€๋ณ๊ฒŒ ์‹ค์Šตํ•ด๋ณด๋ฉฐ ๊ฐ์„ ์ตํ˜€๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ–๊ณ ์ž ํ•œ๋‹ค.


์‚ฌ์‹ค ์ด๋ก  ์„ค๋ช…์„ ๋จผ์ € ํ•˜๊ณ  ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๊ณ  ํ•„์ž๊ฐ€ ์ข‹์•„ํ•˜์ง€๋งŒ, ํ•ด๋‹น ํ•™์Šต์€ ํŠน๋ณ„ํ•˜๊ฒŒ ๋จผ์ € ์‹ค์Šต์„ ํ•˜๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ๋” ์ข‹๊ฒ ๋‹ค ์‹ถ์€ ๋งˆ์Œ์— ๋จผ์ € ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๊ณ  ๋’ค์— ์„ค๋ช…์„ ํ•œ๋‹ค.


๋จผ์ € ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋Œ€์ถฉ ์–ด๋–ค ๋Š๋‚Œ์ธ์ง€๋งŒ ๊ฐ์„ ์žก๊ณ  ๋’ค์—์„œ๋Š” ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€๋ฅผ ๋‹ค์Œ ์‹œ๊ฐ„๋ถ€ํ„ฐ ์•Œ์•„๋ณผ ์˜ˆ์ •์ด๋‹ค.


๋‚˜๋Š” ์ด ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๊ธฐํšํ•˜๊ณ  ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋˜๊ฒŒ ์žฌ๋ฐŒ๊ฒŒ ๋ฐฐ์› ๋Š”๋ฐ, ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ๋„ ๊ทธ๋Ÿฐ ๊ฒฝํ—˜์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

์‹ค์Šต ์ค€๋น„๋ฌผ

์‹ค์Šต์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ค€๋น„๋ฌผ์ด ํ•„์š”ํ•˜๋‹ค.

  • Travis CI ํ™ˆํŽ˜์ด์ง€์˜ ๊ณ„์ •
  • Github ํ™ˆํŽ˜์ด์ง€์˜ ๊ณ„์ •
  • Github์— ์˜ฌ๋ผ๊ฐ€์žˆ๋Š” Repository
  • (Optional) CRA๋กœ ๋งŒ๋“  ๋ฆฌ์•กํŠธ ์•ฑ. (์˜ต์…˜)

ํ•ด๋‹น ์„ค๋ช…์€ ํ•„์ž์˜ ํ”„๋กœ์ ํŠธ๋กœ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•„์ž์™€ ๊ฐ™์€ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.


React์™€ npm์œผ๋กœ ๊ตฌ์ถ•๋˜์–ด ์žˆ๋Š”๋ฐ, ๋งŒ์•ฝ ๋‹น์žฅ ํ•„์š”ํ•œ React์™€ npm ํŒจํ‚ค์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ด๊ณณ์— ๋“ค์–ด๊ฐ€์„œ react๋ฅผ npm์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

 

์šฐ์„  Travis-CI์™€ Github๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€์— ํšŒ์›๊ฐ€์ž…์„ ๋ฏธ๋ฆฌ ์ง„ํ–‰ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

์ˆœ์„œ

  1. Travis ํšŒ์›๊ฐ€์ž…
  2. ๊นƒํ—™ ๋ ˆํฌ ํ™œ์„ฑํ™”
    • (Travis์™€ Github๋ฅผ ์ƒํ˜ธ ์—ฐ๊ฒฐํ•ด์•ผํ•˜๋Š”๋ฐ, ์ค‘์š”ํ•œ ๊ฒƒ์€ ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ Admin ์ด์–ด์•ผ ๊ฐ€๋Šฅํ•˜๋‹ค.)
  3. travis.yml ํŒŒ์ผ ์ถ”๊ฐ€
    • (Travis CI๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” .travis.yml์ด๋ผ๋Š” ํŒŒ์ผ์ด ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ฃจํŠธ์— ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
  4. ๋นŒ๋“œ๋ฅผ git push ๋กœ ์‹คํ–‰
    • (.travis.yml ์ด๋ผ๋Š” ํŒŒ์ผ์—์„œ ์ง€์ •๋œ branch๋กœ push ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.)

์˜ ์ˆœ์„œ๋กœ ์ด๋ฃจ์–ด์งˆ ์˜ˆ์ •์ด๋‹ค.

์‹œ์ž‘ํ•ด๋ณด์ž.


Travis ํšŒ์›๊ฐ€์ž…

์šฐ์„  Travis ์— ํšŒ์›๊ฐ€์ž…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

๋งŒ์•ฝ ํšŒ์›๊ฐ€์ž…์„ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด Sign UP ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ , ํšŒ์›๊ฐ€์ž…์„ ๋งˆ์ณค์œผ๋ฉด sign in ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค.

Travis๋Š” ๋‹ค์–‘ํ•œ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์ง€์›ํ•œ๋‹ค.

 

์›๋ž˜๋Š” github๊ฐ€ ๋Œ€ํ‘œ์ ์ธ VCS ์˜€์ง€๋งŒ, ์ด์ œ๋Š” Bitbucket๊ณผ Gitlab ๋ฅผ ์ถ”๊ฐ€๋กœ ์ง€์›ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ฒ ํƒ€ ๋ฒ„์ „์ด๋ฏ€๋กœ github๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

Github ๋ ˆํฌ์ง€ํ† ๋ฆฌ์™€ ์—ฐ๊ฒฐ

ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค, ์ƒ๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜์—์„œ Dashboard๋กœ ๋“ค์–ด์˜ค๋ฉด ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚  ๊ฒƒ์ด๋‹ค.

 

๋‚˜๋Š” Dashboard์— ๋ชจ๋“  ๋ ˆํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— ์ €๋ ‡๊ฒŒ ๋œฐ ๊ฒƒ์ด๊ณ  ๋งŒ์•ฝ ์ฒ˜์Œ์ด๋ผ๋ฉด Setting์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

๋‚ด ํ”„๋กœํ•„์— Setting ํด๋ฆญํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ Manage repository on Github๋ฅผ ํด๋ฆญํ•ด๋ณด์ž.

 

์—ฌ๊ธฐ์„œ 2 ๊ฐ€์ง€ ์„ ํƒ์ง€๊ฐ€ ์žˆ๋‹ค.

๋ชจ๋“  ๋ ˆํฌ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์™€ ํŠน์ • ๋ ˆํฌ๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  1. ํŠน์ • ๋ ˆํฌ๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

ํŠน์ • ๋ ˆํฌ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์œ„์˜ ์„ ํƒ์ง€์—์„œ Only Select Repository ๋ฅผ ํด๋ฆญํ•˜๊ณ , ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ ˆํฌ๋ฅผ ์ถ”๊ฐ€์‹œํ‚จ๋‹ค.

  1. ๋ชจ๋“  ๋ ˆํฌ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

์œ„์—์„œ Only Select Repository๊ฐ€ ์•„๋‹Œ All Repository๋กœ ๋ชจ๋“  ๋ ˆํฌ๋ฅผ ํ—ˆ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด travis-ci๋กœ ๋Œ์•„์™”์„ ๋•Œ, ์™ผ์ชฝ ๋Œ€์‹œ๋ณด๋“œ์— ๋‚˜์˜ github์— ์žˆ๋Š” ๋ชจ๋“  ๋ ˆํฌ๊ฐ€ ๋œฌ๋‹ค.

์ด ๋ง์€,

 

๋‚˜์˜ ๋ชจ๋“  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— travis.yml ํŒŒ์ผ์ด ์ถ”๊ฐ€๋œ๋‹ค๋ฉด travis๋Š” ์ด๋ฅผ CIํ•  ์ค€๋น„๋ฅผ ๋งˆ์น˜๊ฒ ๋‹ค!

 

๋ผ๋Š” ๋œป์ด๋‹ค.


travis.yml ํŒŒ์ผ ์ถ”๊ฐ€

์ด์ œ travis ํ•œํ…Œ ์–ด๋–ค ํ–‰๋™์„ ํ• ์ง€ travis.yml์„ ์ค˜์•ผํ•œ๋‹ค.


๊ทธ๊ฑธ ํ”„๋กœ์ ํŠธ root ์—์„œ .travis.yml ํŒŒ์ผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

 

์ผ๋‹จ์€ ๋น„์–ด์žˆ๋Š” travis.yml ํŒŒ์ผ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ์— ํ‘ธ์‹œํ•˜๊ณ  ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ด๋ณด์ž.

์‹คํŒจํ–ˆ๋‹ค!

์ด์œ ๋Š” ๋ป”ํ•˜๋‹ค.


travis.yml์— ์šฐ๋ฆฌ๊ฐ€ ๋ญ˜ ํ•ด์ค„์ง€ ์•ˆ ์ ์–ด์„œ ์‹คํŒจํ•œ ๊ฒฝ์šฐ์ด๋‹ค.


์ด์ œ ์„ฑ๊ณต์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์–ด๋ณด์ž.

language: node_js # ์–ธ์–ด๋Š” node_js
node_js:
  - "10.14" # node_js์— ๋ฒ„์ „ 10.14
before_install: # ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ธฐ ์ „
  - npm update # npm ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธ
  - cd ./client # client ๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
branches:
  only:
    - master
notifications: # ์„ฑ๊ณต ์‹คํŒจ ์—ฌ๋ถ€ ์•Œ๋ฆผ
  email:
    recipients:
      - xxx@xxx.com

๋‚˜๋Š” ๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ language์—๋Š” node_js ๋ผ๊ณ  ์ง€์ •ํ•ด์ค„ ๊ฒƒ์ด๋‹ค.


๊ฑฑ์ •ํ•˜์ง€ ๋ง์ž ์–ด์ฐจํ”ผ ๋’ค์—์„œ ๋‹ค ๋ฐฐ์šด๋‹ค.


๋‹น์žฅ์€ ์ €๋ ‡๊ฒŒ๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด๋œ๋‹ค.

์ฃผ์˜! ์—ฌ๊ธฐ์„œ before_install์— ๋ณด๋ฉด cd๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๊ฑด ๋‚˜์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ client ํด๋” ์•„๋ž˜์— package.json ํŒŒ์ผ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์ค€๊ฑฐ๊ณ  ๋งŒ์•ฝ package.json ํŒŒ์ผ์ด ๋ฃจํŠธ์— ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์ค„์€ ์—†์–ด์•ผํ•œ๋‹ค.

git push

์ด์ œ ์œ„์˜ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ 

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ travis ๋กœ ๋ณด๋ฉด ๋…ธ๋ž€์ƒ‰์œผ๋กœ ๋ฐ”๋€Œ๊ณ  ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰

์ข€ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ด

]

๋นŒ๋“œ ์‹คํŒจ

์ด์œ ๋ฅผ ์ฐพ์•„๋ณด์ž

์ข€ ์•„๋ž˜์— ๋ณด๋ฉด Job Log๊ฐ€ ์žˆ๋Š”๋ฐ, Job Log๋กœ ๋ณด๋‹ˆ๊นŒ "make test" ๊ฐ€ 2๋กœ ์ข…๋ฃŒ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

๋’ค์— ๋ฐฐ์šธ ๋‚ด์šฉ์ด์ง€๋งŒ Travis ์—์„œ๋Š” 0์ด ์•„๋‹Œ ์ˆ˜๋ฅผ Fail๋กœ ๋ณด๊ณ  ์˜ค๋กœ์ง€ 0๋งŒ Success๋กœ ๋ณธ๋‹ค.

๊ทธ๋Ÿผ test๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ์†Œ๋ฆฌ์ธ๋ฐ, ์ด๊ฑด ๋‚ด npm ํŒจํ‚ค์ง€์— test ์ฝ”๋“œ๊ฐ€ ์—†์–ด์„œ ๊ทธ๋Ÿฐ๋‹ค.

 

์ผ๋‹จ test๋Š” ๋‹น์žฅ ์•ˆ ๋‹ค๋ฃฐ๊ฑฐ๋‹ˆ๊นŒ package.json ์—์„œ script ์•„๋ž˜์˜ ๊ฐ’๋“ค์„ ๋‹ค์Œ์ฒ˜๋Ÿผ "test" : "exit" ์œผ๋กœ ๋ณ€๊ฒฝ ํ•˜๊ณ  ๋‹ค์‹œ push ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ๋™์‹œํ‚จ๋‹ค.

๊ทธ๋Ÿฌ๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋ฉด

๋นŒ๋“œ ์„ฑ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ง€๊ธˆ ๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ master ๋ธŒ๋žœ์น˜๋กœ push ํ•˜๋ฉด ์ž๋™์œผ๋กœ travis๊ฐ€ build๋ฅผ ๋งˆ์น˜๊ณ  ๋ฐฐํฌํ•  ์ค€๋น„๋ฅผ ํ•œ ๊ฒƒ์ด๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ๊ฒŒ ์žˆ๋‹ค.

travis๋Š” ci ๋„๊ตฌ๋ผ์„œ ๋นŒ๋“œ integration๋งŒ ํ• ์ค„ ์•ˆ๋‹ค.

์ฆ‰, ๋นŒ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ค„๋งŒ ์•ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.


๊ทธ๋Ÿผ CI CD ์—์„œ CD๋ฅผ ๋”ฐ๋กœ ๊ตฌ์ถ•ํ•ด์ค„ ํ•„์š”๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋งŽ์ด ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ


๋งŒ์•ฝ CD๋ฅผ ์›ํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๋ธ”๋กœ๊ทธ์— CodeDeploy๋‚˜ Jenkins ํƒญ์„ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค!

๋Œ“๊ธ€