Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

用 git hook 實現自動化部署 #7

Open
JeffKko opened this issue Apr 25, 2019 · 0 comments
Open

用 git hook 實現自動化部署 #7

JeffKko opened this issue Apr 25, 2019 · 0 comments
Labels
CI/CD Node.js service Further information is requested

Comments

@JeffKko
Copy link
Owner

JeffKko commented Apr 25, 2019

用 git hook 實現自動化部署

前言

以前部署都是直接 github page 或整包丟到 nas 上 (靜態用Nginx開啟 8080 port; nodejs 則是 ssh 到 機器上 node index.js), 每次更新一次版本都要做一次重複的動作, 實在是太麻煩了, 所以找找看有沒有實現 CI/CD 的方案, 大致看了一下有兩個不錯的服務可以用

  1. now.sh
  2. heroku

now.sh

部署最方便, 只要下指令 now, 就可以完成部署, 而且可以加入 now.json 去執行 package.json 的 script, 但必須把 server 端的code 寫成 lambda (server less) 架構, 所以先不考慮, 之後再研究這種架構有什麼好處

heroku

其實部署也算方便, 而且 heroku 看到 package.json 就會知道部署的是 nodejs, 並執行 npm run build && npm run start, 這也算是直接完成了 CI/CD, 不過當初部署完才發現免費版無法在部署的機器上對外發出 request (付費版也有流量限制), GG

自己實現 git hook

最後... 還是把程式部署在自己的機器上比較方便, 那就自己來實現 CI/CD

在 nas 上初始化 git 倉儲

git init 是建立一個普通的倉儲, git init --bare 則是建立前者 .git 資料夾裡面的東西, 並且是不能瀏覽或修改倉儲內的東西的

$ cd volume1/HelloGit #這名字有點憨
$ mkdir deploy.git
$ cd deploy.git
$ git init --bare

設置 hook

$ cd hooks
$ cp post-update.sample post-update
$ chmod 777 post-update
$ vi post-update

先隨便 echo 測試看看

#!/bin/sh
unset GIT_DIR
echo "done~~~~~~"
exit 0

在本地端加入 remote server repo

$ git remote add deploy root@ip:/volume1/HelloGit/deploy.git
$ git push deploy master

看到 done~~~~~, 看來是成功了

image

在根目錄部署點 clone server repo

$ cd ~/www
$ git clone /volume1/HelloGit/deploy.git
$ chmod 777 -R ../deploy

部署的機器上安裝 pm2

pm2 (performance manager) 是一個管理 nodejs server 運行狀態的一個模組, 可以幫你管理附負載平衡, 實現 hot reload 等等的功能

$ npm install -g pm2

測試是否安裝成功

$ pm2 -v

修改 post-update

#!/bin/sh
unset GIT_DIR
NowPath=`pwd`
DeployPath="/volume1/homes/b3589481400/www/deploy"
cd $DeployPath
git add . -A && git stash
git pull origin master
npm install
npm run build
pm2 restart all

cd $NowPath
echo "deploy success !"
exit 0

之後本地端再改個東西 push 一次

這時發生了問題... npm & pm2 command not found !!??

image

後來找到這篇 解答

#!/bin/sh 改成 #!/bin/bash -l

-l 參數的意思是執行指令時, 是在login 的 shell 裡執行, 以此例來說就是繼承 b3589481400 這個使用者的路徑和 shell 設定值, 這樣就能使用 npm 等等的指令了

...再 push 一次試試看

image

大功告成 !!

@JeffKko JeffKko added service Further information is requested Node.js CI/CD labels Apr 25, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CI/CD Node.js service Further information is requested
Projects
None yet
Development

No branches or pull requests

1 participant