簡介
在我們的開發過程中,我們不可避免的會用到版本控制。當然,這也致使你對Git
和SVN
有所瞭解。兩者都是出色的版本控制工具,我個人比較習慣用Git
,當然這可能和個人習慣有關。不知道大家一開始是怎麼使用 git
進行開發的,反正我個人是先將程式碼提交到 github
倉庫,然後用SSH
登入到伺服器,然後進行克隆或者版本更新。聽起來就很麻煩,當然實際操作中也很麻煩,那麼有什麼可以 “一勞永逸“ 的辦法呢?請往下看!
簡單使用
Git 鉤子
什麼是git鉤子呢?官方解釋有些長,簡單來說就是一個在特定環境下觸發的指令碼。這個解釋可能不太準確,但是我認為這樣更容易理解一些,想了解更多的,可以去Git官網檢視,下面我們就用鉤子實現自動化部署。
第一步:建立git使用者
登入我們的伺服器,這裡預設你已經安裝好了git。建立一個git使用者:
# 建立一個名叫jouzeyu的使用者
adduser jouzeyu
第二步:給git使用者新增許可權
#在根目錄下的 home 資料夾下建立一個git資料夾
mkdir /home/git
#切換到建立好的git資料夾
cd /home/git
#建立 .ssh資料夾,裡面主要用來放公鑰
mkdir .ssh
#切換到.ssh資料夾並建立authorized_keys檔案
cd .ssh
touch authorized_keys
第三步:配置git並獲取公鑰
#在本地配置使用者名稱和郵箱,我的使用者名稱預設為jouzeyu
git config --global user.name "jouzeyu"
git config --global user.email "your email"
注意:如果用了 --global 選項,那麼以後你所有的專案都會使用這裡配置的使用者資訊。如果要在某個特定的專案中使用其他名字或郵箱,只需在該專案下執行:
git config user.name "xxx" git config user.email "xxx"
OK,接下來我們獲取公鑰,請先檢視你的使用者下的
.ssh
資料夾中是否之前就含有公鑰和私鑰,我們需要尋找一對以id_dsa
或id_rsa
命名的檔案,其中一個帶有.pub
副檔名。.pub
檔案是你的公鑰,另一個則是私鑰。如果沒有請執行ssh-keygen
。
使用cat ~/.ssh/id_rsa.pub
命令可以獲取公鑰,複製它,使用vi
或者vim
命令把它貼上到我們之前建立的authorized_keys
檔案中,使用:wq
儲存。
第四步:初始化倉庫
建立一個存放git倉庫的資料夾:
mkdir /www/wwwroot/git
cd /www/wwwroot/git
初始化倉庫:
#初始化一個裸倉庫(強烈建議)
git init --bare website.git
#配置倉庫的許可權,讓我們之前建立好的git使用者jouzeyu能讀寫
chown -R git:git website.git
這裡必須注意,如果不給許可權,後面的
git pull
將會報錯,原因是沒有許可權寫入。關於裸倉庫和普通倉庫的區別簡單來說就是裸倉庫看不到專案檔案,普通倉庫和你的專案目錄一樣,只是多了一個.git
資料夾。
第五步:生成專案倉庫
這個也是在伺服器上進行的,同時說明一下/www/wwwroot/
是我的環境的根目錄。
#建立我伺服器上的專案目錄test
mkdir /www/wwwroot/test
#克隆倉庫
git clone /www/wwwroot/git/website.git
#設定許可權
chown -R git website
注意:一定要注意我的路徑,git倉庫是
/www/wwwroot/git
,專案倉庫是/www/wwwroot/test
。
第六步:克隆到本地
# 通過ip地址從配置好的線上倉庫拉取下來
git clone git@47.97.121.XXX:/www/wwwroot/git/website.git
# 如果有配置域名的話也可以通過域名拉取
git clone git@www.XXX.XXX:/www/wwwroot/git/website.git
因為公鑰的原因,這裡是不需要密碼的,如果成功你的電腦上會出現一個
website
的資料夾,如果報錯請檢查後再進行下面的操作。
第七步:測試上傳(git pull)
# 開啟剛才克隆下來的本地倉庫
cd website
# 建立README.md檔案
touch README.md
git add .
git commit -m"建立README.md檔案"
git push
不出意外已經正常上傳了,如果報錯請檢查許可權,上文提到過,如果還不行可以在下方評論。
第八步:新增鉤子
終於到重頭戲了,寫的比較細,所以比較麻煩一些。回到我們線上的伺服器,下面的是線上上操作的:
#切換到這個目錄
cd /www/wwwroot/git/website.git/hooks
# 生成post-receive檔案
touch post-receive
# 使用vim編輯
vim post-receive
在post-receive
檔案裡面貼上:
#!/bin/sh
# 列印輸出
echo '======上傳程式碼到伺服器======'
# 開啟線上專案資料夾
cd /www/wwwroot/test/website
# 這個很重要,如果不取消的話將不能在cd的路徑上進行git操作
unset GIT_DIR
git pull origin master
# 自動編譯vue專案,如有需要請去掉前面的#號
# npm run build
# 自動更新composer(我暫時沒試過)
# composer update
echo $(date) >> hook.log
echo '======程式碼更新完成======'
儲存後給post-receive
檔案加上執行許可權:
chmod +x post-receive
最後一步
在本地修改部分內容,然後提交推送git push
,可以看到我們已經實現了自動化部署。