๐Ÿ›ณ DevOps

CI/CD ๊ทธ๊ฒŒ ๋ญ์•ผ?

DevPoong 2022. 9. 12. 23:37

๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด

๊ฐœ๋ฐœ์ž ํŒ€์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒฐ๊ณผ๋ฌผ์— ๋Œ€ํ•ด ์ง€์†์ ์ธ ํ†ตํ•ฉ(CI)๊ณผ ์ง€์†์ ์ธ ๋ฐฐํฌ(CD)๋ฅผ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค.

 

1. CI (Continuous Integration)

CI๋ž€ ์ž‘์—…๋œ ์ฝ”๋“œ์˜ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ํŒจํ‚ค์ง• ์ž‘์—…์˜ ์ž๋™ํ™” ๊ณผ์ •์˜ ๋‹จ๊ณ„์ด๋‹ค.

์ž‘์€ ๋‹จ์œ„๋กœ ์—ฌ๋Ÿฌ๋ฒˆ ์ง€์†์ ์œผ๋กœ ํ†ตํ•ฉํ•˜์—ฌ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋˜์–ด์„œ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ ˆํผ์ง€ํ† ๋ฆฌ์— ํ†ตํ•ฉ๋˜๋ฏ€๋กœ  ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ™์€ ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ์ž‘์—…ํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

2. CD

Continuous Delivery์™€ Continuous Deployment ๋‘ ๊ฐ€์ง€ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค.

(1) Continuous Delivery

CI๋ฅผ ํ†ตํ•ด์„œ ์–ป์€ ํ†ตํ•ฉ๋œ ๊ฒฐ๊ณผ๋ฌผ์ด ๊ณ ๊ฐ์—๊ฒŒ ๋ฐฐํฌ๋˜๊ธฐ ์ „์— ๊ฒ€์ฆํ•˜๊ณ  ์ˆ˜๋™์ ์œผ๋กœ ๋ฐฐํฌ ์ „๋‹ฌํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค.

(2) Continuous Deployment

 ์ž๋™ํ™”๋กœ ์ „ ๊ณผ์ •์„ ๋ฐฐํฌ๋ฅผ ํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค.

 

3. CI/CD work flow์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๋“ค

(1) VCS(SCM)

์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ๋Š” ์ƒํ™ฉ์— ์ฝ”๋“œ๋ฅผ ์„œ๋กœ ์—…๋กœ๋“œ(commit)๋ฅผ ํ•˜๋ฉด ์ƒ๊ธฐ๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.
๊ทธ๋ž˜์„œ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋Œ€ํ‘œ์ ์œผ๋กœ ํ˜•์ƒ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ธ Git์ด๋‹ค.

(2) CI/CD ๋„๊ตฌ  (Jenkins, Travis CI, circle ci)

VCS์— ์ €์žฅ๋œ ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ 
build -> test -> package ์ผ๊ด„์ ์ธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

test๋‹จ๊ณ„์—์„œ
(1) ์‹คํŒจ๋ฅผ ํ•œ๋‹ค๋ฉด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋˜์ ธ์ค˜์„œ ์ฝ”๋“œ์˜ ๊ฐœ์„ ์„ ์š”์ฒญํ•  ๊ฒƒ์ด๊ณ 
(2) ์„ฑ๊ณตํ•œ๋‹ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„์ธ ๋ฐฐํฌ ์ž‘์—…์œผ๋กœ ์ด๋™ํ•œ๋‹ค.

๋‹ค์‹œ ๋งํ•ด์„œ, Jenkins๋Š” CI/CD ๋‘ ๋ถ€๋ถ„์—์„œ ์ „๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

(4) Build tool (Maven, Gradle)

CI๋ฅผ ํ†ตํ•ด ํŒจํ‚ค์ง•๋œ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋กœ์จ ์‚ฌ์šฉํ•œ๋‹ค.

(5) ๋ฐฐํฌ ์ž๋™ํ™” ๋„๊ตฌ (Ansible, Terraform)

IaC(Intrastructure as Code)๋ถ€๋ถ„์œผ๋กœ
์„œ๋ฒ„์— ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ณ ๊ด€๋ฆฌ(ํด๋ผ์šฐ๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์ƒํ™” ์„œ๋ฒ„ ๋˜๋Š” ๋ฏธ๋“ค์›จ์–ด ์„œ๋น„์Šค ๊ด€๋ฆฌ)๋ฅผ script ์ฝ”๋“œ์— ์˜ํ•ด์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ด๋‹ค.

(6) ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ๋„๊ตฌ(Docker, cri-o, Container d)

์ปจํ…Œ์ด๋„ˆ ๊ฐ€์ƒํ™” ํ˜•ํƒœ๋กœ ์šด์˜๋˜๋Š” ์„œ๋ฒ„์— ์ ์šฉ๋˜๋Š” ๋„๊ตฌ

(7) Orchestration ๋„๊ตฌ (Kubernetes)

๋„์ปค์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋ฐœ์ƒํ•œ ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ๋ฐฐํฌ, ์‹œ์Šคํ…œ, ํ™•์žฅ, ๋„คํŠธ์›Œํ‚น ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ
์Šค์ผ€์ค„, ์Šค์ผ€์ผ๋ง ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ด์šฉ๋˜๊ธฐ๋„ ํ•จ.

4. Jenkins๋ฅผ ์ด์šฉํ•œ ๋ฐฐํฌ ๊ณผ์ •

(1) IaC๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๋Š” ํŒŒ์ดํ”„๋ผ์ธ

web application์„ ๊ฐœ๋ฐœํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์ƒ์„ฑ๋˜๋Š” warํŒŒ์ผ์„
Was์ธ ์•„ํŒŒ์น˜ ํ†ฐ์บฃ์— ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ OR warํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ์ž์ฒด๋ฅผ ์ปจํ…Œ์ด๋„ˆ ๊ฐ€์ƒํ™” ํ™˜๊ฒฝ์— ๊ตฌ์ถ•ํ•˜์—ฌ ๋ฐฐํฌํ•œ๋‹ค.

 

(2) IaC๋ฅผ ๊ฑฐ์น˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ

(3) ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ํฌํ•จํ•œ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ

์™ผ์ชฝ ๋ฐ˜์ด Jenkins๋ฅผ ์ด์šฉํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€๋ฅผ Continuous Integration(CI)๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ  
์˜ค๋ฅธ์ชฝ ๋ฐ˜์ด Continuous Delivery, Deployment(CD)๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

(4) EC2 / VM์— ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ

3๋ฒˆ๊นŒ์ง€์˜ ํŒŒ์ดํ”„๋ผ์ธ์€ ๋กœ์ปฌ์—์„œ์˜ ํ™˜๊ฒฝ์ด๊ณ  ์ด ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ํด๋ผ์šฐ๋“œ์— ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
CI/CD๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐฐํฌ์ž‘์—…์ด๋‚˜ ์šด์˜์ž‘์—…์„ ํ•  ๋•Œ๋Š” ๋ณดํ†ต Linuxํ™˜๊ฒฝ์—์„œ ๋งŽ์ด ์‹คํ–‰๋˜๋ฏ€๋กœ ๋กœ์ปฌ์—์„œ๋„ Linuxํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.