๐Ÿ“‚ AWS

[AWS] CodeBuild

dhyuck 2022. 4. 27. 23:52
๋ฐ˜์‘ํ˜•

CodeBuild์ด๋ž€?

  • CodeBuild๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์™„์ „ ๊ด€๋ฆฌํ˜• ๋นŒ๋“œ ์„œ๋น„์Šค๋กœ ๋Œ€ํ‘œ์ ์ธ CI(Continuous Integration) ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.
  • CodeBuild๋Š” ๋นŒ๋“œ ์š”์ฒญ์ด ์ƒ์„ฑ๋˜๋ฉด ์ฆ‰์‹œ ๋นŒ๋“œ๊ฐ€ ์‹œ์ž‘๋˜๊ณ , ๋นŒ๋“œ ๋ณผ๋ฅจ์— ๋”ฐ๋ผ ์ธํ”„๋ผ๊ฐ€ ์ž๋™์œผ๋กœ ํ™•์žฅ/์ถ•์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

CodeBuild์˜ ํŠน์ง•

  • ๋นŒ๋“œ ํ”„๋กœ์ ํŠธ(build project)๋Š” ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ๊ฒƒ์ด๋ฉฐ ์†Œ์Šค์ฝ”๋“œ ์œ„์น˜, ๋นŒ๋“œ ํ™˜๊ฒฝ, ์‹คํ–‰ํ•  ๋นŒ๋“œ ๋ช…๋ น, ๋นŒ๋“œ ์ถœ๋ ฅ๋ฌผ์˜ ์ €์žฅ ์œ„์น˜๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ(build artifacts)๋Š” ๋นŒ๋“œ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐํฌ ํŒจํ‚ค์ง€, WAR ํŒŒ์ผ, ๋กœ๊ทธํŒŒ์ผ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ํ™˜๊ฒฝ(build environment)์€ ์šด์˜์ฒด์ œ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋Ÿฐํƒ€์ž„๊ณผ CodeBuild๊ฐ€ ๋นŒ๋“œ์— ์‚ฌ์šฉํ•˜๋Š” tool๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ๋Š” AWS KMS๋ฅผ ์ด์šฉํ•˜์—ฌ ์•”ํ˜ธํ™” ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, IAM ์ •์ฑ…์—์„œ resource-level permissions(๋ฆฌ์†Œ์Šค ์ˆ˜์ค€ ๊ถŒํ•œ)์„ ํ†ตํ•ด ๋นŒ๋“œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ๊ฒฐ๊ณผ๋Š” ์ฝ˜์†”๊ณผ CloudWatch, API๋ฅผ ํ†ตํ•ด ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋””๋ฒ„๊น…์„ ์œ„ํ•ด์„œ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ CodeBuild Local์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์†Œ์Šค ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ CodeCommit, S3, ECR, Github, Bitbucket๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Java, Node.js, Python๊ณผ ๊ฐ™์€ ์‚ฌ์ „ ๊ตฌ์„ฑ๋œ ๋นŒ๋“œํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ณ , Docker image๋ฅผ ์ง€์ •ํ•˜์—ฌ ์œ ์ €๋งŒ์˜ ๋นŒ๋“œ ํ™˜๊ฒฝ๋„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CodePipeline, Jenkins์™€ ๊ฐ™์€ ํˆด๊ณผ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉํ•œ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ๋ถ„๋‹จ์œ„ ๊ณผ๊ธˆ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

BuildSpec(๋นŒ๋“œ ์‚ฌ์–‘)

  • BuildSpec์€ CodeBuild๊ฐ€ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋นŒ๋“œ ๊ด€๋ จ ๋ช…๋ น๊ณผ ์„ค์ • ํŒŒ์ผ์ด๋ฉฐ 1๊ฐœ์˜ ๋นŒ๋“œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด 1๊ฐœ์˜ Build Spec๋งŒ์„ ์ง€์ • ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Build Spec์€ ์†Œ์Šค์ฝ”๋“œ ์•ˆ์— ํฌํ•จ๋˜๊ฑฐ๋‚˜ ๋นŒ๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ YAMLํ˜•์‹์ž…๋‹ˆ๋‹ค.

CodeBuild์˜ ๋™์ž‘๋ฐฉ์‹

  1. ์ฝ˜์†”, CLI, SDK, CodePipeline๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CodeBuild๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ž…๋ ฅ์œผ๋กœ ๋นŒ๋“œํ”„๋กœ์ ํŠธ๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.
  2. CodeBuild๊ฐ€ ๋นŒ๋“œํ”„๋กœ์ ํŠธ์— ์ •์˜๋œ ๋Œ€๋กœ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜์—ฌ ์ž„์‹œ ์ปดํ“จํŒ… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ™˜๊ฒฝ์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•œ ๋‹ค์Œ buildspec์— ์ •์˜๋œ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ S3์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. buildspec์— ๋”ฐ๋ผ SNS ์ฃผ์ œ์— ๋นŒ๋“œ ์•Œ๋ฆผ ๋ณด๋‚ด๊ธฐ ๊ฐ™์€ ์ž‘์—…๋„ ์ˆ˜ํ–‰ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ๋นŒ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋นŒ๋“œ ํ™˜๊ฒฝ์€ CodeBuild ๋ฐ CloudWatch Logs์— ์ •๋ณด(information)์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  6. ๋นŒ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์ฝ˜์†”, CLI, SDK๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CodeBuild์—์„œ ์š”์•ฝ๋œ ๋นŒ๋“œ ์ •๋ณด๋ฅผ, CloudWatchLogs์—์„œ ์ž์„ธํ•œ ๋นŒ๋“œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  7. CodePipeline์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ CodePipeline์—์„œ ํ•œ๊ณ„๊ฐ€ ์žˆ๋Š” ๋นŒ๋“œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  8. ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์•„ํ‹ฐํŒฉํŠธ๋ฅผ S3์— ์—…๋กœ๋“œํ•˜๊ณ  ์ปดํ“จํŒ… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•