๊ฐœ๋ฐœ๊ณต๋ถ€/AWS ๐Ÿ›ฐ๏ธ

CI/ CD + Github Actions & AWS EC2

wannaDevelopIt 2023. 1. 31. 17:03
728x90

์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

 

1) CI(Continuous Integration) : ์ง€์†์  ํ†ตํ•ฉ ~ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ™์ด ๊ฐœ๋ฐœํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ถˆ์ผ์น˜ ์ตœ์†Œํ™”

-> CI๋ฅผ ์ œ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐ˜์˜ ์‹œ ์ž๋™์œผ๋กœ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ๋˜์–ด ์ž˜๋ชป๋œ ์ฝ”๋“œ๊ฐ€ ๊ณต์œ ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€

์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ ์ฆ์ง„

 

2) CD(Continuous Deployment) : ์ง€์†์  ๋ฐฐํฌ ~ ํ”„๋กœ์ ํŠธ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฐ€์ƒ ํ™˜๊ฒฝ์— ์ž๋™์œผ๋กœ ๋ฐฐํฌ

-> CD๋ฅผ ๊ตฌ์„ฑํ•ด๋‘๋ฉด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐฐํฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ดํ”„ ๋ผ์ธ์„ ๊ณต์œ ํ•˜์—ฌ ๋ฒˆ๊ฑฐ๋กœ์›€์„ ์—†์•จ ์ˆ˜ ์žˆ๋‹ค

๋ฐฐํฌ ํ”Œ๋กœ์šฐ์˜ ๋™๊ธฐํ™”

 

Github Actions : ๊นƒํ—™์—์„œ ์ œ๊ณตํ•˜๋Š” CI/CD ํˆด

+JAVA CI with Gradle : gradle.yml ์ˆ˜์ •ํ•˜๊ธฐ

on : ์›Œํฌํ”Œ๋กœ์šฐ ์ˆ˜ํ–‰ํ•  ์ด๋ฒคํŠธ

jobs: ์ˆ˜ํ–‰ํ•  ์›Œํฌํ”Œ๋กœ์šฐ

 

๊นƒํ—™ ์•ก์…˜์„ ์‚ฌ์šฉํ•ด AWS EC2์— ๋ฐฐํฌํ•˜๊ธฐ

  1. Github Actions ์—์„œ AWS ์— ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. AWS EC2 ์„ค์ • ์ถ”๊ฐ€
  3. AWS S3 ๋ฒ„ํ‚ท ์ƒ์„ฑ
  4. AWS CodeDeploy ์•ฑ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ ์„ค์ •
  5. Github Actions ์—์„œ ์‚ฌ์šฉํ•  ์‚ฌ์šฉ์ž ๊ถŒํ•œ ์ถ”๊ฐ€
  6. AppSpec ํŒŒ์ผ ์ž‘์„ฑ
  7. ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ
  8. Github Actions Workflow ์ž‘์„ฑ
  9. Github ์—์„œ push ๋กœ ๋ฐฐํฌํ•˜๊ธฐ

Main ๋ธŒ๋žœ์น˜์— Push ํ•˜๋ฉด ์ž๋™์œผ๋กœ EC2๊นŒ์ง€ ๋ฐฐํฌ๋˜๋Š” Workflow ~ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์••์ถ•ํ•˜์—ฌ AWS ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ ํ›„ ์„œ๋ฒ„์— ์ „๋‹ฌํ•ด ์‹คํ–‰ํ•œ๋‹ค

ํฐ ํ๋ฆ„์„ ์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. Github Actions ์—์„œ ์ฝ”๋“œ ๋นŒ๋“œ (ํ…Œ์ŠคํŠธ๋Š” CI ์—์„œ ํ–ˆ๋‹ค๊ณ  ๊ฒ€์ฆํ–ˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ƒ๋žต)
  2. AWS ์ธ์ฆ
  3. ์ฝ”๋“œ ์••์ถ•ํ•ด์„œ AWS S3 ์— ์—…๋กœ๋“œ
  4. AWS CodeDeploy ์‹คํ–‰ํ•˜์—ฌ S3 ์— ์žˆ๋Š” ์ฝ”๋“œ EC2 ์— ๋ฐฐํฌ

๊นƒํ—ˆ๋ธŒ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ AWS S3์— ์—…๋กœ๋“œ ํ•œ ํ›„ AWS EC2์—์„œ ๋Œ์–ด๋‹ค ์“ฐ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ•ต์‹ฌ,

AWS CodeDeploy๋Š” ๊ทธ๊ฑธ ๋ณด์กฐ

 

EC2 ์„ค์ • ์ถ”๊ฐ€

1. Tag ์ถ”๊ฐ€(CodeDeploy์—์„œ ์–ด๋–ค ์ธ์Šคํ„ด์Šค์— ์‹คํ–‰ํ•  ์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐ’)

2. IAM ์—ญํ•  ๋“ฑ๋ก

3. EC2 ์„œ๋ฒ„์— CodeDeploy Agent ์„ค์น˜

 

AWS S3 ์ƒ์„ฑ

๋ฒ„ํ‚ท ์ƒ์„ฑ

์ผ๋ฐ˜ ๊ตฌ์„ฑ๊ณผ ๊ฐ์ฒด ์†Œ์œ ๊ถŒ ์„ค์ •

์—‘์„ธ์Šค, ๋ฒ„ํ‚ท ๋ฒ„์ „, ์•”ํ˜ธํ™” ๋น„ํ™œ์„ฑํ™”

CodeDeploy ์ƒ์„ฑ

CodeDeploy ์ „์šฉ IAM ์—ญํ•  ๋งŒ๋“ค๊ธฐ

CodeDeploy ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ

CodeDeploy ๋ฐฐํฌ๊ทธ๋ฃน ์ƒ์„ฑ

Github Actions์—์„œ ์‚ฌ์šฉํ•  IAM ์‚ฌ์šฉ์ž ์ถ”๊ฐ€

์‚ฌ์šฉ์ž ์ด๋ฆ„, ์—‘์„ธ์Šค ์œ ํ˜•, ์ ‘๊ทผ ๊ถŒํ•œ ์„ค์ •

Access Key, Secret Key ์ƒ์„ฑ

๊นƒํ—™ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ์‹œํฌ๋ฆฟ ์ถ”๊ฐ€

AppSpec ํŒŒ์ผ ์ž‘์„ฑ

files ์„น์…˜

permissions ์„น์…˜

hooks ์„น์…˜

๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ

stop.sh

start.sh

build.gradle ํŒŒ์ผ ์ˆ˜์ •

๊นƒํ—™ ์•ก์…˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ž‘์„ฑ

sample workflow -> deploy.yml ์ž‘์„ฑ

๊นƒํ—™ ์•ก์…˜ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜๊ธฐ

repo์—์„œ ํ™•์ธ

AWS codedeploy์—์„œ ํ™•์ธ

EC2 ์„œ๋ฒ„์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ™•์ธ

 

 

 

728x90