๐Ÿš€ ์š”์•ฝ

SUMMARY

์‚ฌ๋‚ด ํ‘œ์ค€ VCS์ธ Bitbucket ์ง€์›์„ 1์ˆœ์œ„ ์กฐ๊ฑด์œผ๋กœ CI ๋„๊ตฌ๋ฅผ ํ›‘์—ˆ๋‹ค. ๊ทธ ๊ด€๋ฌธ์„ ํ†ต๊ณผํ•œ ํ›„๋ณด๋“ค ์ค‘์—์„œ, ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ ์ธ ์‚ฌ์šฉ์„ฑ์ด ๋‹๋ณด์ธ DroneCI๋ฅผ ๊ณจ๋ž๋‹ค. YAML ํŒŒ์ดํ”„๋ผ์ธ์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„ค์ดํ‹ฐ๋ธŒ๋ผ ์ง€๊ธˆ ํ™˜๊ฒฝ๊ณผ ๊ฒฐ์ด ๋งž์•˜๋‹ค.

๐Ÿ’ก ๊ฐœ์š”

์‚ฌ๋‚ด์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋“ค์ด๋ฉด์„œ, ๋ ˆ๊ฑฐ์‹œ์—์„œ ์“ฐ๋˜ Jenkins๋ฅผ ๋Œ€์‹ ํ•  CI(Continuous Integration) ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค. Jenkins์˜ ์–ด๋””๊ฐ€ ๊ฑธ๋ ธ๋Š”์ง€, ์ƒˆ ๋„๊ตฌ์— ๋ญ˜ ์š”๊ตฌํ–ˆ๋Š”์ง€, ํ›„๋ณด๋“ค์„ ์–ด๋–ป๊ฒŒ ๊ฑธ๋ €๋Š”์ง€๋ฅผ ์ •๋ฆฌํ–ˆ๋‹ค.

๐Ÿ“‹ ์„ ์ • ๋ฐฐ๊ฒฝ

๋ ˆ๊ฑฐ์‹œ ์„œ๋ฒ„์˜ Jenkins๋ฅผ ๊ทธ๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒŒ ์ œ์ผ ๋น ๋ฅธ ๊ธธ์ด๊ธด ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ตณ์ด ์ง์„ ๊ทธ๋Œ€๋กœ ์งŠ์–ด์ง€๊ณ  ๋„˜์–ด์˜ฌ ์ด์œ ๋ฅผ ๋ชป ์ฐพ์•˜๋‹ค. Jenkins์˜ ๊ฑธ๋ฆฌ๋Š” ์ ์€ ์ด๋ฏธ ๊ฒช์„ ๋งŒํผ ๊ฒช์—ˆ๋‹ค.

  • ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ •: Jenkinsfile์€ Groovy ๊ธฐ๋ฐ˜์ด๋ผ, ํŒŒ์ดํ”„๋ผ์ธ์ด ๋ณต์žกํ•ด์ง€๋ฉด ๊ฐ€๋…์„ฑ์ด ๊ธ‰๊ฒฉํžˆ ๋–จ์–ด์ง„๋‹ค.
  • ๊ธฐ๋Šฅ์„ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ํฌ๊ฒŒ ๊ธฐ๋Œ€๋Š”๋ฐ, ํ”Œ๋Ÿฌ๊ทธ์ธ๋ผ๋ฆฌ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ๋ฒ„์ „ ๋ฌผ๊ณ  ๋Š˜์–ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์ข…์ข… ๋‚ฌ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌยทCPU๋ฅผ ์ œ๋ฒ• ๋จน์–ด์„œ ๊ฒฝ๋Ÿ‰ ํ™˜๊ฒฝ์—” ๋ถ€๋‹ด์ด์—ˆ๋‹ค.
  • ์• ์ดˆ์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ฐ™์€ ํด๋Ÿฌ์Šคํ„ฐ ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์„ ์—ผ๋‘์— ๋‘๊ณ  ์„ค๊ณ„๋œ ๋ฌผ๊ฑด์ด ์•„๋‹ˆ๋ผ, ๋™์  ์Šค์ผ€์ผ ์•„์›ƒ ๋ถ™์ด๊ธฐ๊ฐ€ ์˜ ๋ถˆํŽธํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ƒˆ CI ๋„๊ตฌ์—” ์ด๋Ÿฐ ๊ฑธ ์š”๊ตฌํ–ˆ๋‹ค.

  • Bitbucket ์ง€์›: ์‚ฌ๋‚ด ํ‘œ์ค€ VCS๊ฐ€ Bitbucket์ด๋‹ค. ์ด๊ฒŒ ์•ˆ ๋˜๋ฉด ๋‹ค๋ฅธ ๊ฒŒ ์•„๋ฌด๋ฆฌ ์ข‹์•„๋„ ํ›„๋ณด์—์„œ ๋น ์ง„๋‹ค. ์‚ฌ์‹ค์ƒ ์ฒซ ๊ด€๋ฌธ์ด์—ˆ๋‹ค.
  • ๋นŒ๋“œ ํ™˜๊ฒฝ: Docker container, Maven, Node.js ๋นŒ๋“œ๊ฐ€ ๋ฌด๋ฆฌ ์—†์ด ๋Œ์•„์•ผ ํ•œ๋‹ค.
  • ์„ ์–ธ์  ํŒŒ์ดํ”„๋ผ์ธ: YAML ๊ธฐ๋ฐ˜ Pipeline as Code๋ฅผ ์ง€์›ํ•  ๊ฒƒ.
  • ๋‹จ์ˆœ์„ฑ: ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ธˆ๋ฐฉ ๋ฐฐ์›Œ์„œ ์“ธ ์ˆ˜ ์žˆ์„ ๊ฒƒ.
  • ์ปค๋ฎค๋‹ˆํ‹ฐ: ๋ง‰ํ˜”์„ ๋•Œ ์ฐพ์•„๋ณผ ์ž๋ฃŒ๊ฐ€ ์žˆ๊ณ , ๊ณ„์† ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์žˆ์„ ๊ฒƒ.

๐Ÿ“Š ๋น„๊ต

Bitbucket ์ง€์› ์—ฌ๋ถ€๋ฅผ ์ฒซ ํ•„ํ„ฐ๋กœ ๋‘๊ณ  ํ›„๋ณด๋ฅผ ๊ฑธ๋ €๋‹ค.

์ด๋ฆ„์žฅ์ ๋‹จ์  ๋ฐ ๋ณด๋ฅ˜ ์‚ฌ์œ 
DroneCI์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„ค์ดํ‹ฐ๋ธŒ, ๊ฐ„๋‹จํ•œ YAML ์„ค์ •, Bitbucket ์ง€์›์ผ๋ถ€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์€ ์œ ๋ฃŒ
Tekton์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„ค์ดํ‹ฐ๋ธŒ, CRD ๊ธฐ๋ฐ˜ ๊ฐ•๋ ฅํ•œ ํ™•์žฅ์„ฑํ•™์Šต ๊ณก์„ ์ด ๋†’๊ณ  ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ์ด ๋ณต์žก
Concourse CI๋ช…ํ™•ํ•œ ๊ฐœ๋…(ResourceยทTaskยทJob), ๋›ฐ์–ด๋‚œ UI๋‹ค์†Œ ๋…์„ ์ ์ธ(Opinionated) ์„ค๊ณ„, ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ž‘์Œ
Gitea ActionsGitHub Actions ์œ ์‚ฌ ์›Œํฌํ”Œ๋กœ์šฐ, Gitea์™€ ์™„๋ฒฝ ํ†ตํ•ฉ์•„์ง ์‹คํ—˜์ , Gitea ์™ธ VCS ์ง€์› ๋ฏธํก
Woodpecker CIDroneCI์˜ ์™„์ „ ์˜คํ”ˆ์†Œ์Šค ํฌํฌ, ์‰ฌ์šด ์„ค์ •Bitbucket ๋ฏธ์ง€์›์œผ๋กœ ํƒˆ๋ฝ

๊ฐ€์žฅ ์•„๊นŒ์› ๋˜ ๊ฑด Woodpecker CI์˜€๋‹ค. DroneCI๋ฅผ ์˜คํ”ˆ์†Œ์Šค๋กœ ํฌํฌํ•œ ๋ฌผ๊ฑด์ด๋ผ ์„ค์ •์ด ๊ฐ„๋‹จํ•˜๊ณ  ๋ผ์ด์„ ์Šค ๊ฑฑ์ •๋„ ์—†๋Š”๋ฐ, ํ•˜ํ•„ Bitbucket์„ ๊ณต์‹ ์ง€์›ํ•˜์ง€ ์•Š์•„ ์ฒซ ๊ด€๋ฌธ์—์„œ ๊ฑธ๋ ธ๋‹ค. Tekton์€ ํ™•์žฅ์„ฑ์€ ์ตœ๊ณ ์ง€๋งŒ ์ด๋ฒˆ ๊ทœ๋ชจ์— ์“ฐ๊ธฐ์—” ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ์ด ๊ณผํ–ˆ๊ณ , Concourse CI๋Š” ์„ค๊ณ„ ์ฒ ํ•™์ด ๊ฐ•ํ•ด ํŒ€์— ๊ฐ•์š”ํ•˜๊ธฐ ๋ถ€๋‹ด์Šค๋Ÿฌ์› ๋‹ค. Gitea Actions๋Š” Gitea ์•ˆ์—์„  ๋งค๋ˆํ•˜์ง€๋งŒ Bitbucket ์ชฝ์ด ์•„์ง ๋ฏธ๋ฅ์ง€ ์•Š์•˜๋‹ค.

โœ… ์„ ์ • ์‚ฌ์œ 

๋‚จ์€ ํ›„๋ณด ์ค‘ DroneCI๋กœ ์ •ํ–ˆ๋‹ค. ๋ฌด๊ฒŒ๋ฅผ ๋‘” ์ง€์ ์€ ์ด๋ ‡๋‹ค.

  1. Bitbucket ์ง€์›(ํ•ต์‹ฌ): ์ฒซ ๊ด€๋ฌธ์ด์ž ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๊ฐ€์žฅ ๋ฌด๊ฑฐ์› ๋˜ ๊ธฐ์ค€์ด๋‹ค. ์ด ํ•˜๋‚˜๋กœ Woodpecker ๊ฐ™์€ ์œ ๋ง์ฃผ๊นŒ์ง€ ์ž˜๋ ค ๋‚˜๊ฐ”๊ณ , ๋•๋ถ„์— ์„ ํƒ์ง€๊ฐ€ ๊น”๋”ํ•˜๊ฒŒ ์ขํ˜€์กŒ๋‹ค.
  2. ๋‹จ์ˆœํ•œ ์‚ฌ์šฉ์„ฑ: Bitbucket์„ ์ง€์›ํ•˜๋Š” ํ›„๋ณด๋“ค ์ค‘ DroneCI๋Š” UI์™€ YAML ํŒŒ์ดํ”„๋ผ์ธ์ด ์œ ๋… ๊ฐ„๋ช…ํ–ˆ๋‹ค. ๋ณต์žกํ•œ Jenkinsfile์—์„œ ๋ฒ—์–ด๋‚˜ ๋ˆ„๊ตฌ๋‚˜ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒŒ ์ปธ๋‹ค. CI๋ฅผ ๋‚˜ ํ˜ผ์ž ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ™์ด ์จ์•ผ ํ•˜๋‹ˆ, ํ•™์Šต ๊ณก์„ ์„ ๋‚ฎ์ถ”๋Š” ๊ฒŒ ๊ณง ๋„์ž… ์„ฑ๊ณต๋ฅ ์ด์—ˆ๋‹ค.
  3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„ค์ดํ‹ฐ๋ธŒ: ๊ฐ ๋‹จ๊ณ„๊ฐ€ ๊ฒฉ๋ฆฌ๋œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋Œ์•„ ํ”Œ๋Ÿฌ๊ทธ์ธ ์˜์กด์„ฑ ๋ฌธ์ œ์—์„œ ์ž์œ ๋กญ๊ณ , ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค๋„ ํšจ์œจ์ ์œผ๋กœ ์“ด๋‹ค. Jenkins์—์„œ ๋‹ต๋‹ตํ–ˆ๋˜ ๋ถ€๋ถ„์„ ์ •ํ™•ํžˆ ๋ฉ”์›Œ ์คฌ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ