DevOps/Git

GitHub Actions - CI/CD ํ™˜๊ฒฝ ์„ค์ • : Pull Request ์Šน์ธ์ ˆ์ฐจ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ™˜๊ฒฝ ๊ตฌ์ถ•

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2023. 11. 21.

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

์ถœ์ฒ˜ : https://www.redhat.com/ko/topics/devops/what-is-ci-cd

 

 

 

ํ˜‘์—… ๋ฌธํ™”๊ฐ€ ํ™œ๋ฐœํ•ด์ง€๋ฉด์„œ ์œ ์ง€๋ณด์ˆ˜์„ฑ(maintainable)์˜ ์ค‘์š”์„ฑ ๋˜ํ•œ ๋†’์•„์กŒ๋‹ค.

 

์ด๋ฒˆ ๋ฏธ๋‹ˆํ”„๋กœ์ ํŠธ ๋ฐฑ์—”๋“œ ํŒ€์žฅ์ด ๋˜๋ฉด์„œ, ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ๋”์šฑ ๋А๋ผ๋Š” ๋ฐ”์ด๋‹ค. ๊น”๋”ํ•œ ์ฝ”๋“œ๋ž€ ์–ด๋– ํ•œ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ์ ์€ ์ฝ”๋“œ๋ผ๊ธฐ ๋ณด๋‹ค ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ์ž‘์„ฑ ํ–ˆ์–ด๋„ ํ•œ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒŒ ๊น”๋”ํ•œ ์ฝ”๋“œ ๊ฐ™๋‹ค.

 

์ด์— ๋”ฐ๋ผ์„œ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ํ†ต์ผํ•˜๊ณ , ๋ฆฌ๋ทฐ ๋ฌธํ™”๋ฅผ ํ†ตํ•ด์„œ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์ƒ๊ฐ๊ณผ ์ฒ ํ•™์„ ์ผ์น˜์‹œ์ผœ, ๋งˆ์น˜ 'ํŒ€'์ด ํ•˜๋‚˜์˜ ์ง€์„ฑ์ฒด๊ฐ€ ๋˜์–ด ๊ฐœ๋ฐœํ•˜๋Š” ๋“ฏํ•œ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋“ค์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ˜‘์—… ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๊ณ  ์žˆ๋‹ค.

 

push๋ฅผ ์ œํ•œํ•˜์—ฌ pull request๋ฅผ ํ†ตํ•œ review ๋ฌธํ™”๋ฅผ ์žฅ๋ คํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ธํŒ…ํ•ด๋ณด๊ฒ ๋‹ค.

 

๊นƒํ—ˆ๋ธŒ์—๋Š” ์ฐธ์—ฌ ์ธ์›์ด ์Šน์ธ(Approve)์„ ํ•ด์•ผ Pull Request ๋จธ์ง€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์กด์žฌํ•œ๋‹ค.

์ด ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด "๋ช‡ ๋ช… ์ด์ƒ์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•œ๋‹ค"๋ผ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฃฐ์„ ๋งŒ๋“ค์–ด๋„ ์ข‹์„ ๋“ฏํ•˜๋‹ค.

 

์•„์ง ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฌธํ™”๊ฐ€ ์žกํžˆ์ง€ ์•Š์€ ๊ณณ์—์„œ ์ฒ˜์Œ ์‹œ๋„ํ•˜๊ธฐ์—๋„ ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค.

์šฐ์„  Approve์„ค์ •์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

๋จผ์ € ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์…‹ํŒ…์— ๋“ค์–ด๊ฐ€๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์–ด๋–ค ํŒŒ๋ž‘ ๋ฒ„ํŠผ๊ณผ ํ•จ๊ป˜ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํ•ด์•ผํ•œ๋‹ค๋Š” ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜ค์‹œ๋Š” ๋ถ„๋“ค์€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ private ์—์„œ public ์œผ๋กœ ๋ฐ”๊พธ๋ฉด ์ด ํ™”๋ฉด๊ณผ ๊ฐ™์ด ๋ฐ”๋€” ๊ฒƒ์ด๋‹ค.

 

์—ฌ๊ธฐ์„œ Add branch protection rule ๋ฅผ ํด๋ฆญํ•ด์ค€๋‹ค.

 

๊ทธ๋Ÿผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹ค.

 

1 : ๋ณดํ˜ธํ•  ๋ธŒ๋žœ์น˜ ๋ช…์„ ์ ์œผ๋ฉด ๋œ๋‹ค.

 

2 : merging ํ•˜๊ธฐ ์ „์— ์ตœ์†Œ ํ•„์š” Approve ์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ 5๋ช…์ด์„œ ํ•˜๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ์ „์ฒด ์ธ์› (์ฆ‰ ์ž๊ธฐ ์ž์‹ ์„ ์ œ์™ธํ•œ 4๋ช…) ์—๊ฒŒ Approve ๋ฅผ ๋ฐ›์•„์•ผ์ง€๋งŒ merging ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3 : ์ƒํƒœ๋ฅผ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํŒ€์ด ์ •ํ•œ ์ฝ”๋”ฉ์ปจ๋ฒค์…˜์ด๋‚˜ ๋นŒ๋“œ ๊ณผ์ •์ด ์ •ํ™•ํžˆ ํ†ต๊ณผํ•˜๋Š”์ง€ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

4 : ๋ชจ๋“  Conversation์„ Resolve ํ•ด์•ผ์ง€๋งŒ merging ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์‹ ์ด pr์„ ์˜ฌ๋ ธ์„ ๋•Œ ํŒ€์›์ด OO ๋ถ€๋ถ„ ์ˆ˜์ •์ด ํ•„์š”ํ•  ๊ฑฐ ๊ฐ™๋‹ค๋Š” ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚ ๋ฆฌ๋ฉด ํ•ด๊ฒฐํ›„ Resolve conversation ์„ ๋ˆŒ๋Ÿฌ ๋ชจ๋‘ ํ•ด๊ฒฐ ํ•ด์•ผ์ง€ merging ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•œ๋‹ค๋ฉด ํŒ€์›๋“ค์˜ ๋ฆฌ๋ทฐ ๋ฐ˜์˜๊ณผ ์Šน์ธ์„ ๋ฐ›์•„์•ผ์ง€๋งŒ merging์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ CI๊ฐ€ ๊ตฌ์ถ•๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

Checkstyle_job์œผ๋กœ๋Š” ์ปค์Šคํ…€ ๊ตฌ๊ธ€ ์ž๋ฐ” ์ปจ๋ฒค์…˜์„ ์‚ฌ์šฉํ•˜์˜€๊ณ , build_job์€ gradle ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ์ด๋Ÿฐ ์„ค์ •์€ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ํด๋” ์•„๋ž˜์— .github ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— workflows ๋””๋ ‰ํ† ๋ฆฌ์— ์•„๋ž˜์— ci.yml ํŒŒ์ผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

์ด๋Ÿฐ ์„ค์ •์„ ๋งˆ์น˜๋ฉด PR ํ™”๋ฉด์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

 

๋Œ“๊ธ€