以前我在這篇文章裏面簡單的介紹了一下git鉤子,pre-commit與eslint的關係與做用git鉤子與eslint。
今天繼續介紹另外的兩個git鉤子,以及使用它們來進行簡單的自動化部署的兩個例子。html
Git鉤子就是git在特定的重要動做發生時觸發自定義腳本。vue
鉤子都被存儲在 Git 目錄下的 hooks 子目錄中。 也即絕大部分項目中的 .git/hooks 。 當你用 git init 初始化一個新版本庫時,Git 默認會在這個目錄中放置一些示例腳本。這些示例的名字都是以 .sample 結尾,若是你想啓用它們,得先移除這個後綴。react
Git 含有兩種類型的鉤子:客戶端的和服務器端的。客戶端的鉤子pre-commit以前介紹過了nginx
和自動化部署有關的鉤子有兩個,一個是post-update,一個是github基於post-update封裝的webhookgit
這裏先不談docker和jeckins,你們先想想部署的原理是什麼,部署就是服務器展現目錄裏面的文件變成最新的文件便可
咱們能夠手動把文件傳上去,也能夠進入服務器展現目錄,讓它去拉最新代碼便可
若是咱們經過shell腳本讓這個過程變成自動的,而且咱們能自動在某個時機執信shell腳本,是否是咱們就完成了自動化部署?github
This hook reacts to git push and updates reference(s) in its repository.
It executes on the remote repository once after all the refs have been updated.
本地git push,遠程倉庫xxx-bar.git全部文件更新完觸發這個鉤子執行咱們的shell腳本,進入www目錄(nginx上配置的展現目錄),從xxx-bar.git拉最新文件,完成自動化部署web
git init --bare xxx-bare.git
進入xxx-bare.git/hooks,在相關鉤子裏編輯腳本docker
cd /home/user/xxx-bare.git/hooks cp post-update.sample post-update vim post-update
下面再編輯post-update腳本shell
#!/bin/sh unset GIT_DIR DIR_ONE=/home/user/www/ #此目錄爲服務器頁面展現目錄 cd $DIR_ONE git init git remote add origin /home/user/xxx-bare.git git clean -df git pull origin master #核心代碼,自動部署的本質
在本地test目錄下 git clone 遠程服務端剛纔建立的裸庫xxx-bare.gitvim
git clone root@你本身服務器的ip:/home/user/xxx-bar.git
1.服務器權限的問題,我建議仍是我的擁有我的的服務器比較好,root權限,想怎麼整就怎麼整。若是用公司的服務器,ningx訪問的時候跨目錄可能出問題,ssh配置也可能出問題
。
這裏強烈推薦一下騰訊雲,最近作活動,88玩一年,安全耐操
0.1折服務器連接。買了不會玩的能夠私聊我,三陪政策,包教包會.....
2.ssh怎麼配
首先登陸遠程服務器,命令行輸入 ssh-keygen,生成ssh公鑰私鑰
其次本地首先看有沒有~/.ssh目錄,沒有的化也執行上面的操做
而後 scp ~/.ssh/id_rsa.pub [遠端主機名稱]:~/.ssh/authorized_keys (把本地共鑰複製到遠程服務器authorized_keys這個文件中)
再在本地的~/.ssh中添加一個config文件,裏面這麼寫
Host qq HostName 你的qq服務器ip Port 22 User root IdentityFile ~/.ssh/id_rsa
大功告成,當在控制檯輸入ssh qq 就自動臉上qq服務器了
介紹了post-update鉤子以及利用它進行簡單自動化部署的實例。並對其中各類可能遇到的問題作了說明。但願能給你們帶來一些幫助。原本準備把webhook也寫了的,可是因爲篇幅緣由,只能在下篇文章中介紹webhook,以及利用webhook部署一個真實的vue項目啦。
題外話,寫文章真的很辛苦,寫了這麼久了,居然一個打賞也沒收到,已哭暈。有沒有哪位大哥能給個打賞,讓我開開葷,支持支持我唄......