๐Ÿš€Argo Workflow ํŠœ๋‹ ์‹ค์ „๊ธฐ: ๋นŒ๋“œ ์‹œ๊ฐ„ 4๋ถ„ โ†’ 2๋ถ„ ์ดˆ๋ฐ˜์œผ๋กœ ์ค„์ธ ๋ฐฉ๋ฒ•

sangjinsuยท2025๋…„ 5์›” 24์ผ

๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋นŒ๋“œ๋Š” ๋งค์ผ ๋ฐ˜๋ณต๋˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ๋นŒ๋“œ๊ฐ€ 4๋ถ„์ด๋ผ๋ฉด, ํฌ๊ฒŒ ๋ถˆํŽธํ•˜์ง€ ์•Š๋‹ค๊ณ  ๋А๋‚„ ์ˆ˜๋„ ์žˆ์ฃ . ํ•˜์ง€๋งŒ ํ•˜๋ฃจ์— ์ˆ˜์‹ญ ๋ฒˆ ๋ฐ˜๋ณต๋œ๋‹ค๋ฉด ์ด์•ผ๊ธฐ๋Š” ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

โ€œ๋งค๋ฒˆ 4๋ถ„, ํ•˜๋ฃจ 20๋ฒˆ โ†’ ํ•˜๋ฃจ 1์‹œ๊ฐ„ 20๋ถ„โ€

์ด ๊ธ€์€ ๊ทธ๋Ÿฐ ๋ฐ˜๋ณต๋˜๋Š” ์‹œ๊ฐ„ ๋‚ญ๋น„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด, Argo Workflow ๊ธฐ๋ฐ˜ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ตœ์ ํ™”ํ•˜๋ฉฐ ์‹œ๊ฐ„์„ 2๋ถ„ ์ดˆ๋ฐ˜๋Œ€๋กœ ์ค„์ธ ์‹ค์ „ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค.


๐Ÿงญ ๋นŒ๋“œ ํ™˜๊ฒฝ ์†Œ๊ฐœ

  • CI ๋„๊ตฌ: Argo Workflow
  • ๋นŒ๋“œ ๋„๊ตฌ: Kaniko (Dockerfile ๊ธฐ๋ฐ˜ ๋นŒ๋”)
  • ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ: Amazon ECR
  • ๋นŒ๋“œ ๋Œ€์ƒ: golang ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (์˜ˆ์‹œ)
  • ๋ชฉํ‘œ: ๋นŒ๋“œ ์‹œ๊ฐ„์„ 30% ์ด์ƒ ์ค„์ด๊ณ , PR ํ›„ ํ…Œ์ŠคํŠธ ํ”ผ๋“œ๋ฐฑ์„ ๋” ๋น ๋ฅด๊ฒŒ ๋ฐ›๋Š” ๊ฒƒ

โ— ์ฒซ ๋ฒˆ์งธ ์‹œ๋„: ๋ฆฌ์†Œ์Šค๋ฅผ ๋Š˜๋ ค๋ณด์ž

์ฒ˜์Œ ์‹œ๋„๋Š” ๋‹จ์ˆœํ–ˆ์Šต๋‹ˆ๋‹ค.

โ€œCPU๋ž‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์ฃผ๋ฉด ๋นŒ๋“œ๊ฐ€ ๋นจ๋ผ์ง€๊ฒ ์ง€?โ€

๊ทธ๋ž˜์„œ ๊ฐ ์›Œํฌํ”Œ๋กœ์šฐ ์Šคํ…์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ž์›์„ ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค.

(์•„๋ž˜ ์ฝ”๋“œ๋Š” ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.)

resources:
  limits:
    cpu: "4000m"
    memory: "4Gi"

ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ์ƒ๊ฐ๋ณด๋‹ค ๋ฏธ๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์•„๋„ Pod๊ฐ€ ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋ง๋˜๋Š” ์‹œ๊ฐ„, ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ๊นŒ์ง€์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ์ „์ฒด ๋นŒ๋“œ ์‹œ๊ฐ„์€ ๊ฑฐ์˜ ๋ณ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.


๐Ÿ” ๋‘ ๋ฒˆ์งธ ์‹œ๋„: ๋ณ‘๋ชฉ์„ ์ฐพ์•„๋ผ

๊ทธ๋ž˜์„œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ฐ ์Šคํ…์„ ํƒ€์ž„๋กœ๊ทธ๋กœ ์ธก์ •ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์Šคํ…์†Œ์š” ์‹œ๊ฐ„ (๊ธฐ์กด)
Git clone์•ฝ 40์ดˆ
Build์•ฝ 40์ดˆ
ECR ์—…๋กœ๋“œ(push)์•ฝ 1๋ถ„ 40์ดˆ
๊ธฐํƒ€1๋ถ„

ECR ์—…๋กœ๋“œ๊ฐ€ ๊ฐ€์žฅ ๋А๋ ธ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ ์ž์ฒด๋ณด๋‹ค๋„, ์ด๋ฏธ์ง€๋ฅผ pushํ•˜๋Š” ๊ณผ์ •์ด ๋ณ‘๋ชฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ ํ•ด๊ฒฐ์ฑ… 1: ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ๊ฒฝ๋Ÿ‰ํ™”

๊ธฐ์กด์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

# ์˜ˆ์‹œ: ๊ธฐ๋ณธ ์ด๋ฏธ์ง€
FROM golang:1.21

์ด๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฒฝ๋Ÿ‰ ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

# ์˜ˆ์‹œ: ๊ฒฝ๋Ÿ‰ ์ด๋ฏธ์ง€๋กœ ๊ต์ฒด
FROM golang:1.21-alpine

๋ณ€๊ฒฝ ํ›„์—๋Š” Docker ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๊ฐ€ ์•ฝ 800MB โ†’ 200MB ์ดํ•˜๋กœ ์ค„๋ฉด์„œ,

ECR ์—…๋กœ๋“œ ์‹œ๊ฐ„์ด ์•ฝ 1๋ถ„ 40์ดˆ โ†’ 20์ดˆ ๋‚ด์™ธ๋กœ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์ฃผ์˜์‚ฌํ•ญ: alpine์€ glibc ๋Œ€์‹  musl์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, C ์˜์กด์„ฑ์ด ์žˆ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ํ˜ธํ™˜์„ฑ ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”ง ํ•ด๊ฒฐ์ฑ… 2: Kaniko ๋นŒ๋“œ ์˜ต์…˜ ํŠœ๋‹

kaniko๋Š” ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ์ง€ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ๋Š” ๋ชจ๋“  ๋ ˆ์ด์–ด๋ฅผ ๋งค๋ฒˆ ์ฒ˜๋ฆฌํ•˜์—ฌ ์†๋„๊ฐ€ ๋А๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ต์…˜๋“ค์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค)

args:
  - --snapshot-mode=redo
  - --single-snapshot
  - --verbosity=warn

๊ฐ ์˜ต์…˜ ์„ค๋ช…

์˜ต์…˜ํšจ๊ณผ
--snapshot-mode=redo๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ•œ ๋ฒˆ์— ์Šค๋ƒ…์ƒท
--single-snapshotํŒŒ์ผ ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ๋‹จ์ผ ๋ ˆ์ด์–ด๋กœ ์ฒ˜๋ฆฌ
--verbosity=warn๋””๋ฒ„๊น… ๋กœ๊ทธ ์ƒ๋žต, ๋กœ๊ทธ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

โš™๏ธ ํ•ด๊ฒฐ์ฑ… 3: Git Clone ์ตœ์ ํ™”

CI์—์„œ ์ „์ฒด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ cloneํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ๋ธŒ๋žœ์น˜ 1๊ฐœ, ์ปค๋ฐ‹ depth 1๋งŒ ๊ฐ€์ ธ์˜ค๋„๋ก ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

# ์˜ˆ์‹œ: git clone ๊ฐ„์†Œํ™”
git clone --depth=1 --single-branch https://your.repo.url

๐Ÿ“ฆ ํ•ด๊ฒฐ์ฑ… 4: ์ด๋ฏธ์ง€ Pull ์ •์ฑ… ์„ค์ •

๋นŒ๋“œ ๋„์ค‘ ๋งค๋ฒˆ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ pullํ•˜๋ฉด ์‹œ๊ฐ„์ด ๋‚ญ๋น„๋ฉ๋‹ˆ๋‹ค.

imagePullPolicy๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ์„ค์ •ํ•˜์—ฌ, ์ด๋ฏธ ๋กœ์ปฌ์— ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์žฌ์‚ฌ์šฉํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

imagePullPolicy: IfNotPresent

๐Ÿงผ ํ•ด๊ฒฐ์ฑ… 5: ๋ณผ๋ฅจ๊ณผ ์Šคํ… ์ •๋ฆฌ

๊ธฐ์กด์—๋Š” ๋ชจ๋“  ์Šคํ…์— ๊ณตํ†ต ๋ณผ๋ฅจ์ด ๋ถ™์–ด ์žˆ์–ด, Pod ์ดˆ๊ธฐํ™” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๊ณ , ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ถˆํ•„์š”ํ•œ ์Šคํ…์—์„œ๋Š” emptyDir๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋ณผ๋ฅจ ์ž์ฒด๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

volumes:
  - name: tmp
    emptyDir: {}

๋˜ํ•œ, ๋ณ‘๋ ฌ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ ์Šคํ…๋“ค์€ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ๋™์‹œ์— ์‹คํ–‰๋˜๋„๋ก ๋ฆฌํŒฉํ„ฐ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿงฑ ์ตœ์ข… ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ (Mermaid ์‹œ๊ฐํ™”)


๐Ÿ“Š ์ตœ์ข… ๊ฒฐ๊ณผ

ํ•ญ๋ชฉ๊ฐœ์„  ์ „๊ฐœ์„  ํ›„
์ „์ฒด ๋นŒ๋“œ ์‹œ๊ฐ„์•ฝ 4๋ถ„์•ฝ 2๋ถ„ 10์ดˆ
ECR Push ์‹œ๊ฐ„์•ฝ 1๋ถ„ 20์ดˆ์•ฝ 20์ดˆ
Git Clone ์‹œ๊ฐ„์•ฝ 40์ดˆ์•ฝ 20์ดˆ
๋นŒ๋“œ ์Šคํ… ์ˆ˜6~7๊ฐœ4~5๊ฐœ๋กœ ์ถ•์†Œ

โœ๏ธ ๋งˆ๋ฌด๋ฆฌ: ๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—…์ด์•ผ๋ง๋กœ ์ตœ์ ํ™”์˜ ๋Œ€์ƒ

๋นŒ๋“œ ์‹œ๊ฐ„ 1~2๋ถ„ ๋‹จ์ถ•์€ ์ž‘์•„ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ์ž‘์€ ์ฐจ์ด๊ฐ€ ๊ฐœ๋ฐœ ๋ฆฌ๋“ฌ ์œ ์ง€, ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ, ๋ฆฌ์†Œ์Šค ๋น„์šฉ ์ ˆ๊ฐ์ด๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋ฐ”๋กœ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ๋„ ๋ถ„์„ํ•ด๋ณด์„ธ์š”.

์ž‘์€ ๋ณ‘๋ชฉ์ด ๋ฐ˜๋ณต๋˜๋ฉด, ๊ฒฐ๊ตญ ํฐ ์‹œ๊ฐ„ ๋‚ญ๋น„๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.


profile
๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š”, ์ด์Šˆ๋ฅผ ์ค„์ด๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€