๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ› Others.../- infra [linux, aws, docker, k8s]

[Travis CI] Travis ๋ง›๋ณด๊ธฐ (2) Travis์™€ Github๋ฅผ ์—ฐ๋™ํ•˜๊ณ  CI ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ?

by Wonit 2020. 12. 6.

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

  1. Travis-CI ์— ๊ฐ€์ž…ํ•˜๊ณ  Github Repo์™€ ์—ฐ๋™ํ•˜๊ณ  CI๋ฅผ ๋ง›๋ณด์ž.

  2. Travis์™€ Github๋ฅผ ์—ฐ๋™ํ•˜๊ณ  CI ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋ฉด ๋‘˜ ์‚ฌ์ด์— ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ?

    ์„œ๋กœ ๋‚ด์šฉ์„ ๋ณด์™„ํ•˜๊ณ  ์žˆ๋Š” ๊ด€๊ณ„์ด๋ฏ€๋กœ ํ•œ ๋ฒˆ ํ•ด๋‹น ํฌ์ŠคํŒ…์œผ๋กœ ๊ฐ€์„œ ๊ฐ€๋ฒผ์šด ๋งˆ์Œ์œผ๋กœ ์ฝ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ฃผ์˜! ์ด ๊ธ€์€ ์ „ ๊ธ€๊ณผ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

์ง€๋‚œ ์‹œ๊ฐ„์— ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ๊ฒƒ์„ ํ–ˆ๋‹ค.

 

Travis CI์— ๊ฐ€์ž…๋„ ํ•˜๊ณ  ,Github Repo์™€ ์—ฐ๋™๋„ ํ•˜๋ฉฐ ์ง์ ‘ .travis.yml์„ ์ž‘์„ฑํ•ด CI๋ฅผ ๊ตฌ์ถ•์„ ๋ง›๋ณด๊ธฐ๋„ ํ–ˆ๋‹ค.

 

์˜ค๋Š˜์€ ์šฐ๋ฆฌ๊ฐ€ ์ง€๋‚œ ์‹œ๊ฐ„๊ณผ ๊ฐ™์€ ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด travis๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ค์ผ๋“ค์ด ์ผ์–ด๋‚˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

 

์šฐ์„  Travis CI์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์•Œ์•„๋ณด์ž.

Travis CI

ํŠธ๋ž˜๋น„์Šค๋Š” ์ธํ„ฐ๋„ท ๊ธฐ๋ฐ˜์˜ ์ง€์† ํ†ตํ•ฉ ์„œ๋น„์Šค CI ์ž„.

 

Travis CI๋Š” ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•˜๊ณ , ๊ธฐ์—…์šฉ ์„œ๋น„์Šค๋Š” ์œ ๋ฃŒ๋กœ ์ œ๊ณตํ•˜๊ธฐ๋„ ํ•จ.


ํ•˜์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ CI ๋„๊ตฌ๋กœ์จ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณต๋˜๋Š” CI๋„ ์ถฉ๋ถ„ํžˆ ์ข‹๋‹ค๊ณ  ๋ด„.

CI๊ฐ€ ํ•˜๋Š” ์ผ ๋นŒ๋“œ, ํ…Œ์ŠคํŒ…, ๋ฐฐํฌ

  1. ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํŠธ๋ž˜๋น„์Šค๋Š” Github ์ €์žฅ์†Œ๋ฅผ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์œผ๋กœ ๋ณต์ œ
  2. ํ…Œ์ŠคํŒ… (๋งŒ์•ฝ ์‹คํŒจํ•˜๋ฉด ๋นŒ๋“œ ์‹คํŒจ)
  3. ์›น์„œ๋ฒ„๋‚˜ ์ปจํ…Œ์ด๋„ˆ์— ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌ.
  4. ์•Œ๋ฆผ ์„ค์ •๋“ฑ ์—ฌ๋Ÿฌ ์ž‘์—…์œผ๋กœ ์ถ”๊ฐ€ ์ œ๊ณต

์œ„์™€ ๊ฐ™์€ ์ผ์„ Travis CI ๋Œ€์‹  ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, ์ง€๋‚œ ์‹œ๊ฐ„์— ์šฐ๋ฆฌ๋Š” ์ด ๊ณผ์ •์„ ํ†ตํ•ด์„œ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ์•„๋ณด์•˜๋‹ค.


์ด ๊ณผ์ •์„ Build Flow๋ผ๊ณ  ํ•˜๋Š”๋ฐ,

Build Flow

  1. Push github
  2. ์—ฐ๊ฒฐ๋œ Travis๋กœ Github์˜ Trigger
  3. Travis์˜ Github Clone
  4. Build Job ์ˆ˜ํ–‰.
  5. ์„ ํƒ์ ์œผ๋กœ AWS๋‚˜ Heroku์— ๋ฐฐํฌ
  6. ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”์ผ์ด๋‚˜ ์Šฌ๋ž™์œผ๋กœ ์ „๋‹ฌ.

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 ์›Œ์ปค์˜ ๋นŒ๋“œ ์ˆ˜ํ–‰ ๊ณผ์ •

  1. ์–ธ์–ด ๋Ÿฐํƒ€์ž„ ๋ณ€๊ฒฝ
  2. Github ์—์„œ ํด๋ก 
  3. before_install ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
  4. ํด๋ก  ๋ฐ›์€ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜๊ณ  ์˜์กด์„ฑ ์„ค์น˜ ๋ช…๋ น์–ด ์‹คํ–‰
  5. after_install ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
  6. before_script ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
  7. test script ๋ช…๋ น์–ด ์‹คํ–‰ (์„ฑ๊ณตํ•˜๋ฉด 0 ๋ฆฌํ„ด ์•„๋‹ˆ๋ฉด ๋ชจ๋‘ ์‹คํŒจ)
  8. after_script ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰(์˜ต์…”๋„)

์ด๋ ‡๊ฒŒ ์šฐ๋ฆฌ์˜ ๋นŒ๋“œ๊ฐ€ Continuouse Integration์ด ์ˆ˜ํ–‰๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ง€๋‚œ ์‹œ๊ฐ„์—๋„ ๋ง ํ–ˆ๋“ฏ,  Travis CI๋Š” CI ๋„๊ตฌ์ด์ง€ ๋ฐฐํฌ์™€ ๊ด€๋ จ๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

๋Œ“๊ธ€