Issue #3 - f-lab-edu/at_ticket GitHub Wiki

CI/CD๋ฅผ ๊ตฌ์ถ•ํ•ด๋ณด์ž.

๊ฐœ์š”

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

๋งค๋ฒˆ ๋ฐ˜๋ณต๋˜๋Š” ๋ณ‘ํ•ฉ/๋ฐฐํฌ ์ž‘์—…์„ ์ž๋™ํ™”์‹œํ‚ค๊ธฐ ์œ„ํ•˜์—ฌ CI/CD ๋„๊ตฌ๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

CI/CD ๋ž€?

CI (Continuous Integration) - ์ง€์†์ ์ธ ํ†ตํ•ฉ

์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ธฐ์กด ์ฝ”๋“œ์™€ ๋ณ‘ํ•ฉํ•˜๊ณ , ๋ณ‘ํ•ฉํ•œ ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ง€๋ฅผ ๊ฒ€์ฆํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ

CD (Continuous Delivery) - ์ง€์†์ ์ธ ๋ฐฐํฌ

์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋ฐฐํฌ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ. ๋ฐฐํฌ ์ž๋™ํ™”

CI/ CD ๋„๊ตฌ ๋น„๊ต

๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๊ธฐ์— ์•ž์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” CI/CD ๋„๊ตฌ ๋ช‡๊ฐ€์ง€๋ฅผ ๋น„๊ตํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

Jenkins

Java ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ ์†Œ์Šค ์ž…๋‹ˆ๋‹ค. ์˜ค๋ž˜๋œ ๋งŒํผ ๋ฌธ์„œ์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋งŽ๊ณ . ๋‹ค์–‘ํ•œ ์„ธํŒ…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์žฅ์ ์ด๋‚˜, ๊ทธ๋งŒํผ ์ดˆ๊ธฐ ์„ธํŒ…์— ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ณ , Jenkins๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub Action

GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” CI/CD๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์„ค์ •์ด ๊ฐ„๋‹จํ•˜๊ณ  YAML ๊ธฐ๋ฐ˜ ์›Œํฌ ํ”Œ๋กœ์šฐ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์—ฌ ์›Œํฌ ํ”Œ๋กœ์šฐ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์—ฌ ์†์‰ฝ๊ฒŒ ์ž‘์—…์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ํ™˜๊ฒฝ์ด ๊นƒํ—ˆ๋ธŒ์—์„œ ํ˜ธ์ŠคํŒ…๋˜๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋ผ์ด๋น— ํ™˜๊ฒฝ์—์„œ๋Š” ์ถ”๊ฐ€์ ์ธ ์„ค์ •์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋ฌด๋ฃŒ ๋ฒ„์ „์€ ๊ธฐ๋Šฅ์ด ์ œํ•œ์ ์ด๋ผ๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Travics CI

์ƒ์šฉ CI ์„œ๋น„์Šค ํˆด์ž…๋‹ˆ๋‹ค. ์›น์œผ๋กœ ์„œ๋น„์Šค๊ฐ€ ์ œ๊ณต๋˜์–ด ์ง์œผ๋กœ ๋ณ„๋„์˜ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•  ํ•„์š”๊ฐ€ ์—†๊ณ . Git Hub, Bit Bucket ๋“ฑ์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์™€์˜ ์—ฐ๋™์ด ์‰ฌ์šด ๊ฒƒ์ด ์žฅ์ ์ž…๋‹ˆ๋‹ค. ์ƒ์—…์šฉ์€ ์œ ๋ฃŒ์ด๊ณ , Jenkins์— ๋น„ํ•ด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ ๋‹ค๋Š” ๊ฒƒ์ด ๋‹จ์ ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์„ ํƒ์€?

์ €ํฌ๋Š” Jenkins ๋ฅผ ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ €ํฌ ํŒ€์›๋“ค์ด Jenkins ๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ ์ ์ด ์žˆ์–ด์„œ ์ต์ˆ™ํ•˜์˜€๊ณ , ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์–ด ์ƒ์„ธํ•œ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ด ๋งˆ์Œ์— ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Jenkins ์ ์šฉํ•˜๊ธฐ

Jenkins๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ์„œ๋ฒ„๋ฅผ ๋‘์ง€ ์•Š๊ณ , atticket์„ ๋ฐฐํฌํ•  ์„œ๋ฒ„์— Jenkins์„ ์„ค์น˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด CI/CD ๊ณผ์ •์„ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

1. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ๊นƒํ—ˆ๋ธŒ์— ํ‘ธ์‹œํ•œ๋‹ค.
2. ๊นƒํ—ˆ๋ธŒ๊ฐ€ webhook์„ ํ†ตํ•ด, Jenkins๋กœ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
3. Jenkins๊ฐ€ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ๋ฅผ ํ•œ๋‹ค 
    (docker compose๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐํฌ ๊ฐ„์†Œํ™”)

์ฝ”๋“œ๊ฐ€ main branch ์— Push ๋˜๋ฉด webhook ์„ค์ •์„ ํ†ตํ•˜์—ฌ Jenkins๊ฐ€ main branch์˜ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ pull ๋ฐ›์•„์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ €ํฌ ํ”„๋กœ์ ํŠธ๋Š” ์„œ๋ธŒ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ๋กœ, ์™„์ „ํ•œ atticket ํ”„๋กœ๊ทธ๋žจ์„ ๋„์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋“ค์„ ์ „๋ถ€ ์‹คํ–‰์‹œ์ผœ์ฃผ์–ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„์— ๋ฐฐํฌ์‹œํ‚ฌ ๋•Œ๋„ ๋กœ์ปฌ์—์„œ ๋นŒ๋“œ์‹œํ‚ฌ ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐฐํฌ์‹œ์—๋„ docker compose ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
docker compose ํŒŒ์ผ์—๋Š” ๋ฐฐํฌ์— ํ•„์š”ํ•œ ์„ค์ •์ด ์ ํ˜€์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋กœ ์ด๋ฃจ์–ด์ง„ ํ”„๋กœ์ ํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž์นซ ๋ฐฐํฌ์— ์—ฌ๋Ÿฌ ๊ณผ์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, docker compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ๋ฅผ ๊ฐ„๋‹จํžˆ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

img