ํฌ์ŠคํŠธ

GitLab CI ร— Slack Webhook | 1. Freeze-Free MR Pipeline ์„ค๊ณ„

GitLab CI ร— Slack Webhook | 1. Freeze-Free MR Pipeline ์„ค๊ณ„

๐Ÿ“Œ ์ด ๊ธ€์€ GitLab CI ร— Slack Webhook ์ค‘ 1ํŽธ์ž…๋‹ˆ๋‹ค.
2ํŽธ: Freeze-Window ์ฐจ๋‹จยทMR ์•Œ๋ฆผยท์™ธ๋ถ€ Include ์ž๋™ํ™”
3ํŽธ: ์‚ฌ์šฉ์ž๋ณ„ ํ”„๋กœํ•„ ์ด๋ชจ์ง€ ๋งž์ถค ์ ์šฉ
4ํŽธ: ๊ฐ€์ด๋“œ- MR ์•Œ๋ฆผยทDraft ํ† ๊ธ€ยท์ถฉ๋Œ ๊ฐ์ง€


1. ๋ฌธ์ œ ์ƒํ™ฉ ๋˜๋Š” ๋™๊ธฐ (Motivation)

  • ํ”„๋กœ์ ํŠธ ํ”„๋ฆฌ์ง• ๊ธฐ๊ฐ„์— MR์ด ์‹ค์ˆ˜๋กœ ๋จธ์ง€๋˜์–ด ์†Œ์Šค๊ฐ€ ๋ฐ˜์˜๋˜๋Š” ์ผ์ด ๋ฐœ์ƒ
  • ๋ฐฐํฌ ์•ˆ์ •์„ฑ ํ™•๋ณด์™€ ํœด๋จผ์—๋Ÿฌ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ž๋™ํ™”๋œ ์ฐจ๋‹จ ์žฅ์น˜ ํ•„์š”์„ฑ ์ธ์‹
  • CI/CD, .gitlab-ci.yml, bash ๋“ฑ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ํ™˜๊ฒฝ์—์„œ์˜ ์ž๋™ํ™” ๋„์ž…์— ๋Œ€ํ•œ ๋„์ „

2. ๋ชฉํ‘œ ๋ฐ ์š”๊ตฌ์‚ฌํ•ญ (Goal & Requirements)

  • ํ”„๋ฆฌ์ง• ๊ธฐ๊ฐ„์— MR์ด ๋จธ์ง€๋˜๋Š” ๊ฒƒ์„ ์‚ฌ์ „์— ์ฐจ๋‹จ (์ž๋™ํ™”)
  • Slack Webhook์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์—ฐ๋™
  • ์ฐจ๋‹จ ์‹œ์ (MR ์ „/ํ›„) ๋ช…ํ™•ํ™” ๋ฐ ์œ ์—ฐํ•œ ์กฐ๊ฑด ๋ถ„๊ธฐ
  • GitLab CI/CD ๋ณ€์ˆ˜, bash ์Šคํฌ๋ฆฝํŠธ, GitLab Predefined Variables ์ ๊ทน ํ™œ์šฉ

3. ๊ตฌํ˜„ ๊ณผ์ • (Implementation)

3.1 ์ฃผ์š” ์ฝ”๋“œ/๋กœ์ง ์„ค๋ช…

  • Slack Webhook ์‹ ์ฒญ ๋ฐ ํ…Œ์ŠคํŠธ, ์‹ค์ œ๋กœ Slack ์ฑ„๋„์— ๋ฉ”์‹œ์ง€๊ฐ€ ์˜ค๋Š”์ง€ curl๋กœ ์‚ฌ์ „ ๊ฒ€์ฆ
  • .gitlab-ci.yml ์ž‘์„ฑ ๋ฐ GitLab Settings > CI/CD > Variables์—์„œ SLACK_URL, F_S_DATE, F_E_DATE ๋“ฑ ๋ณ€์ˆ˜ ์„ธํŒ…
  • MR ์ด๋ฒคํŠธ ๊ฐ์ง€ ๋ฐ ์กฐ๊ฑด ๋ถ„๊ธฐ, Slack ์•Œ๋ฆผ ์ „์†ก, ํŒŒ์ดํ”„๋ผ์ธ ์ฐจ๋‹จ ๋“ฑ ๊ตฌํ˜„

3.2 ์‹œํ–‰์ฐฉ์˜ค/ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

  • GitLab Workflow์™€ CI/CD ๊ฐœ๋… ํ˜ผ๋™, .gitlab-ci.yml ๋ฌธ๋ฒ• ๋ฏธ์ˆ™์œผ๋กœ ์ธํ•œ ๋ฐ˜๋ณต์ ์ธ ์—๋Ÿฌ
  • GitLab Predefined Variables ์‚ฌ์šฉ๋ฒ•, MR ์ด๋ฒคํŠธ ๊ฐ์ง€ ์กฐ๊ฑด(rules, only ๋“ฑ) ์‹œํ–‰์ฐฉ์˜ค
  • bash ๋ฌธ๋ฒ•, Slack Webhook ๋ฉ”์‹œ์ง€ ํŠน์ˆ˜๋ฌธ์ž ์ฒ˜๋ฆฌ ๋“ฑ์—์„œ ๋ฐ˜๋ณต์ ์ธ ์—๋Ÿฌ ๊ฒฝํ—˜
  • ํŠนํžˆ, curl ๋ช…๋ น์–ด์—์„œ ๋ณ€์ˆ˜์™€ ํŠน์ˆ˜๋ฌธ์ž, ์ด๋ชจ์ง€, ์ค„๋ฐ”๊ฟˆ ์ฒ˜๋ฆฌ ๋“ฑ์œผ๋กœ ์ธํ•ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์—๋Ÿฌ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒ
  • MR ์ƒ์„ฑ์ด ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ, ๋ฐฐ์น˜ํ˜•์‹์ด ์•„๋‹Œ ์ƒ์‹œ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„์˜ ์–ด๋ ค์›€

ํ•ด๋‹น ์ž‘์—…๋„ ๋‹ค๋ฅธ ์ž‘์—…๋“ค์ฒ˜๋Ÿผ ๋ฐฐ์น˜ํ˜•์‹์œผ๋กœ ์ผ์ •ํ•œ ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—ˆ์œผ๋ฉด ์ž‘์—…์ด ํŽธํ–ˆ์„ ๊ฒƒ ๊ฐ™์œผ๋‚˜, ์ด ์ž‘์—…์€ ์‚ฌ๋žŒ์ด MR์„ ์ƒ์„ฑ ํ–ˆ์„์‹œ, ์ˆ˜ํ–‰๋˜์–ด์•ผํ•˜๊ธฐ์— MR์ด ์ƒ์„ฑ๋œ ์‹œ์ ์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒ์‹œ์„ฑ์„ ๊ฐ–๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ์ ์ด ์„œ๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ bash ์ž‘์„ฑ ๋•Œ ๋งŒ๋‚œ Nested Mapping Error, collapse multi line command ๋“ฑ๋“ฑ ๋งŽ์€ ํŠธ๋Ÿฌ๋ธ”์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

GitLab CI/CD Workflow

GitLab CI/CD Workflow

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ๊ณผ์ •2 ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ๊ณผ์ •4

4. ๊ฒฐ๊ณผ & ๋ฐฐ์šด ์  (Result & Learning)

  • ํ”„๋ฆฌ์ง• ๊ธฐ๊ฐ„ ์ค‘ ์‹ค์ˆ˜๋กœ ์ธํ•œ ์†Œ์Šค ๋ฐ˜์˜์„ ์‚ฌ์ „์— ์ฐจ๋‹จํ•˜๊ณ , Slack์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ์œผ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์•ˆ์ •์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ค์ œ๋กœ MR์ด ์ฐจ๋‹จ๋˜๋Š” ์ƒํ™ฉ์„ ๊ฒฝํ—˜ํ•˜๋ฉฐ, ํœด๋จผ์—๋Ÿฌ๋กœ ์ธํ•œ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๋ฅผ ์ค„์ด๊ณ , ๊ฐœ๋ฐœ ํšจ์œจ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • GitLab CI/CD ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์„ ์ง์ ‘ ์„ค๊ณ„ยท๊ตฌํ˜„ํ•˜๋ฉด์„œ bash ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ๊ณผ GitLab ๋ณ€์ˆ˜ ํ™œ์šฉ ๋Šฅ๋ ฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒ์‹œ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ์™€ ๋‹ค์–‘ํ•œ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ๊ณ ๋ฏผํ•˜๋ฉฐ, ์‹ค๋ฌด์—์„œ์˜ ์ž๋™ํ™” ์„ค๊ณ„์™€ ์šด์˜ ๊ฒฝํ—˜์„ ์Œ“์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

5. ๊ธฐ์ˆ  ์Šคํƒ (Tech Stack)

GitLab GitLab CI Bash Script Slack Webhook


6. ์ฐธ๊ณ  ์ž๋ฃŒ (References)


์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

ยฉ zihuns. ์ผ๋ถ€ ๊ถŒ๋ฆฌ ๋ณด์œ 

Powered by Jekyll with Chirpy theme