[Travic CI] Travis ๋ง๋ณด๊ธฐ (1) Travis-CI ์ Github Repo์ ์ฐ๋ํ๊ธฐ
์ด ๊ธ์ Travis CI ๋ง๋ณด๊ธฐ ์๋ฆฌ์ฆ์ 2๋ถ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- Travis-CI ์ ๊ฐ์ ํ๊ณ Github Repo์ ์ฐ๋ํ๊ณ CI๋ฅผ ๋ง๋ณด์.
- Travis์ Github๋ฅผ ์ฐ๋ํ๊ณ CI ํ๊ฒฝ์ ๊ตฌ์ถํ๋ฉด ๋ ์ฌ์ด์ ์ด๋ค ์ผ์ด ์ผ์ด๋ ๊น?
์๋ก ๋ด์ฉ์ ๋ณด์ํ๊ณ ์๋ ๊ด๊ณ์ด๋ฏ๋ก ํ ๋ฒ ํด๋น ํฌ์คํ ์ผ๋ก ๊ฐ์ ๊ฐ๋ฒผ์ด ๋ง์์ผ๋ก ์ฝ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
์ค๋์ Travis CI ์ ๋ํด ๊ฐ๋ณ๊ฒ ์ค์ตํด๋ณด๋ฉฐ ๊ฐ์ ์ตํ๋ณด๋ ์๊ฐ์ ๊ฐ๊ณ ์ ํ๋ค.
์ฌ์ค ์ด๋ก ์ค๋ช
์ ๋จผ์ ํ๊ณ ์ค์ต์ ์งํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๊ณ ํ์๊ฐ ์ข์ํ์ง๋ง, ํด๋น ํ์ต์ ํน๋ณํ๊ฒ ๋จผ์ ์ค์ต์ ํ๋ ๊ฒ์ด ์คํ๋ ค ๋ ์ข๊ฒ ๋ค ์ถ์ ๋ง์์ ๋จผ์ ์ค์ต์ ์งํํ๊ณ ๋ค์ ์ค๋ช
์ ํ๋ค.
๋จผ์ ์ค์ต์ ์งํํ๋ฉด์ ๋์ถฉ ์ด๋ค ๋๋์ธ์ง๋ง ๊ฐ์ ์ก๊ณ ๋ค์์๋ ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง๋ฅผ ๋ค์ ์๊ฐ๋ถํฐ ์์๋ณผ ์์ ์ด๋ค.
๋๋ ์ด ์๋ฆฌ์ฆ๋ฅผ ๊ธฐํํ๊ณ ๊ณต๋ถํ๋ฉด์ ๋๊ฒ ์ฌ๋ฐ๊ฒ ๋ฐฐ์ ๋๋ฐ, ์ฌ๋ฌ๋ถ์๊ฒ๋ ๊ทธ๋ฐ ๊ฒฝํ์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค.
์ค์ต ์ค๋น๋ฌผ
์ค์ต์ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ค๋น๋ฌผ์ด ํ์ํ๋ค.
- Travis CI ํํ์ด์ง์ ๊ณ์
- Github ํํ์ด์ง์ ๊ณ์
- Github์ ์ฌ๋ผ๊ฐ์๋ Repository
- (Optional) CRA๋ก ๋ง๋ ๋ฆฌ์กํธ ์ฑ. (์ต์ )
ํด๋น ์ค๋ช ์ ํ์์ ํ๋ก์ ํธ๋ก ์งํํ ์์ ์ด๊ธฐ ๋๋ฌธ์ ํ์์ ๊ฐ์ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
React์ npm์ผ๋ก ๊ตฌ์ถ๋์ด ์๋๋ฐ, ๋ง์ฝ ๋น์ฅ ํ์ํ React์ npm ํจํค์ง๊ฐ ํ์ํ๋ค๋ฉด ์ด๊ณณ์ ๋ค์ด๊ฐ์ react๋ฅผ npm์ผ๋ก ์ค์นํ๊ณ ์์ํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
์ฐ์ Travis-CI์ Github๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด ๊ฐ๊ฐ์ ํ์ด์ง์ ํ์๊ฐ์ ์ ๋ฏธ๋ฆฌ ์งํํด์ฃผ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
์์
- Travis ํ์๊ฐ์
- ๊นํ ๋ ํฌ ํ์ฑํ
- (Travis์ Github๋ฅผ ์ํธ ์ฐ๊ฒฐํด์ผํ๋๋ฐ, ์ค์ํ ๊ฒ์ ํด๋น ๋ ํฌ์งํ ๋ฆฌ์ Admin ์ด์ด์ผ ๊ฐ๋ฅํ๋ค.)
- travis.yml ํ์ผ ์ถ๊ฐ
- (Travis CI๊ฐ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ธฐ ์ํด์๋
.travis.yml
์ด๋ผ๋ ํ์ผ์ด ํด๋น ๋ ํฌ์งํ ๋ฆฌ์ ๋ฃจํธ์ ์กด์ฌํด์ผ ํ๋ค.
- (Travis CI๊ฐ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ธฐ ์ํด์๋
- ๋น๋๋ฅผ 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 ๊ฐ์ง ์ ํ์ง๊ฐ ์๋ค.
๋ชจ๋ ๋ ํฌ๋ฅผ ํ์ฉํ๋ ๊ฒฝ์ฐ์ ํน์ ๋ ํฌ๋ง ํ์ฉํ๋ ๊ฒฝ์ฐ
-
ํน์ ๋ ํฌ๋ง ํ์ฉํ๋ ๊ฒฝ์ฐ
ํน์ ๋ ํฌ๋ฅผ ํ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์ ์ ํ์ง์์ Only Select Repository ๋ฅผ ํด๋ฆญํ๊ณ , ๋ด๊ฐ ์ํ๋ ๋ ํฌ๋ฅผ ์ถ๊ฐ์ํจ๋ค.
-
๋ชจ๋ ๋ ํฌ๋ฅผ ํ์ฉํ๋ ๊ฒฝ์ฐ
์์์ 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 ํญ์ ์ฐพ์๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค!