實現鉤子自動觸發流程圖:
因爲不是直接走的服務器的遠程庫所以不能直接使用git hooks觸發,需要一個裸庫做跳板。
原理,當本地提交Git庫B的代碼到遠程gitlab庫的時候,同時提交本地git庫A的代碼到服務器端git庫A觸發hooks鉤子,服務器端觸發腳本進入到git庫B中進行git pull代碼的操作,以至於實現服務器端自動更新gitlab的功能。
一:服務器端操作
1、把服務器的公鑰加到雲端gitlab上,實現git更新權限 添加方式可以查看 添加公鑰
2、創建一個服務器普通用戶
adduser frank #添加用戶
passwd frank #更改密碼
3、 收集用戶公鑰,創建證書登錄,
然後將所有登陸用戶的公鑰保存在 authorized_keys 中,一行一個。
cd /home/frank/
mkdir .ssh
chmod 755 .ssh
touch .ssh/authorized_keys
chmod 644 .ssh/authorized_keys
3、進入服務器使用 ssh 的方式clone git庫B的代碼,文件名爲smallworld-api
4、創建服務器git裸倉庫A
mkdir mycode
chown frank mycode/
cd mycode
git init --bare test.git #初始化倉庫
chown -R frank test.git #更改所屬用戶
5、創建git裸庫A的/test.git/hooks鉤子腳本vim post-receive,保存退出
#!/bin/sh
unset GIT_DIR
#進入代碼庫B
cd /var/www/sites/frank/smallworld-api
#執行git pull命令
git pull
#返回倉庫A並退出
cd /var/www/sites/frank/mycode/test.git
exit 0
6、賦予權限
chmod +x post-receive
二:本地操作
1、本地clone git裸庫A
2、本地clone git庫B
3、本地創建一個shell腳本方便快捷提交與觸發鉤子
#!/bin/sh
##提交git庫B
git pull
git add Whitelist.php
git commit -m '測試鉤子'
git push origin master
##進入本地git庫A
cd /Users/xubin/Yikuyiku/zhuita_xin/mycode/test
echo "`date +%s` $@" >> test.txt
##觸發A服務器鉤子
git add test.txt
git commit -m 'test'
git push origin master