
Travis CI๋ย Github์์ ์งํ๋๋ ์คํ์์ค ํ๋ก์ ํธ๋ฅผ ์ํ ์ง์์ ์ธ ํตํฉ(Continuous Integration) ์๋น์ค์ด๋ค.
2011๋
์ ์ค๋ฆฝ๋์ด 2012๋
์ ๊ธ์ฑ์ฅํ์์ผ๋ฉฐ Ruby์ธ์ด๋ง ์ง์ํ์์ง๋ง ํ์ฌ ๋๋ถ๋ถ์ ๊ฐ๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๊ณ ์๋ค.
Travis CI๋ฅผ ์ด์ฉํ๋ฉด Github repository์ ์๋ ํ๋ก์ ํธ๋ฅผ ํน์ ์ด๋ฒคํธ์ ๋ฐ๋ผ ์๋์ผ๋กย ํ ์คํธ, ๋น๋ํ๊ฑฐ๋ย ๋ฐฐํฌํ ์ ์๋ค. Private repository๋ ์ ๋ฃ๋ก ์ผ์ ๊ธ์ก์ ์ง๋ถํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
๋ก์ปฌ Git โ Github โ Travis Cl โ AWS
๊นํ์ ์์ค๋ฅผ ์ฌ๋ ธ์ ๋ Travis CI์์ ๊ทธ ์์ค๋ฅผ ๊ฐ์ ธ๊ฐ์ผ ํ๊ธฐ์ ๊นํ๊ณผ Travis CI๊ฐ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค.
Travis Cl ์ฌ์ดํธ๋ก ์ด๋ : https://travis-ci.org/
Travis CI์ ๋ก๊ทธ์ธ ํ ๋ ๊นํ ์์ด๋๋ก ๋ก๊ทธ์ธ
Settings ํ์ด์ง๋ก ์ด๋ ํ ๊นํ์ ์ฌ๋ฆฐ ๋์ปค ๋ ํ์งํ ๋ฆฌ ์ฐพ๊ธฐ
Dashboard๋ก ์ด๋ํ๋ฉด ๋จ๋ ํ๋ฉด

Travis CI๋ฅผ ์ด์ฉํด์ ํ ์คํธ ์ฝ๋๋ฅผ ์คํํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ๊น์ง ํด์ฃผ์ด์ผ ํ๋๋ฐ ๊ทธ๋ฌ๊ธฐ ์ํด์๋ travis.ymlํ์ผ์ ์์ฑํด ์ฃผ์ด์ผ ํ๋ค.


sudo : ๊ด๋ฆฌ์ ๊ถํ ๊ฐ๊ธฐlanguage : ์ธ์ด(ํ๋ซํผ)์ ์ ํservices : ๋์ปค ํ๊ฒฝ ๊ตฌ์ฑbefore_install : ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๋ ํ๊ฒฝ ๊ตฌ์ฑscript : ์คํํ ์คํฌ๋ฆฝํธ(ํ
์คํธ ์คํ)CI= true ํด์ค์ผ ์๋ฌ๊ฐ ์๋จcoverage : ํ
์คํธ ํ ๊ฒ์ ๋ ์์ธํ๊ฒ ๋ณด์ฌ์ค.after_success : ํ
์คํธ ์ฑ๊ณต ํ ํ ์ผ

์๋ job config๋ฅผ ์ญ ํ์ธํด๋ณด๋ฉด ๋ด๊ฐ ์ค์ ํ๋๋ก ์ ๋์์์ ํ์ธํ ์ ์๋ค.

AWS ์ฌ์ดํธ๋ก ๊ฐ๊ธฐ : https://aws.amazon.com/
ํ์ ๊ฐ์ ํ๊ธฐ : ์ ์ฉ ์นด๋ ๋ฑ๋ก์ ํด์ผ ํจ
AWS Dashboard๋ก ์ค๊ธฐ
Elastic BeanStalk ๊ฒ์

=> ํ ๋์ ์ปดํจํฐ๋ฅผ ์๋ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋จ.ย ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ปดํจํฐ์ OS๋ฅผ ์ค์นํ๊ณ ์น์๋น์ค๋ฅผ ์ํ ํ๋ก๊ทธ๋จ๋ค(์น์๋ฒ, DB)์ย ์ค์นํด์ ์ฌ์ฉย ํ๋ฉด ๋๋ค. 1๋์ ์ปดํจํฐ๋ฅผ ํ๋์ EC2 ์ธ์คํด์ค๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.

โ ํ๊ฒฝ์ด๊ณ ์ด ํ๊ฒฝ ์์์ ๋ง์ ๊ฒ๋ค์ ๊ด๋ฆฌํ ์ ์๋ค๊ณ ๋ณด๋ฉด ๋จ.

Create Application ๋ฒํผ ํด๋ฆญ
์ดํ๋ฆฌ์ผ์ด์ ์ด๋ฆ ์ ํ๊ธฐ
์ดํ๋ฆฌ์ผ์ด์ ํ๋ซํผ ์ ํ
Create Application ๋ฒํผ ๋๋ฌ์ ์์ฑํ๊ธฐ
์ฑ ์์ฑ์ค์ด ๋ธ
๋ค ์์ฑ ํ

ํธ๋ํฝ์ด ๋ง์ง ์์๋

ํธ๋ํฝ์ด ๋ง์ ์ง๋

ํ์ฌ๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์์ฑ ํ ์ดํ์ ์คํํ์ฌ ํ ์คํธํ๋ ๋ถ๋ถ๊น์ง travis ์ค์ ์ ํ์๋๋ฐ,
์ด์ ๋ ํ ์คํธ์ ์ฑ๊ณตํ ์์ค๋ฅผ AWS Elastic Beanstalk์ ์๋์ผ๋ก ๋ฐฐํฌํ๋ ๋ถ๋ถ์ travis ํ์ผ์ ๋ฃ์ด์ค ์ฐจ๋ก
deploy:
provider: elasticbeanstalk
region: "us-west-2"
app: "docker-react-app"
env: "Dockerreactapp-env"
bucket_name: "elasticbeanstalk-us-west-2-896153392792"
bucket_path: "docker-react-app"
on:
branch: master
provider : ์ธ๋ถ ์๋น์ค ํ์ (s3, elasticbeanstalk, firebase ๋ฑ)region : ํ์ฌ ์ฌ์ฉํ๊ณ ์๋ AWS ์ ๋ฌผ๋ฆฌ์ ์ฅ์ (์ข
๋ฅ๊ฐ ๊ต์ฅํ ๋ง์) 
app : ์์ฑํ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๋ฆenv : 
bucket_name : ํด๋น ์ผ๋์คํฑ ๋น์คํก์ ์ํ s3 ๋ฒํท ์ด๋ฆ
Travis CI-travis ์์ ๊ฐ์ง๊ณ ์๋ ํ์ผ์ ์์ถํด์ S3์ ๋ณด๋ธ๋ค. โS3
S3: ํ์ผ๋ค์ ์์ ์ ์ฅํด๋๋ ์๋น์ค์๋ผ์คํฑ ๋น์คํก์ ์์ฑํ ๋ ์๋์ ์ผ๋ก S3๊ฐ ์์ฑ ๋จ โ ์๋์ผ๋ก S3 ๋ฒ์ผ์ด ์์ฑ๋๋ ๊ฒ.
์ด ๋น์คํก ์์ travis CI์์ ํ์ผ์ ๋ณด๋ด๋ฉด ๊ทธ ํ์ผ๋ค์ ์ ์ฅํ๊ฒ ๋๋ ๊ฒ์!
bucket_path : ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๋ฆ๊ณผ ๋์ผonbranch : ์ด๋ค ๋ธ๋์น์ ํธ์ํ ๋ AWS์ ๋ฐฐํฌํ ๊ฒ์ธ์ง ์ค์ ํ์ง๋ง ์ด๋ ๊ฒ ์๋ฌด๋ฐ ์ธ์ฆ ์์ด๋ Travis CI์์ ๋ง์๋๋ก AWS์ ํ์ผ์ ์ ์กํ ์๋ ์๋ค. ๊ทธ๋์ ์ด์ ๋ Travis CI๊ฐ AWS์ ์ ๊ทผํ ์ ์๊ฒ ํด ์ฃผ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
๊นํ๋ธTravis CIAWS์ธ์ฆ์ ์ํด์๋ API Key๊ฐ ํ์.
IAM USER ์์ฑ
IAM์ ๋ฌด์์ธ๊ฐ ? (Identity and Access Management)
๐ก AWS ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ์์ ํ๊ฒ ์ ์ดํ ์ ์๋ ์น ์๋น์ค์
๋๋ค. IAM์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋๋ก ์ธ์ฆ(๋ก๊ทธ์ธ) ๋ฐ ๊ถํ ๋ถ์ฌ(๊ถํ ์์)๋ ๋์์์ ์ดํฉ๋๋ค.

Dashbord โ IAM๊ฒ์ โ ์ฌ์ฉ์ ํด๋ฆญ โ ์ฌ์ฉ์ ์ถ๊ฐํด๋ฆญ โ ์ฌ์ฉ์ ์ธ๋ถ ์ ๋ณด ์ค์ โ์ฌ์ฉ์ ๊ถํ ์ค์ โ ๊ณ์ ์์ฑ ์ฑ๊ณต
APIํค๋ฅผ Travis yml ํ์ผ์ ์ ์ด์ฃผ๊ธฐ


access_key_id: $AWS_ACCESS_KEY
secret_access_key: $AWS_SECRET_ACCESS_KEY์ด๋ ๊ฒ ํ๊ณ ๋ค์ ๋น์คํก์ผ๋ก ๊ฐ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ ๊ทธ ์ด์ ๋ ํฌํธ๋งตํ์ ์ํด์ค์ ๊ทธ๋ผ
EXPOSE 80