Day 17
Travis CI ๋ฐฐํฌ ์๋ํ
CI, CD ํ๊ฒฝ์ ๊ตฌ์ถํ๋ฉด ๊ฐ๋ฐ์๊ฐ ์ง์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํจ์ผ๋ก์จ ๋ฐ์ํ๋ ๋ถํธ์ ๊ฐ์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํจ
CI(Continuous Integration - ์ง์์ ํตํฉ) : ์ฝ๋ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ๋ VCS ์์คํ (Git, SVN ๋ฑ)์ PUSH ๋๋ฉด ์๋์ผ๋ก ํ ์คํธ์ ๋น๋๊ฐ ์ํ๋์ด ์์ ์ ์ธ ๋ฐฐํฌ ํ์ผ์ ๋ง๋๋ ๊ณผ์
CD(Continuous Deployment - ์ง์์ ์ธ ๋ฐฐํฌ) : CI์ ๋น๋ ๊ฒฐ๊ณผ๋ฅผ ์๋์ผ๋ก ์ด์ ์๋ฒ์ ๋ฌด์ค๋จ ๋ฐฐํฌ๊น์ง ์งํ๋๋ ๊ณผ์
ํ๋์ ์น ์๋น์ค ๊ฐ๋ฐ์์๋ ํ๋์ ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํจ๊ป ๊ฐ๋ฐ์ ์งํ
โ ๊ฐ๋ฐ์ ๊ฐ์๊ฐ ๊ฐ๋ฐํ ์ฝ๋๋ฅผ ํฉ์ณ์ผ ํ ๋๋ง๋ค ํฐ์ผ์ด์๋ค.
์ด๋ฅผ CI๊ฐ ๊ฐ๋ฐ๋จ์ ๋ฐ๋ผ์ ๊ฐ๋ฐ์ ๊ฐ์๊ฐ ์๊ฒฉ ์ ์ฅ์๋ก ํธ์๊ฐ ๋ ๋๋ง๋ค ์ฝ๋๋ฅผ ๋ณํฉํ๊ณ , ํ ์คํธ ์ฝ๋์ ๋น๋๋ฅผ ์ํํ๋ฉด์ ์๋์ผ๋ก ์ฝ๋๊ฐ ํตํฉ๋์ด ์๋์ผ๋ก ์ฝ๋๋ฅผ ํตํฉํ ํ์๊ฐ ์์ด์ง
CD ๋ํ ๋ง์ฐฌ๊ฐ์ง. 1,2๊ฐ์ ์๋ฒ์ ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ๋ฐฐํฌ๋ฅผ ํ ์๋ ์์ง๋ง ์๋ฒ์ ์๊ฐ ๋ง์์ง๊ณ ๊ธํ ๊ฒฝ์ฐ์ใด ํ๋ค๊ธฐ ๋๋ฌธ์ ์ด ๋ํ ์๋ํ๋ฅผ ์์ผ๋ฒ๋ฆผ
CI ๋๊ตฌ๋ฅผ ๋์ ํ๋ค๊ณ ํด์ CI๋ฅผ ํ๊ณ ์๋๊ฒ์ ์๋๋ค
CI์ 4๊ฐ์ง ๊ท์น
๋ชจ๋ ์์ค ์ฝ๋๊ฐ ์ด์์๊ณ (์คํ๋๊ณ ) ๋๊ตฌ๋ ํ์ฌ์ ์์ค์ ์ ๊ทผํ ์ ์๋ ๋จ์ผ ์ง์ ์ ์ ์งํ ๊ฒ
๋น๋ ํ๋ก์ธ์ค๋ฅผ ์๋ํํด์ ๋๊ตฌ๋ ์์ค๋ก๋ถํฐ ์์คํ ์ ๋น๋ํ๋ ๋จ์ผ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ ๊ฒ
ํ ์คํ ์ ์๋ํํด์ ๋จ์ผ ๋ช ๋ น์ด๋ก ์ธ์ ๋ ์ง ์์คํ ์ ๋ํ ๊ฑด์ ํ ํ ์คํธ ์ํธ๋ฅผ ์คํํ ์ ์๊ฒ ํ ๊ฒ
๋๊ตฌ๋ ํ์ฌ ์คํ ํ์ผ์ ์ป์ผ๋ฉด ์ง๊ธ๊น์ง ๊ฐ์ฅ ์์ ํ ์คํ ํ์ผ์ ์ป์๋ค๋ ํ์ ์ ํ๊ฒ ํ ๊ฒ
โ์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ํ ์คํ ์๋ํ์ด๋ค. ์ง์์ ์ผ๋ก ํตํฉํ๊ธฐ ์ํด์๋ ๋ฌด์๋ณด๋ค ์ด ํ๋ก์ ํธ๊ฐ ์์ ํ ์ํ์์ ๋ณด์ฅํ๊ธฐ ์ํด์ ํ ์คํธ ์ฝ๋๊ฐ ์ ํํ๊ฒ ๊ตฌํ๋์ด์์ด์ผ ํ๋ค.
Travis CI
travis-ci.org
๋ก ๋ค์ด๊ฐ์ ๊ณ์ ๋ช โ setting ๋ค์ด๊ฐ๋ฉด github์์ด๋์ ์ฐ๋๋์ด์๊ธฐ ๋๋ฌธ์ ๋ด repository๋ค์ด ๋จ๊ณ ๊ฑฐ๊ธฐ์ ๋ด๊ฐ ์ฌ์ฉํ repository๋ฅผ ์ฌ์ฉํ๋๋ก ์ค๋ฅธ์ชฝ์ ์ํ๋ฐ๋ฅผ ํ์ฑํ
์ด๋ ๊ฒ๊น์ง๋งํ๋ฉด ์นํ์ด์ง์์ ๋ค๋ค์ผํ ๋ถ๋ถ์ ๋๋ฌ๊ณ ์์ธํ ์ค์ ์ ํ๋ก์ ํธ์ ymlํ์ผ๋ก ์งํ
travis CI ์ค์ ์ ํ๋ก์ ํธ์ ์กด์ฌํ๋ .travis.yml ํ์ผ๋ก ํ๋ค
.yml์ด๋?
YAML(์ผ๋ฏ)์ด๋ผ๊ณ ํ๋ฉฐ, ์ด ํ์ผ ํ์ฅ์๋ JSON์์ ๊ดํธ๋ฅผ ์ ๊ฑฐํ ๊ฒ
๊ธฐ๊ณ์์ ํ์ฑํ๊ธฐ ์ฝ๊ฒ, ์ฌ๋์ด ๋ค๋ฃจ๊ธฐ ์ฝ๊ฒ
build.gradle๊ณผ ๊ฐ์ ์์น์์ .travis.yml์ ์์ฑํ๊ณ ์ฝ๋๋ฅผ ์ถ๊ฐ
branches
Travis CI๋ฅผ ์ด๋ ๋ธ๋์น๊ฐ ํธ์๋ ๋ ์ํํ ์ง ์ง์
ํ์ฌ ์ต์ ์ ์ค์ง master ๋ธ๋์น์ push ๋ ๋๋ง ์ํ
cache
๊ทธ๋ ์ด๋ค์ ํตํด ์์กด์ฑ์ ๋ฐ๊ฒ ๋๋ค๋ฉด ์ด๋ฅผ ํด๋น ๋๋ ํ ๋ฆฌ์ ์บ์ํ์ฌ, ๊ฐ์ ์์กด์ฑ์ ๋ค์ ๋ฐฐํฌ ๋๋ถํฐ ๋ค์ ๋ฐ์ง ์๋๋ก ์ค์
script
master ๋ธ๋์น์ ํธ์๋์์ ๋ ์ํํ๋ ๋ช ๋ น์ด
์ฌ๊ธฐ์๋ ํ๋ก์ ํธ ๋ด๋ถ์ ๋ gradlew์ ํตํด clean & build์ ์ํ
notifications
Travis CI ์คํ ์๋ฃ์ ์๋์ผ๋ก ์๋ฆผ์ด ๊ฐ๋๋ก ์ค์
๋ผ๋ ์๋ฌ๊ฐ ๋์ travis์์๋ ์๋ฌ๊ฐ๋ฌ๋ค.. ์ด๊ฑด ๋ค์ ๋ง๋ค๋๊ฐํด์ผํ ๋ฏ?
S3๋?
AWS์์ ์ ๊ณตํ๋ ์ผ์ข
์ ํ์ผ ์๋ฒ
์ด๋ฏธ์ง ํ์ผ์ ๋น๋กฏํ ์ ์ ํ์ผ๋ค์ ๊ด๋ฆฌํ๊ฑฐ๋ ์ง๊ธ ์งํํ๋ ๊ฒ ์ฒ๋ผ ๋ฐฐํฌ ํ์ผ๋ค์ ๊ด๋ฆฌํ๋ ๋ฑ์ ๊ธฐ๋ฅ์ ์ง์. - ์ด๋ฏธ์ง ์ ๋ก๋๋ฅผ ๊ตฌํํ ๋ S3์ ์ด์ฉํด์ ๊ตฌํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
S3 + AWS + Travis CI ๋ฅผ ์ฐ๋ํ๊ฒ ๋ ๊ทธ๋ฆผ
Travis CI ์ S3์ ์ฐ๋ : ์ค์ ๋ฐฐํฌ๋ AWS CodeDeploy๋ผ๋ ์๋น์ค๋ฅผ ์ด์ฉํ์ง๋ง S3์ ์ฐ๋์ด ๋จผ์ ๋ค ์ด์ ๋ Jar ํ์ผ์ ์ ๋ฌํ๊ธฐ ์ํด์์ด๋ค.
CodeDeploy๋ ์ ์ฅ๊ธฐ๋ฅ์ด ์๋ค. ๊ทธ๋์ Travis CI๊ฐ ๋น๋ํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ฐ์์ CodeDeploy๊ฐ ๊ฐ์ ธ๊ฐ ์ ์๋๋ก ๋ณด๊ดํ ์ ์๋ ๊ณต๊ฐ์ด ํ์ํ๋ฐ ์ด๊ฒ์ S3์ ์ด์ฉ
CodeDeploy๊ฐ ๋น๋๋ ํ๊ณ ๋ฐฐํฌ๋ํ ์๋ ์์. CodeDeploy์์๋ ๊นํ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ์ ์ง์ํ๊ธฐ ๋๋ฌธ. ํ์ง๋ง ์ด๋ ๊ฒ ํ ๋ ๋น๋ ์์ด ๋ฐฐํฌ๋ง ํ์ํ ๋ ๋์ํ๊ธฐ ์ด๋ ค์
๋น๋์ ๋ฐฐํฌ๊ฐ ๋ถ๋ฆฌ๋์ด ์์ผ๋ฉด ์์ ์ ๋น๋๋์ด ๋ง๋ค์ด์ง Jar์ ์ฌ์ฉํ๋ฉด ๋์ง๋ง, CodeDeploy๊ฐ ๋ชจ๋ ๊ฒ์ ํ๊ฒ ๋ ๋ ํญ์ ๋น๋๋ฅผ ํ๊ฒ ๋๋ ํ์ฅ์ฑ์ด ๋ง์ด ๋จ์ด์ง ๋ฐ๋ผ์ ๋น๋์ ๋ฐฐํฌ๋ ๋ถ๋ฆฌํด์ ์งํํ๋ ๊ฒ์ด ์ข์
Travis CI์ AWS S3์ฐ๋
AWS Key ๋ฐ๊ธ
์ผ๋ฐ์ ์ผ๋ก AWS ์๋น์ค์ ์ธ๋ถ ์๋น์ค๊ฐ ์ ๊ทผํ ์ ์๋ค. ๋ฐ๋ผ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ถํ์ ๊ฐ์ง key๋ฅผ ์์ฑํด์ ์ฌ์ฉํด์ผํจ. AWS์์๋ ์ด๋ฌํ ์ธ์ฆ๊ด ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์๋น์ค๋ก IAM(Identity and Access Management)
IAM์ AWS์์ ์ ๊ณตํ๋ ์๋น์ค์ ์ ๊ทผ ๋ฐฉ์๊ณผ ๊ถํ์ ๊ด๋ฆฌํ๋ค. IAM์ ํตํด์ Travis CI ๊ฐ AWS์ S3์ CodeDeploy์ ์ ๊ทผํ ์ ์๋๋ก ํด์ผํจ
IAM์ ๊ฒ์ํด์ ๋ค์ด๊ฐ์ ์ฌ์ฉ์๋ฅผ ํ๋ ์ถ๊ฐ
์ด๋ฆ์ ์ค์ ํ๊ณ , ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์ก์ธ์ค ์นธ์ ์ฒดํฌํด์ฃผ๊ณ ๋ค์
๊ธฐ์กด ์ ์ฑ ์ง์ ์ฐ๊ฒฐ์ ๋๋ฅด๊ณ
AWSCodeDeployFullAccess
AmazonS3FullAccess
์ ์ถ๊ฐํด์ฃผ๊ณ ๋ค์
(์ค์ ์๋น์ค ํ์ฌ์์๋ ๊ถํ๋ S3์ CodeDeploy๋ฅผ ๋ถ๋ฆฌํด์ ๊ด๋ฆฌํ๊ธฐ๋ ํฉ๋๋ค๋ง ์ฌ๊ธฐ์๋ ๊ฐ๋จํ๊ฒ ๋์ ํฉ์ณ์ ๊ด๋ฆฌํ๊ฒ ์ต๋๋ค. 2๊ฐ์ ๊ถํ์ด ์ค์ ๋์์ผ๋ฉด ๋ค์์ผ๋ก ๋์ด๊ฐ)
ํค-๊ฐํํ๋ฅผ ์ถ๊ฐํด์ค์ผํ๊ธฐ ๋๋ฌธ
ํค : name
๊ฐ : freelec-travis-deploy
๋ฉ๋ชจ ์ฑ์ ์ก์ธ์คํค๋ ๋น๋ฐ์ก์ธ์คํค๋ฅผ ๊ธฐ๋กํด๋
์ด์ ๋ Travis CI์ ์์ธ์คํค์ ๋น๋ฐ์์ธ์คํค๋ฅผ ์ฌ๊ธฐ์ ๋ฑ๋กํ๊ณ ๋ฑ๋ก๋ ๊ฐ๋ค์ .travis.yml์ $AWS_ACCESS_KEY, $AWS_SECRET_KEY๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅํ๋ค
S3 ๋ฒํท ์์ฑ
AWS์ S3 ์๋น์ค๋ ์ผ์ข ์ ํ์ผ ์๋ฒ์ด๋ค. ์์ํ๊ฒ ํ์ผ๋ค์ ์ ์ฅํ๊ณ ์ ๊ทผ ๊ถํ์ ๊ด๋ฆฌ, ๊ฒ์ ๋ฑ์ ์ง์ํ๋ ํ์ผ ์๋ฒ์ ์ญํ ์ ํ๋ค.
S3๋ ๋ณดํต ๊ฒ์๊ธ์ ์ธ ๋ ๋์ค๋ ์ฒจ๋ถํ์ผ ๋ฑ๋ก์ ๊ตฌํํ ๋ ๋ง์ด ์ด์ฉํจ. ํ์ผ ์๋ฒ์ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ธ๋ฐ, Travis CI์์ ์์ฑ๋ Build ํ์ผ์ ์ ์ฅํ๋๋ก ๊ตฌ์ฑํ ๊ฒ์ด๋ค. S3์์ ์ ์ฅ๋ Buildํ์ผ์ ์ดํ AWS์ CodeDeploy์์ ๋ฐฐํฌํ ํ์ผ๋ก ๊ฐ์ ธ๊ฐ๋๋ก ๊ตฌ์ฑํ ์์
์ด์ ๋ ๋ฒํท์ ์์ฑํ๋๋ฐ ์ด ๋ฒํท์ ๋ฐฐํฌํ Zip ํ์ผ์ด ๋ชจ์ฌ์๋ ์ฅ์์์ ์๋ฏธํ๋๋ก ์ง๋ ๊ฒ์ ์ถ์ฒ
freelec-springboot-build
๋ผ๋ ์ด๋ฆ, ๋ชจ๋ ํผ๋ธ๋ฆญ ์ก์ธ์ค ์ฐจ๋จ์ด ๊ธฐ๋ณธ์ผ๋ก ์ฒดํฌ๋์ด์๋๋ฐ ์ ์ฒดํฌ๋์ด์๋์ง ํ์ธ
ํ์ฌ ํ๋ก์ ํธ๋ ์ด๋ฏธ ๊นํ์ ์คํ์์ค๋ก ํ๋ ค์์ผ๋ ๋ฌธ์ ํ์์ง๋ง, ์ค์ ์๋น์ค์์ ํ ๋๋ Jar ํ์ผ์ด ํผ๋ธ๋ฆญ์ผ ๊ฒฝ์ฐ, ๋๊ตฌ๋ ๋ด๋ ค๋ฐ์ ์ ์์ด ์ฝ๋๋ ์ค์ ๊ฐ, ์ฃผ์ ํค ๊ฐ๋ค์ด ๋ค ํ์ทจ ๋นํ ์ ์์
ํผ๋ธ๋ฆญ์ด ์๋๋๋ผ๋ ์ฐ๋ฆฌ๋ IAM ์ฌ์ฉ์๋ก ๋ฐ๊ธ๋ฐ์ ํค๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋๊น ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋์ ๋ชจ๋ ์ก์ธ์ค๋ฅผ ์ฐจ๋จํ๋ ์ค์ ์ ์ฒดํฌ
.travis.yml
before_deploy
deploy ๋ช ๋ น์ด๊ฐ ์คํ๋๊ธฐ ์ ์ ์ํ
CodeDeploy๋ Jar ํ์ผ์ ์ธ์ํ์ง ๋ชปํ๋ฏ๋ก Jar+๊ธฐํ ์ค์ ํ์ผ๋ค์ ๋ชจ์ ์์ถ
zip -r freelec-springboot2-webservice
ํ์ฌ ์์น์ ๋ชจ๋ ํ์ผ์ freelec-springboot2-webservice ์ด๋ฆ์ผ๋ก ์์ถ
๋ช ๋ น์ด์ ๋ง์ง๋ง ์์น๋ ๋ณธ์ธ์ ํ๋ก์ ํธ ์ด๋ฆ์ด์ด์ผ ํจ
mkdir -p deploy
deploy๋ผ๋ ๋๋ ํ ๋ฆฌ๋ฅผ Travis CI๊ฐ ์คํ์ค์ธ ์์น๊ฐ ์์ฑ
mv freelec-springboot2-webservice.zip delpoy/freelec-springboot2-webservice.zip
freelec-springboot2-webservice.zip ํ์ผ์ deploy/freelec-springboot2-webservice.zip์ผ๋ก ์ด๋
deploy
S3๋ก ํ์ผ ์ ๋ก๋ ํน์ CodeDeploy๋ก ๋ฐฐํฌ ๋ฑ ์ธ๋ถ ์๋น์ค์ ์ฐ๋๋ ํ์๋ค์ ์ ์ธ
local_dir: deploy
์์์ ์์ฑํ deploy ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์
ํด๋น ์์น์ ํ์ผ๋ค๋ง S3๋ก ์ ์ก
์ด๋ ๊ฒ .travis.yml์ ์์ ํด์ฃผ๊ณ ๋์ ๊นํ์ ์๋์ผ๋ก ํธ์ฌํ๋ฉด ์๋์ผ๋ก EC2์๋ ๋ค์ด๊ฐ๊ฒ ๋๊ณ ์๋์ผ๋ก ๋ฒํท์ ์ ๋ก๋๊ฐ ๋์ด์๋ค.
Last updated
Was this helpful?