在Git Project在commit時加入hook

  • 88
  • 0

最近有個需求需要在git commit後,允許使用者在commit的當下,同時輸入一些內容做為參數去呼叫Jenkins,因此我採取的方法是在git project 下的.git/hooks/ 增加 post-commit 的檔案,然後再git commit之後,可直接在文字模式下進行互動,然後依照我輸入的東西做進一步的動作,以下就是我的 post-commit 的內容

這個bash script 會要求使用者輸入 y 或 n,然後做出對應的處理。譬如原先我的需求是commit後trigger Jenkins,那麼在輸入y時,就用curl去 call Jenkins的service (在這只表達 post-commit 的做法,不細講在curl Jenkins API時需要準備的內容)

#!/bin/sh
echo "[post-commit hook] Commit done!"

# 允許使用者輸入
exec < /dev/tty

while true; do
  read -p "[post-commit hook] call Jenkins ? (Y/n) " yn
  if [ "$yn" = "" ]; then
    yn='Y'
  fi
  case $yn in
      [Yy] ) 
	    curl -d "token={token}&team=ooo" -i -X POST http://{userId}:{userToken}@{JenkinsUrl}/job/{JobName}/buildWithParameters
	    break;;
      [Nn] ) 
	    exit;;
      * ) echo "Please Answer y or n.";;
  esac
done

當然 git hook不會只有在commit時,checkout、commit、push都行,可參考 https://githooks.com/ 了解更多的使用情況