Configuring GitLab CI-CD with AWS EC2
Last updated
Was this helpful?
Last updated
Was this helpful?
๋ฐฐํฌ ์๋ํ๋ฅผ ํตํด ๋นํจ์จ ๋ํ์ ๊ฐ์ ํ๊ธฐ!!
์ง๋๋ฒ์ ๋ฐฐํฌํ SSAFY์์ ์ค EC2 ํ๋์ backend์ frontend server ๋ ๊ฐ๋ฅผ ์ฌ๋ฆฌ๋ ๋ฐฉ์์์, ์ฌ๋ฐฐํฌ ์ git repo pull ๋ฐ๊ณ ์ผ๋ จ์ ๋ฐฐํฌ ๋ช ๋ น์ด๋ฅผ ์ฃผ๋ฅด๋ฅต ์คํํด์ผ ํ๊ณ , ๋๋ฌด ๋นํจ์จ์ ์ด๋ผ ๋นจ๋ฆฌ ๊ณ ์น๊ณ ์ถ์๋ค.
๊ทธ๋์ CI/CD ๋ฅผ ์์๋ณด๋ ์ค, SSAFY์์ Github์ด ์๋ GitLab์ ํ์ฉํ๊ณ ์๋ ๋งํผ GitLab์ด ๋ง๋ Gitlab CI/CD๋ฅผ ํ์ฉํด์ ๋ฐฐํฌ ์๋ํ๋ฅผ ํด๋ณด๊ธฐ๋ก ํ๋ค!
References: namioto.ip.or.kr
GitLab CI/CD๋ Docker container์์์ ์๋๋๊ณ , ์ฐ๊ฒฐ๋ Kubernetes ์ ๋ฐฐํฌ๋๋ค
Project root์ gitlab-ci.yml
ํ์ผ์ด ์๋ ์ํ์์ push๊ฐ ๋ค์ด์ค๋ฉด, ํด๋น ํ์ผ์ ๋ช
์๋ Pipeline (task ๋ฌถ์)์ด ์คํ๋๋ค
Test
Unit Test
ํตํฉ Test
E2E Test
Test Coverage ์ธก์
Lint
Code quality ์ธก์
Code convention ์ ๊ฒ
Build
Build
Bundling
Dockerfile build
Container registry push
Deploy
Helm Chart
Helm Chart๋?
helm
์ Kubernetes package manager
helm chart
๋ pacakage format์ผ๋ก application์ ์ค์นํ๊ธฐ ์ํ ํ์ผ๋ค๋ก ๊ตฌ์ฑ๋จ!
KNative Functions
KNative๋?
Serverless cloud native application์ ๋ฐฐํฌ, ์คํ, ๊ด๋ฆฌํ๊ธฐ ์ํด Kubernetes์ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ๋ Open source community project
KNative App(์ปจํ ์ด๋) ๋ฐฐํฌ
Gitlab Runner๋ remote branch์ push๊ฐ ๋๋ฉด ์ค์ ๋ Stage์์ ์์ ๋ค์ ์คํํด์ค๋ค!
๊ทธ๋ฌ๊ธฐ ์ํด์๋ ์๊ฒฉ ์ ์ฅ์์ GitLab Runner
๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๋ค
root ๊ณ์ ์์ ๋ฐ๋ก ์คํํ๋ ค๋ฉด 1 ~ 2 ๋ฒ ๊ฑด๋๋ฐ๊ธฐ!
gitlab-runner
๋ผ๋ ์ด๋ฆ์ ๊ณ์ ์ ์์ฑํ๋ค
์์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ณ , 5๊ฐ์ง ์ฌํญ์ interactiveํ๊ฒ ์ ๋ ฅํด์ผ ํ๋ค
Settings > CI/CD > Runners settings > Specific Runners ์์ ์๋์ ๊ฐ์ด ๋ฑ๋ก๋ Runner๋ฅผ ํ์ธํ ์ ์๋ค
.gitlab-ci.yml
ํ์ผ ์์ฑํ๊ธฐProject root ์
.gitlab-ci.yml
ํ์ผ์ ์์ฑํ๋ค
์ด๊ฒ์ SpringBoot - React ํ๋ก์ ํธ์ ๋ฐฐํฌ ์๋ํ๋ฅผ ์ํด ๋ด๊ฐ ์์ฑํ script ์ด๋ค!!
์ด yml ํ์ผ ํ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์์ฒญ๋๊ฒ ๋ง์ ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์ด์ ๋์จ ๊ฒฐ๊ณผ์ด์ง๋ง, ์ฒ์ ์์ฑํด๋ณด๋ Gitlab CI/CD ํ์ผ์ด๊ณ , ๋ ๋์ ๋ฐฉ๋ฒ์ด ์์ ์ ์์ผ๋ฏ๋ก ์ฐธ๊ณ ๋ง ํ์! (์๋ง ์์ ๊ฒ์ด๋ค! ๊ณ์ ์์๋ณด๊ณ ์๋ค!)
๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ฉด update ํ๊ฒ ๋ค!!
ex)
deploy-to-server
Gitlab Runner๋ฅผ ๋ฑ๋ก ํ ๋ ์ง์ด์ค JOB ์ด๋ฆ
stage
์ด ๊ธ์ ์์์ ์ค๋ช ํ ๋ฐ์ ๊ฐ์ด Gitlab์ Stage ๋ณ๋ก ํน์ ์์ ๋ค์ ์ํํ ์ ์๋ ๊ทธ๋ฃน์ด ์๋๋ฐ, ๊ทธ ์ค deploy stage ๋ผ๋ ๊ฒ
only
master branch์ event๊ฐ ๋ฐ์ ํ์ ๋์๋ง pipeline ์ด ํ์ฑํ ๋๊ฒ ์ค์
before_script
๋ง๊ทธ๋๋ก runner์ ์ํด ์คํ๋ shell script ์คํ ์ด์ ์ ์ํ ๋ script
whoami
๋ช
๋ น์ด
Gitlab Runner๋ฅผ ๋ฑ๋ก ํ ๋ Root ๊ณ์ ์ด ์๋ ๋ฐ๋ก ๋ง๋ ๊ณ์ (gitlab-runner
) ์ผ๋ก ๋ฑ๋กํ๊ธฐ ๋๋ฌธ์ ์ ๋๋ก ์ค์ ๋์ด์๋ ๋ณด๋ ค๊ณ ์ถ๊ฐํจ!
script
Gitlab Runner์ ์ํด ์คํ๋ Shell script
backend build ํ ์ฌ๋ฐฐํฌ, front build ํ ์ฌ๋ฐฐํฌ ํ๋ ์์๋ก ์คํ๋๋ค!
kill $(lsof -t -i:8000)
backend server๊ฐ ์ฌ์ฉํ๊ณ ์๋ ํฌํธ๋ฒํธ์ธ 8000๋ฒ ํฌํธ๋ฅผ ์ข ๋ฃํ๋ค
setsid nohup java -jar backend-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 &
๊ฐ์ฅ ๋ง์ด ์ํ ์ฐฉ์ค ๊ฒช์ ๋ถ๋ถ์ด๋ค
์ฒ์์ ๊ธฐ์กด jar ํ์ผ์ background์์ ์คํ ์ํค๋๋ก nohup -jar backend-0.0.1-SNAPSHOT.jar &
๋ก pipeline์ ํ์ฑํ ์์ผฐ๋๋ Job์ด ์ข
๋ฃ๋์ง ์๊ณ ๊ณ์ ์คํ๋์๋ค
nohup -jar backend-0.0.1-SNAPSHOT.jar > nohup.out &
๋ก ๋ณ๊ฒฝํ๋๋ permission denied error ๊ฐ ๋ฌ๋ค
๊ทธ ํ๋ก๋ ์์ ์ ์์ ์ ๊ฑฐ์ณ ๊ฒฐ๊ตญ linux directory structure์์ ์ฅ์น ํ์ผ๋ค์ด ์ ์ฅ๋๋ ๊ฐ์์ ํ์ผ์์คํ
์ธ /dev
๋ก .out ํ์ผ์ ์์ฑํ๊ฒ ๋ณ๊ฒฝํ์๋ค (์ค์ ๋ก ์์ฑ๋์ง๋ ์๋๋ค! ๋ฌผ๋ฆฌ์ ์ฉ๋์ ์ฐจ์งํ์ง ์๋ directory ์!)
๊ทธ ๊ฒฐ๊ณผ, Runner์ Job์ด ์ฑ๊ณต์ ์ผ๋ก ์ข ๋ฃ๋๊ณ , background์์ Jar ํ์ผ์ด ์คํ๋๋ ๊ฒ์ ํ์ธ ํ ์ ์์๋ค!
after_script
๋ง ๊ทธ๋๋ก script ์ํ์ด ์๋ฃ๋๋ฉด ์ํ ๋ script
tags
ํน์ Tag๊ฐ ๋ฌ๋ฆฐ Runner์ ๋ช ๋ น์ ๋ด๋ฆด ์ ์๊ฒ ํ๋ค
Gitlab Runner ๋ฑ๋ก ์ ์ค์ ํ Tag๋ฅผ ์ ๊ธฐ์ตํด ๋์๋ค๊ฐ ์ฌ๊ธฐ์ ์ ์ผ๋ฉด ๋๋ค!
.gitlab-ci.yml
ํ์ผ์ ๊ธฐ์ฌํ๋ฏ์ด, master branch์ event๊ฐ ๋ฐ์ํ๋ฉด pipeline์ด ์คํ๋๋ค
CI/CD > Pipelines ์์ ์คํ๋ pipeline๋ค์ ํ์ธ ํ ์ ์๋ค
Pipeline ์ ํด๋ฆญํด์ ๋ค์ด๊ฐ๋ฉด ์คํ๋ Job ์ ํ์ธ ํ ์ ์๋ค
Job์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ ๋ณผ ์ ์๋ค
Job succeeded!
+
์ฒ์์ Job ์คํ ์ ์๋ก ์์ฑํ gitlab-runner
๊ณ์ ์ ๋ํ sudo ๊ถํ์ด ์์ด์ ๊ถํ์ ๋ถ์ฌํ๋ค
์์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ ๋ค ์๋์ ๋ด์ฉ์ ์ถ๊ฐํ๋ค
+
์ด ๋ฐฉ์ ๋ง๊ณ Dockerfile
์ ์์ฑํ๊ณ docker image๋ฅผ ์คํ์ํค๋ Job์ Gitlab CI/CD๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณด๊ณ ์๋ค!
Kubernetes๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์๋ณด๋ ์ค! ์ฌ๋ฐ๋น!