๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ ํ”„๋กœ์ ํŠธ/์›จ๋”ฉ๋ฉ”์ดํŠธ

[Github Hook] Jira ํ‹ฐ์ผ“ ๋ฒˆํ˜ธ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž๋™ ์ถ”๊ฐ€ํ•˜๊ธฐ

by nitronium102 2023. 6. 29.

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์ฒ˜์Œ์œผ๋กœ Jira๋ฅผ ์“ฐ๋ฉด์„œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ๋งค๋ฒˆ ์ด์Šˆ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ hook์„ ์ด์šฉํ•ด์„œ ์ž๋™์œผ๋กœ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์•ž์— ์ง€๋ผ ์ด์Šˆ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™๋„๋ก ์„ค์ •ํ–ˆ๋‹ค!

 

๋‚ด ์„ค์ •

1. BRANCH NAMING : feature/[SO-์ด์Šˆ๋ฒˆํ˜ธ]-๋ธŒ๋žœ์น˜ ์ƒ์„ธ ์„ค๋ช…
ex) feature/SO-26-settings
2. feature ๋ธŒ๋žœ์น˜์—์„œ๋งŒ ์ž‘์—…ํ•  ๋•Œ ์ด ๋ฉ”์‹œ์ง€๊ฐ€ ๋ถ™๋„๋ก ์„ค์ •
main master develop release hotfix์ธ ๊ฒฝ์šฐ pass

 

์ฒ˜์Œ์—๋Š”...

์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜? ์ด์ƒํ•˜๊ฒŒ๋„ ๋Œ์•„๊ฐ€์ง€ ์•Š์•˜๋‹ค

 

https://medium.com/prnd/github-%EC%BB%A4%EB%B0%8B-%EB%A9%94%EC%84%B8%EC%A7%80%EC%97%90-jira-%EC%9D%B4%EC%8A%88%EB%B2%88%ED%98%B8-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EB%84%A3%EC%96%B4%EC%A3%BC%EA%B8%B0-779048784037

 

GitHub ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€์— JIRA ์ด์Šˆ๋ฒˆํ˜ธ ์ž๋™์œผ๋กœ ๋„ฃ์–ด์ฃผ๊ธฐ

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

medium.com

https://overcome-the-limits.tistory.com/680?category=923736 

 

[ํ˜‘์—…] ํ˜‘์—…์„ ์œ„ํ•œ JIRA ์ด์Šˆ ๋ฒˆํ˜ธ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž๋™ ์ถ”๊ฐ€ํ•˜๊ธฐ

๋“ค์–ด๊ฐ€๋ฉฐ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ, ํšจ์œจ์ ์ธ ์ผ์ • ๊ด€๋ฆฌ์˜ ํ•„์š”์„ฑ์„ ๋Š๋ผ๋ฉด์„œ JIRA๋ฅผ ์ ๊ทน์ ์œผ๋กœ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. JIRA๋ฅผ ์ฒ˜์Œ ์จ๋ณด๋ฉด์„œ, JIRA๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ ์•Œ์•„

overcome-the-limits.tistory.com

 

๋‹ค๋ฅธ ๊ฒƒ๋„ ์ฐพ์•„๋ณด์•˜์œผ๋‚˜?

์—ฌ๊ธฐ์—๋Š” (2)์ธ ๋ธŒ๋žœ์น˜ ํ•„ํ„ฐ๋ง ๊ทœ์น™์ด ์—†์–ด์„œ ์•„์‰ฌ์› ๋‹ค. ํ•˜์ง€๋งŒ ๋Œ์•„๋Š” ๊ฐ

https://blog.deering.co/commit-convention/

 

git branch ์ด๋ฆ„๊ณผ hook์œผ๋กœ commit message ์ปจ๋ฒค์…˜ ๊ฐ•์ œํ•˜๊ธฐ

Jira์™€ Conventional Commits Jira๋กœ ํ‹ฐ์ผ“ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋ฉด์„œ Conventional Commits ํ˜•ํƒœ๋กœ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ์ž˜ ์ •ํ•˜๋ฉด git hook์œผ๋กœ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒค์…˜์„ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Convetional Commits

blog.deering.co

 

๊ฒฐ๊ตญ..

๋‘˜์„ ํ•ฉ์น˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‚œ ์ง„์งœ ์ •๊ทœ์‹ ์ž˜ ๋ชจ๋ฅด๋Š”๋ฐ ์–ด์ฐŒ์ €์ฐŒ ์ฐธ๊ณ ํ•ด์„œ ์ผ์Œ

cd {ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ}/.git/hooks
vi prepare-commit-msg.sample 
mv prepare-commit-msg.sample prepare-commit-msg # ์ด๋ฆ„ ๋ณ€๊ฒฝํ•˜๊ธฐ

 

prepare-commit-msg ์ฝ”๋“œ

#!/bin/sh  
# .git/hooks/prepare-commit-msg  
#  
# Automatically add branch name and branch description to every commit message except merge commit.  
# https://stackoverflow.com/a/18739064  
#  
  
COMMIT_MESSAGE_FILE_PATH=$1  
  
# feature ๋ธŒ๋žœ์น˜์—์„œ๋งŒ ๋˜๋„๋ก ํ•จ
if [ -z "$BRANCHES_TO_SKIP" ]; then
  BRANCHES_TO_SKIP=(main master develop release hotfix)
fi

BRANCH_NAME=$(git symbolic-ref --short HEAD)
BRANCH_NAME="${BRANCH_NAME##*/}"
BRANCH_EXCLUDED=$(printf "%s\n" "${BRANCHES_TO_SKIP[@]}" | grep -c "^$BRANCH_NAME$")

# merge commit์— ๋Œ€ํ•ด์„œ๋Š” prefix๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.  
MERGE=$(grep -c -i 'merge' < "$COMMIT_MESSAGE_FILE_PATH")  
if [ "$MERGE" != "0" ] ; then  
  exit 0  
fi  

if [ $BRANCH_EXCLUDED != 1 ]; then
  PREFIX=$(git branch | grep '\*' | sed 's/* //' | sed 's/^.*\///' | sed 's/^\([^-]*-[^-]*\).*/\1/')
  echo "[$PREFIX] $(cat "$COMMIT_MESSAGE_FILE_PATH")" > "$COMMIT_MESSAGE_FILE_PATH"
fi

 

 

์‚ฌ์šฉํ›„๊ธฐ

์ž˜ ๋Œ์•„๊ฐ€์„œ ์•„์ฃผ ํŽธํ•˜๋‹ค! ์ด์ œ hook์˜ ์กด์žฌ๋ฅผ ์•Œ์•˜์œผ๋‹ˆ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— pre-commit๋„ ์ž‘์„ฑํ•ด๋†“๊ณ  ์‹ถ๋‹ค

 

https://coderecording.tistory.com/4

 

[Git] hook์„ ํ™œ์šฉํ•œ ํ†ต์ผ์„ฑ ์žˆ๋Š” commit message

pre-commit์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ํ†ต์ผ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ๊ฐ™์ด ๋˜๋‹ค๋ฅธ hook์ค‘ ํ•˜๋‚˜์ธ commit-msg๋ฅผ ํ†ตํ•ด์„œ commit ๋ฉ”์„ธ์ง€๋„ ๊ด€๋ฆฌํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ด์™• pre-commit์„ ํ™œ์šฉํ•˜๋Š” ๊น€์— ๋‹ค๋ฅธ hook๋“ค๋„ ์ ์šฉํ•˜๋ฉด ์ข‹์„

coderecording.tistory.com

 

๋Œ“๊ธ€