以前嘗試部署代碼到服務器的方式有用到Github Hook或者ftp,但使用起來都有各自的缺陷,然后就發現了git hooks這個方法,查了一些資料再自己嘗試過后,覺得還不錯,記錄下簡單流程。
在服務器初始化一個遠程git倉庫
git init
和 git init --bare
的區別
初始化出來的倉庫是不一樣的,前者初始化的是一個普通的倉庫,其中 .git
文件夾是隱藏的,并且能看見該倉庫下所有的源碼。而后者初始化出來的倉庫中的文件,就是 .git
中的文件夾,但不能像前者那樣直接瀏覽或修改倉庫中的代碼。
使用 git init --bare
初始化一個遠程倉庫。
該倉庫是用于項目部署的。在我們本地開發完成后,將項目push至該倉庫后,將自動部署網站。
root@iZbp1cc04oqq: mkdir -p /git/laravle-vue.git
root@iZbp1cc04oqq: cd /git/laravle-vue.git
root@iZbp1cc04oqq: git init --bare
網站的根目錄git clone
服務器倉庫
root@iZbp1cc04oqq: cd /var/www/html
root@iZbp1cc04oqq: git init
root@iZbp1cc04oqq: git clone /git/laravel-vue.git
root@iZbp1cc04oqq: chmod -R 777 ../laravel-vue
為遠程倉庫設置一個 hook
root@iZbp1cc04oqq: cd /git/laravel-vue.git/hooks
root@iZbp1cc04oqq: vim post-receive
vim
編輯post-receive
#!/bin/sh
unset GIT_DIR
NowPath=`pwd`
DeployPath="/var/www/html/laravel-vue"
cd $DeployPath
git add . -A && git stash
git pull origin master
composer install --ignore-platform-reqs
#下面兩步是我同步vue代碼
#npm install #安裝npm包
#npm run production
cd $NowPath
echo "同步完成"
exit 0
該腳本添加可執行權限
root@iZbp1cc04oqq: chmod +x post-receive
為本地倉庫添加remote源
這個客戶端本地倉庫,即開發的機子的本地倉庫,添加remote源,以后往這個remote push代碼時,就會自動觸發上面的腳本。
$ git remote add deploy root@ip:/git/laravel-vue.git //服務器上我用的root用戶
$ git push deploy master
如圖
image