初試 Git hooks 自動部署

ericjj發表於2019-03-03

對於經常變動的網站來說, 手動部署是一件非常痛苦的事情

1. login remote host
2. cd ...
3. git pull
4. npm install
5. npm run XXX
...複製程式碼

如果是國內主機, 很容易就卡到 npm install 這個步驟, 如果是純靜態的網站, 可以把 npm install 等其他構建步驟放在本地來做, 然後把靜態檔案放在伺服器上再做對應處理.
之前的 Github 開源專案 經常會用 Travis CI 做持續整合, 然而對私有倉庫是收費的, 接下來嘗試了 Gitlab CI , Jenkins 等方式,
Gitlab CI 在本機上跑, 始終提示 command not found, Google 了一圈不見答案, 放在私有伺服器上, swap 馬上佔用完畢, 直接 kill 掉, 公司主伺服器不敢做嘗試 ( 大霧 ). 接著是 Jenkins, Jenkins 比較容易, 但是各種外掛和繁瑣配置頭疼不已, 尤其是對私有 gitlab, 私有 npm 等特殊配置, 顯得過於繁瑣, 再其次, 我們目前需要部署的專案結構比較簡單

初試 Git hooks 自動部署
目錄

所以說 簡單的 git hooks 就能滿足要求

1. 在 remote host 下建立空倉庫

git init -–bare demo // 建立空倉庫
cd demo // 進入目錄
git clone .... // 把程式碼 clone 到遠端主機
vim  hooks/post-receive // 建立指令碼檔案
 chmod +x post-receive // 增加執行許可權複製程式碼

post-receive 內容如下

  #!/bin/sh

  unset GIT_DIR

  echo "begin!!!"
  cd /home/username/demo/demo
  git pull
  pwd
  echo "end!!!"
  exit 0複製程式碼

2. 本機設定

cd ...demo // 到對應目錄
git remote  add prod  ssh://username@host:port/home/username/demo // 新增遠端倉庫
npm build
git push prod master // 部署 -> 啟動 shell 指令碼複製程式碼

初試 Git hooks 自動部署
執行截圖.png

3. 後續操作

後面只需要每次 npm build 之後 把 靜態檔案也 commit 上去, 然後啟動指令碼就可以啦?
nginx path 指向靜態檔案目錄就好啦 = =

相關文章