Jenkins Declarative vs Scripted Pipeline: A Developer's Guide to CI/CD Automation

๐Ÿค– AI ์ถ”์ฒœ

์ด ์ฝ˜ํ…์ธ ๋Š” CI/CD ์ž๋™ํ™”์˜ ํ•ต์‹ฌ ๋„๊ตฌ์ธ Jenkins์˜ ํŒŒ์ดํ”„๋ผ์ธ ์ž‘์„ฑ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ชจ๋“  ๋ ˆ๋ฒจ์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž, ๋ฐ๋ธŒ์˜ต์Šค ์—”์ง€๋‹ˆ์–ด, ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž์—๊ฒŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ Jenkins๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜ Declarative์™€ Scripted ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ฐจ์ด๋ฅผ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์„ ์„ ํƒํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”– ์ฃผ์š” ํ‚ค์›Œ๋“œ

Jenkins Declarative vs Scripted Pipeline: A Developer's Guide to CI/CD Automation

ํ•ต์‹ฌ ๊ธฐ์ˆ : ์ด ์ฝ˜ํ…์ธ ๋Š” ์ง€์†์  ํ†ตํ•ฉ/์ง€์†์  ๋ฐฐํฌ(CI/CD) ์ž๋™ํ™”์˜ ํ•ต์‹ฌ ๋„๊ตฌ์ธ Jenkins์˜ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ํŒŒ์ดํ”„๋ผ์ธ ์ž‘์„ฑ ๋ฐฉ์‹, Declarative์™€ Scripted์˜ ์ฐจ์ด์ ์„ ๋ช…ํ™•ํžˆ ์„ค๋ช…ํ•˜๊ณ  ์‹ค์ œ ์‚ฌ์šฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์  ์„ธ๋ถ€์‚ฌํ•ญ:
* ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ฐœ๋…: ์ฝ”๋“œ ์ปค๋ฐ‹๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€์˜ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๋Š” ๋ ˆ์‹œํ”ผ๋กœ ์ •์˜ํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๋นŒ๋“œ ์ƒ์„ฑ, ์„œ๋ฒ„ ๋ฐฐํฌ ๋“ฑ์˜ ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
* Declarative Pipeline: ๊ตฌ์กฐํ™”๋˜๊ณ  ์˜๊ฒฌ์ด ๋ช…ํ™•ํ•˜์—ฌ "๋ฌด์—‡์„" ํ• ์ง€ Jenkins์—๊ฒŒ ์ง€์‹œํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. Node.js ์•ฑ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด pipeline, agent, stages, stage, steps ๋“ฑ์˜ DSL(Domain Specific Language) ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์žฅ์ ์œผ๋กœ๋Š” ๊น”๋”ํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ๋ฌธ๋ฒ•, ๋‚ด์žฅ๋œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐ ์žฌ์‹œ๋„ ๊ธฐ๋Šฅ, ๊ฐ„๊ฒฐํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์— ์ ํ•ฉํ•จ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.
* Scripted Pipeline: ์™„์ „ํ•œ Groovy ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "์–ด๋–ป๊ฒŒ" ํ• ์ง€๋ฅผ ์ง์ ‘ ์ œ์–ดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋ฃจํ”„ ๋ฐ ์‚ฌ์šฉ์ž ์ •์˜ ๋กœ์ง์„ ํฌํ•จํ•œ ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌํ˜„์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Node.js ์•ฑ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉ์ž ์ •์˜ ํ…Œ์ŠคํŠธ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
* ๋น„๊ต: ๊ฐ€๋…์„ฑ, ์œ ์—ฐ์„ฑ, ํ•™์Šต ๊ณก๋ฉด ๋“ฑ์—์„œ Declarative์™€ Scripted ํŒŒ์ดํ”„๋ผ์ธ์„ ํ‘œ๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
* ์„ ํƒ ๊ฐ€์ด๋“œ๋ผ์ธ: ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ(90%) Declarative๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋ฃจํ”„, ๋ณต์žกํ•œ ๋กœ์ง, ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ Scripted๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
* ์„ค์น˜ ๋ฐ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•: Jenkins ๋‹ค์šด๋กœ๋“œ ๋ฐ ๋กœ์ปฌ ์‹คํ–‰ ๋ฐฉ๋ฒ•, ์ƒˆ ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ ๋ฐ ์ฝ”๋“œ ์‚ฝ์ž… ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.
* ๋ฌธ์ œ ํ•ด๊ฒฐ ํŒ: ๊ถŒํ•œ ์˜ค๋ฅ˜, ๊ตฌ๋ฌธ ์˜ค๋ฅ˜, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ˆ„๋ฝ ๋“ฑ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.
* ์ถ”๊ฐ€ ํŒ: ํŒŒ์ดํ”„๋ผ์ธ ๋ฒ„์ „ ๊ด€๋ฆฌ(Jenkinsfile), Blue Ocean ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉ, ์ž‘์€ ๋‹จ์œ„๋กœ ์‹œ์ž‘ํ•  ๊ฒƒ์„ ์กฐ์–ธํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์ž„ํŒฉํŠธ: Jenkins ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ๋ฐ˜๋ณต์ ์ด๊ณ  ์ˆ˜๋™์ ์ธ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž์˜ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ํœด๋จผ ์—๋Ÿฌ๋ฅผ ์ค„์ด๋ฉฐ, ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๋”œ๋ฆฌ๋ฒ„๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ˜์‘: ์›๋ฌธ์—์„œ๋Š” ์ง์ ‘์ ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ˜์‘์„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์ง€๋งŒ, Jenkins๋Š” CI/CD ๋ถ„์•ผ์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜๋˜๊ณ  ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜๋กœ, ๊ด€๋ จ ์ •๋ณด์™€ ์ง€์› ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ํ’๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“š ๊ด€๋ จ ์ž๋ฃŒ