最近有個需求需要在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/ 了解更多的使用情況