使用git hooks鉤子實現gitlab的代碼服務器自動更新

實現鉤子自動觸發流程圖:

因爲不是直接走的服務器的遠程庫所以不能直接使用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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章