使用git hook 實現nodejs項目自動部署

需求場景

本身寫了個項目。爲小程序提供後端。之前都是用nodejs本身寫工具的。前陣子經過同事瞭解到 git 有一些 hook 能夠幫咱們作這些操做,更合理和方便。用了 git hook 能夠實現提交代碼以後自動在服務器上部署。而不用手動去作一些操做。因此就查閱學習了一波。node

需求分析

實現上述需求大概思路是,在 push 代碼的時候用回調一個腳本或者方法來執行一些部署的操做。其中能夠用 git 的 post-receive 這個 hook 來實現 push 完的時候,調用 shell 腳本。
也能夠用 git webhook 在 push 完成的時候調用一個接口。而後本身寫個部署的工具,對外暴露一個部署接口,提供給 git webhook 來調用。
我本身用了 gogs。若是在界面中操做的話就是以下兩張圖:linux

clipboard.png

在項目的 Settings 中找到 webhooks ,而後輸入對外的 payload url 便可。git

或者在項目的 Settings 中找到 git hooks,而後編輯 post-receiveweb

clipboard.png

而後,就出現了 shell 腳本輸入的界面。shell

具體實現細節

梳理了大概的思路,下面就是作。雖然圖形界面操做方便,可是通過查閱資料發現,直接在git項目中建立 git hooks 更方便。具體細節以下:
進入項目目錄,找到 hooks 目錄。而後看到以下目錄結構npm

clipboard.png

默承認能不存在 post-receive 這個文件,咱們能夠複製一份 post-receive.sample 文件重命名爲 post-receive。
而後再 post-receive 文件中寫一些部署操做的 shell 腳本就能夠了。
當前,個人項目是一個後端項目。因此首先,咱們須要把本項目文件直接 clone 到服務器的一個目錄下 命令以下:json

sudo git --work-tree=/目標目錄 --git-dir=/一般是.git結尾的項目目錄 checkout -f

根據實際狀況就改爲本身的目錄結構便可。
其次,咱們須要 npm install 而後再 npm run build,並且,npm run build 還應該在 npm install 執行完畢以後再執行。因此命令以下:小程序

npm install && npm run build

固然,若是咱們須要使用 pm2 ,直接在 package.json 中定義 build script 以下便可:後端

clipboard.png

接着咱們會發現,當前用戶多是git用戶在調用 shell 腳本。因此咱們要先切換用戶。shell 裏邊切換用戶怎麼寫呢?方法以下:服務器

sudo su - root <<EOF
命令1;
命令2;
EOF

注意,su 後邊有個 - ,不加這個短橫線表明直接切換用戶了。中間寫咱們要切換用戶後執行的命令就能夠了。
好了,貼出整個腳原本show一下:

clipboard.png

而後保存文件後,在本地提交下代碼試一下,齊活,正常從新部署了。

其餘

這個折騰的過程當中,發現一些比較實用的 linux 命令,這裏再強化下咯:

whoami 我是誰

whereis node 查找 node 在哪

相關文章
相關標籤/搜索