About AB180
home
AB180 Culture
home
๐Ÿณ

๋„์ปค, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ทธ๋ฆฌ๊ณ  CI/CD

๊ฐœ์š”

Airbridge์˜ ๋Œ€๋ถ€๋ถ„์˜ ์ปดํฌ๋„ŒํŠธ๋Š” AWS CodeBuild ๋ฅผ ์ด์šฉํ•˜์—ฌ Docker image๋กœ ๋นŒ๋“œ๊ฐ€ ๋˜๊ณ , AWS ECS ์™€ EKS๋กœ ๋ฐฐํฌํ•˜์—ฌ ์šด์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณธ ๊ณผ์ œ๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ, Dockerfile๊ตฌ์„ฑ, Helm์ฐจํŠธ ๊ตฌ์„ฑ, Kubernetes ๊ด€๋ฆฌ์—ญ๋ž‘์„ ์ข…ํ•ฉ์ ์œผ๋กœ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

๋‹ค์Œ ์š”๊ตฌ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋Š” Github Repository ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”

๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”

โ€ข
๊ฐ„๋‹จํ•œ Static Web page๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š” (html ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.)
โ€ข
์œ„์—์„œ ์ƒ์„ฑํ•œ Web page๋ฅผ ์„œ๋น™ํ•  ์ˆ˜ ์žˆ๋Š” ์›น์„œ๋ฒ„๋ฅผ Dockerfile๋กœ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”
โ€ข
๋นŒ๋“œ๋œ ๋„์ปค์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•˜์—ฌ 80ํฌํŠธ์— http get ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ Static web page ๋ฅผ ์„œ๋น™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋กœ์ปฌ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ค ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์•ผํ•˜๋Š”์ง€ README.md ์— ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”
โ€ข
๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ , Static web page๊ฐ€ ์žˆ๋Š” directory๋ฅผ ๋งˆ์šดํŠธ ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ README.md ์— ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”
โ—ฆ
๋กœ์ปฌ์—์„œ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ ํ•˜์ง€ ์•Š์•„๋„ ์›น ๋ธŒ๋ผ์šฐ์ € refresh ๋งŒ์œผ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋„์ปค์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด Publishํ•˜๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”

โ€ข
Github Actions, Gitlab CI/CD, Jenkins Pipeline, AWS CodeBuild ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์—ฌ ๋‹ค์Œ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”
โ€ข
๋ชจ๋“  ๋ธŒ๋ Œ์น˜์— ๋Œ€ํ•˜์—ฌ push๊ฐ€ ๋˜์—ˆ์„๋•Œ ๊ทธ ๋ธŒ๋ Œ์น˜์— ์žˆ๋Š” ์†Œ์Šค์ฝ”๋“œ๋กœ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œ ํ•ด ์ฃผ์„ธ์š”
โ€ข
๋นŒ๋“œ๋œ ๋„์ปค ์ด๋ฏธ์ง€์— <๋ธŒ๋ Œ์น˜๋ช…>-<์‹คํ–‰๊ณ ์œ ๋ฒˆํ˜ธ> ๋กœ ํƒœ๊ทธ๋ฅผ ๋‹ฌ์•„์ฃผ์„ธ์š”
โ—ฆ
์‹คํ–‰ ๊ณ ์œ ๋ฒˆํ˜ธ๋Š” push ๋˜์–ด ์‹คํ–‰ ๋  ๋•Œ ๋งˆ๋‹ค ๋‹ฌ๋ผ์ง€๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€๋ฅผ registry์— registry์— push ํ•ด์ฃผ์„ธ์š”
โ—ฆ
registry๋Š” Github Package, AWS ECR, GCR, Dockerhub ๋“ฑ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒํ•ด์ฃผ์„ธ์š”

Kubernetes์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก Helm์ฐจํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”

โ€ข
Deployment๋กœ Pod๊ฐ€ 2๋Œ€ ์‹คํ–‰ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์„ธ์š”
โ€ข
๊ฐ Pod๋กœ ์—ฐ๊ฒฐ๋˜๋Š” Service๋ฅผ ๊ตฌ์„ฑ ํ•ด ์ฃผ์‹œ๋˜, Service๋กœ ์ ‘๊ทผ ํ•  ๋•Œ์—๋Š” 3000๋ฒˆ ํฌํŠธ๋กœ ์ ‘์† ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ์„ธ์š”.
โ—ฆ
๋‹ค๋ฅธ Pod์—์„œ curl http://<service๋ช…>:3000 ์„ ์กฐํšŒํ–ˆ์„๋•Œ Pod์˜ 80ํฌํŠธ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผํ•ฉ๋‹ˆ๋‹ค.
โ€ข
Helm์ฐจํŠธ๋ฅผ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•ด์•ผํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ README.md์— ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์ƒํ™ฉ๋ถ€์—ฌ : ๋ชจ๋“  Pod๊ฐ€ ์ƒˆ๋ฒฝ2์‹œ์— ์žฌ์‹œ์ž‘ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์„ธ์š”

์ƒํ™ฉ : ์œ„ ๊ณผ์ œ์—์„œ ๋งŒ๋“  ์›น์„œ๋น„์Šค๊ฐ€ Memory leak์ด ์žˆ๋‹ค๋Š”๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์—๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค๊ณ  ํŒ๋‹จ๋˜์–ด ํ•˜๋ฃจ์— ํ•œ๋ฒˆ์”ฉ ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์ฃผ๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
โ€ข
Kubernetes์˜ CronJob์„ ์ด์šฉํ•˜์—ฌ ์ƒˆ๋ฒฝ2์‹œ๋งˆ๋‹ค Deployment๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”
โ€ข
CronJob์—์„œ Deployment๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด Service Account ๋ฅผ ํ• ๋‹นํ•˜๊ณ , ์žฌ์‹œ์ž‘์„ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด ์ฃผ์„ธ์š”.
โ€ข
์œ„ CronJob์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ Helm Chart ํ˜น์€ Manifest.yamlํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”
โ€ข
README.md ์— Helm Chart ํ˜น์€ Manifest.yaml์„ ๋ฐฐํฌํ•˜๊ธฐ์œ„ํ•œ ์ปค๋งจ๋“œ๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๊ณผ์ œ ์ œ์ถœ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

โ€ข
ํ•˜๋‚˜์˜ Repository์— ํด๋”๋ฅผ ๋‚˜๋ˆ„์–ด ์š”๊ตฌ์‚ฌํ•ญ๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”
โ€ข
๊ฐ ํด๋”์˜ README.md ์— ๊ฐ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜์˜€๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์Šคํฌ๋ฆฐ์ƒท, ๋กœ๊ทธ ๋“ฑ์„ ์ฒจ๋ถ€ํ•ด์ฃผ์„ธ์š”
โ—ฆ
์˜ˆ์‹œ) docker image build ๋กœ๊ทธ, kubectl ์‹คํ–‰ ๊ฒฐ๊ณผ ๋“ฑ
โ€ข
Github Actions ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์œ ์˜ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
โ€ข
Github Repo ๊ถŒํ•œ ์ƒ Credential์˜ ์ฝ”๋“œ ๋…ธ์ถœ์€ ๋ฌธ์ œ์‚ผ์ง€ ์•Š์œผ๋‚˜, ํฌํ•จ ์‹œ์—๋Š” ์ œ์ถœ ์ „ ๋ฐ˜๋“œ์‹œ invalidate๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
CONFIDENTIAL | ์ด์— ํฌํ•จ๋œ ๋‚ด์šฉ์€ ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜์—ฌ์•ผ ํ•˜๋ฉฐ ์ž„์˜๋กœ ๊ณต๊ฐœํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ •๋ณด ๋ฐ ๋ฒ•๋ฅ ์ƒ ๊ณต๊ฐœ๊ฐ€ ๊ธˆ์ง€๋œ ์ •๋ณด๊ฐ€ ๋“ค์–ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์˜ ์ง€์ •์ˆ˜์‹ ์ธ์ด ์•„๋‹ˆ๋ฉด ์ด๋ฅผ ๋ฌด๋‹จ์œผ๋กœ ๋ณด์œ , ์ „์†ก, ๋ฐฐํฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Copyright AB180 All Rights Reserved