git鉤子與自動化部署(上)

1340.640.jpg


引言

以前我在這篇文章裏面簡單的介紹了一下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封裝的webhook
img.jpeggit

自動部署原理

這裏先不談docker和jeckins,你們先想想部署的原理是什麼,
部署就是服務器展現目錄裏面的文件變成最新的文件便可
咱們能夠手動把文件傳上去,也能夠進入服務器展現目錄,讓它去拉最新代碼便可
若是咱們經過shell腳本讓這個過程變成自動的,而且咱們能自動在某個時機執信shell腳本,是否是咱們就完成了自動化部署?github

post-update

定義

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

實操

  1. ssh 鏈接到遠程服務器 (看注意事項)
  2. 在/home/user目錄下新建一個www目錄 ,niginx展現頁指向www/index.html
  3. 在/home/user下初始化一個裸庫 git init --bare xxx-bare.git
  4. 進入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          #核心代碼,自動部署的本質
  5. 在本地test目錄下 git clone 遠程服務端剛纔建立的裸庫xxx-bare.gitvim

    git clone root@你本身服務器的ip:/home/user/xxx-bar.git
  6. 在本地剛克隆的xxx-bar.git裏面隨便添加一個index.html文件,而後git add .&& git commit -m 'dp' && git push
  7. 咱們能夠看到,遠程/home/user/www目錄裏面多了一個index.html,此時能夠經過瀏覽器訪問這個文件了
  8. 本地xxx-bar.git裏改變index,而後git add .&& git commit -m 'dp' && git push,刷新瀏覽器,能夠看到瀏覽器裏面到網頁也變化了,至此完成了自動化部署

注意事項

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項目啦。


題外話,寫文章真的很辛苦,寫了這麼久了,居然一個打賞也沒收到,已哭暈。有沒有哪位大哥能給個打賞,讓我開開葷,支持支持我唄......

相關文章
相關標籤/搜索