[Travis CI] Travis ๋ง๋ณด๊ธฐ (2) Travis์ Github๋ฅผ ์ฐ๋ํ๊ณ CI ํ๊ฒฝ์ ๊ตฌ์ถํ๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋ ๊น?
์ด ๊ธ์ Travis CI ๋ง๋ณด๊ธฐ ์๋ฆฌ์ฆ์ 2๋ถ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
-
Travis-CI ์ ๊ฐ์ ํ๊ณ Github Repo์ ์ฐ๋ํ๊ณ CI๋ฅผ ๋ง๋ณด์.
-
Travis์ Github๋ฅผ ์ฐ๋ํ๊ณ CI ํ๊ฒฝ์ ๊ตฌ์ถํ๋ฉด ๋ ์ฌ์ด์ ์ด๋ค ์ผ์ด ์ผ์ด๋ ๊น?
์๋ก ๋ด์ฉ์ ๋ณด์ํ๊ณ ์๋ ๊ด๊ณ์ด๋ฏ๋ก ํ ๋ฒ ํด๋น ํฌ์คํ ์ผ๋ก ๊ฐ์ ๊ฐ๋ฒผ์ด ๋ง์์ผ๋ก ์ฝ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
์ฃผ์! ์ด ๊ธ์ ์ ๊ธ๊ณผ ์ด์ด์ง๋๋ค.
์ง๋ ์๊ฐ์ ์ฐ๋ฆฌ๋ ๋ง์ ๊ฒ์ ํ๋ค.
Travis CI์ ๊ฐ์ ๋ ํ๊ณ ,Github Repo์ ์ฐ๋๋ ํ๋ฉฐ ์ง์ .travis.yml์ ์์ฑํด CI๋ฅผ ๊ตฌ์ถ์ ๋ง๋ณด๊ธฐ๋ ํ๋ค.
์ค๋์ ์ฐ๋ฆฌ๊ฐ ์ง๋ ์๊ฐ๊ณผ ๊ฐ์ ์ผ์ ์ํํ๋ฉด travis๋ ๋ด๋ถ์ ์ผ๋ก ์ด๋ค์ผ๋ค์ด ์ผ์ด๋๋์ง ํ์ธํด๋ณด์.
์ฐ์ Travis CI์ ๋ํด์ ๋จผ์ ์์๋ณด์.
Travis CI
ํธ๋๋น์ค๋ ์ธํฐ๋ท ๊ธฐ๋ฐ์ ์ง์ ํตํฉ ์๋น์ค CI ์.
Travis CI๋ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ๊ธฐ๋ ํ๊ณ , ๊ธฐ์ ์ฉ ์๋น์ค๋ ์ ๋ฃ๋ก ์ ๊ณตํ๊ธฐ๋ ํจ.
ํ์ง๋ง ๊ฐ์ธ์ ์ผ๋ก CI ๋๊ตฌ๋ก์จ ๋ฌด๋ฃ๋ก ์ ๊ณต๋๋ CI๋ ์ถฉ๋ถํ ์ข๋ค๊ณ ๋ด.
CI๊ฐ ํ๋ ์ผ ๋น๋, ํ ์คํ , ๋ฐฐํฌ
- ๋น๋๋ฅผ ์คํํ๋ฉด ํธ๋๋น์ค๋ Github ์ ์ฅ์๋ฅผ ์๋ก์ด ํ๊ฒฝ์ผ๋ก ๋ณต์
- ํ ์คํ (๋ง์ฝ ์คํจํ๋ฉด ๋น๋ ์คํจ)
- ์น์๋ฒ๋ ์ปจํ ์ด๋์ ์ฝ๋๋ฅผ ๋ฐฐํฌ.
- ์๋ฆผ ์ค์ ๋ฑ ์ฌ๋ฌ ์์ ์ผ๋ก ์ถ๊ฐ ์ ๊ณต
์์ ๊ฐ์ ์ผ์ Travis CI ๋์ ์ํํ๋๋ฐ, ์ง๋ ์๊ฐ์ ์ฐ๋ฆฌ๋ ์ด ๊ณผ์ ์ ํตํด์ ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ์์๋ณด์๋ค.
์ด ๊ณผ์ ์ Build Flow๋ผ๊ณ ํ๋๋ฐ,
Build Flow
- Push github
- ์ฐ๊ฒฐ๋ Travis๋ก Github์ Trigger
- Travis์ Github Clone
- Build Job ์ํ.
- ์ ํ์ ์ผ๋ก AWS๋ Heroku์ ๋ฐฐํฌ
- ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ผ์ด๋ ์ฌ๋์ผ๋ก ์ ๋ฌ.
Push github
์ฌ์ฉ์๊ฐ Travis์ Github๋ฅผ ์ํธ ์ฐ๊ฒฐ์์ผ์ฃผ๋ฉด, Travis๋ Github์ ์๋ .travis.yml
์ ์ ์๋์ด ์๋ ๋ธ๋์น๋ฅผ ํ์ธํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์์ Push ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๋ค.
์ฐ๊ฒฐ๋ Travis๋ก Github์ Trigger
์ฌ์ค ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๋ค๋ ๊ฒ์ Github๊ฐ ํด๋น ๋ธ๋์น์ ํํ๋ฅผ ๊ฐ์ํ๊ณ Travis๋ก Trigger๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด๋ค.
Travis์ Github Clone
Travis๋ Github์ ์๊ฒฉ ์ ์ฅ์๋ฅผ ๋ด๋ถ๋ก Cloneํ๋ค.
Build Job ์ํ.
Build Job์ ์ํํ๋ค.
Build Job์ด๋ผ๊ณ ํ๋ฉด, .travis.yml
ํ์ผ์ ์ ์๋ Travis์ ์์ปค ๋น๋๋ฅผ ์ํํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
์๋์์ ์ข ๋ ์์ธํ ์์๋ณผ ๊ฒ์ด๋ค.
์ ํ์ ์ผ๋ก AWS๋ Heroku์ ๋ฐฐํฌ
์ ํ์ ์ผ๋ก AWS๋ Heroku์ ๋ฐฐํฌํ๋ค.
๋ณดํต์ AWS์ CodeDeploy์ ๋ฐฐํฌ๋ฅผ ์งํํ๋๋ฐ, ์์ธํ ์ฌ์ฉ์ AWS ์นดํ
๊ณ ๋ฆฌ์ CodeDeploy ์ธ์
์ ๋ณด๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๋์ถฉ ์ ๊น ๋ณด์ฌ์ฃผ์๋ฉด ๋ค์๊ณผ ๊ฐ์ Flow๋ก ์งํ๋๋ค.
1. travis๊ฐ S3์ ์ ์
๋ก๋
2. travis๊ฐ CodeDeployํํ
๋ช
๋ น์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ ๋ฌํด์ฃผ๋ฉด์ CodeDeploy๊ฐ ๋ฐฐํฌ ์๋
3. CodeDeploy๋ traivsํํ
์จ ๋ช
๋ น์ด ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด์ S3๋ก ํ์ผ์ ๊ฐ์ ธ์จ ๋ค ๋ฐฐํฌ ์์
์์
4. CodeDeploy๋ AWS EC2๋ ์ฐ๋ ๊ฐ๋ฅํ๋ฐ, CodeDeploy๋ S3ํํ
๋ฐ์ ํ์ผ์ ํด๋น ์ธ์คํด์ค์ ๋ฃ๊ณ EC2๋ด๋ถ์ ์๋ ๋ฐฐํฌ ์คํฌ๋ฆฝํธ ์คํ
5. CodeDeploy๊ฐ EC2 ๋ด๋ถ์ ์ ์๋ ๋ฐฐํฌ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด์ EC2 ๋ด๋ถ์ ์ผ๋ก ๋ฐฐํฌ ์งํ.
6. EC2 ๋ด๋ถ ์ ์๋ ๋ฐฐํฌ ์คํฌ๋ฆฝํธ๋ ๋ฌด์ค๋จ ๋ฐฐํฌ ๊ฐ๋ฅํ๊ฒ ์คํฌ๋ฆฝํธ ์์ฑ๋จ.
๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ผ์ด๋ ์ฌ๋์ผ๋ก ์ ๋ฌ.
๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ผ์ด๋ ์ฌ๋์ผ๋ก ์ ๋ฌํ ์ ์๋๋ฐ, ์ด ๊ณผ์ ์ด ๋ฐ๋ก
.travis.yml
์ ์๋
notifications: # ์ฑ๊ณต ์คํจ ์ฌ๋ถ ์๋ฆผ
email:
recipients:
- xxx@xxx.com
์ ์ค์ ๋ ์ ๋ณด๋ก ์ด ๊ณผ์ ์ ์ํํ๋ค.
Pull Request Flow
์ด์ ๋น์ทํ ๋งฅ๋ฝ์ผ๋ก Pull Request Flow๋ ์กด์ฌํ๋ค.
ํ์ง๋ง ์ด๋ฒ์ ์ด์ผ๊ธฐํ ๋ด์ฉ๊ณผ๋ ์กฐ๊ธ ๊ฑฐ๋ฆฌ๊ฐ ์๊ธฐ ๋๋ฌธ์, ๋์ถฉ ๋งฅ๋ฝ์ ์ด์ผ๊ธฐํด์ฃผ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์คํ ์์ค์ Maintainer๋ Contributor๊ฐ PR์ ๋ณด๋ธ ์ฝ๋๋ฅผ ์ง์ ๊ฒ์ฆํ์ง ์์๋ Travis๊ฐ ๋์ ๋น๋๋ฅผ ์ํํด์ฃผ๋ ๊ณผ์ ๋ ์ ๊ณตํ๋ค.
์ด๋ ๋ค์์ ์์๋ณด๋๋ก ํ์.
Travis๋ Build Job์ ๋ค์๊ณผ ๊ฐ์ ์์ปค ๋น๋๋ฅผ ์ํํ๋ค.
Travis.yml์์ Travis CI ์์ปค์ ๋น๋ ์ํ ๊ณผ์
- ์ธ์ด ๋ฐํ์ ๋ณ๊ฒฝ
- Github ์์ ํด๋ก
- before_install ์คํฌ๋ฆฝํธ ์คํ
- ํด๋ก ๋ฐ์ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ๊ณ ์์กด์ฑ ์ค์น ๋ช ๋ น์ด ์คํ
- after_install ์คํฌ๋ฆฝํธ ์คํ
- before_script ์คํฌ๋ฆฝํธ ์คํ
- test script ๋ช ๋ น์ด ์คํ (์ฑ๊ณตํ๋ฉด 0 ๋ฆฌํด ์๋๋ฉด ๋ชจ๋ ์คํจ)
- after_script ์คํฌ๋ฆฝํธ ์คํ(์ต์ ๋)
์ด๋ ๊ฒ ์ฐ๋ฆฌ์ ๋น๋๊ฐ Continuouse Integration์ด ์ํ๋๋ค.
ํ์ง๋ง ์ง๋ ์๊ฐ์๋ ๋ง ํ๋ฏ, Travis CI๋ CI ๋๊ตฌ์ด์ง ๋ฐฐํฌ์ ๊ด๋ จ๋ ์์ ์ ์ํํ๊ธฐ ์ํด์ ๋ค๋ฅธ ๋๊ตฌ๊ฐ ํ์ํ๋ค.