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

需求場景

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

需求分析

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

clipboard.png

在項目的 Settings 中找到 webhooks ,然後輸入對外的 payload url 即可。

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

clipboard.png

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

具體實現細節

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

clipboard.png

默認可能不存在 post-receive 這個文件,我們可以複製一份 post-receive.sample 文件重命名爲 post-receive。
然後再 post-receive 文件中寫一些部署操作的 shell 腳本就可以了。
當前,我的項目是一個後端項目。所以首先,我們需要把本項目文件直接 clone 到服務器的一個目錄下 命令如下:

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 在哪

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章