使用 git hook 實現伺服器程式碼自動部署

一倍速的夏味發表於2019-03-03

前幾天把 Hexo 部落格部署到了阿里雲伺服器,但發現每次推送文章都需要去伺服器同步程式碼。最終尋找到 git hook 來解決了這個問題

更新於 2017.11.14
首發於夏味的部落格: xiaweiss.com

1. 說明

在伺服器,要建一個相當於 github 存放功能的裸倉庫來儲存程式碼。 之所以叫裸倉庫,是因為這個倉庫只是為了存程式碼用的,沒有工作目錄,不可以在它裡面檢視改寫程式碼。

在網站資料夾下,會有一個工作目錄來存放程式碼,這個目錄的程式碼可以像clone github程式碼庫一樣,clone 伺服器裡的裸倉庫。

當伺服器裡裸倉庫收到提交進來的程式碼後,會觸發 git hook 的 post-receive 事件,配置好的程式就可以自動去工作目錄的倉庫執行 git pull,伺服器程式碼就自動更新了

2. 配置步驟:

遠端連線伺服器,登入 root 賬號

2.1 設定使用者

新增使用者xiawei,這裡可以寫你的名字

useradd xiawei
複製程式碼

修改使用者密碼

passwd 你的新密碼
複製程式碼

給新增 sudo 許可權 通過修改 /etc/sudoers

必須使用命令

visudo
複製程式碼

按 i 鍵進入, 找到 root ALL=(ALL) ALL 然後下面新增 xiawei ALL = (ALL) ALL

root ALL=(ALL) ALL
xiawei ALL = (ALL) ALL
複製程式碼

2.2 安裝 git

檢視是否安裝 git

git --version
複製程式碼

如果沒有看到版本號,則繼續安裝 git

yum install git
複製程式碼

設定 git 使用者名稱郵箱

git config --global user.name "yourname"
git config --global user.email "your_email@example.com"
複製程式碼

2.3 建立git裸倉庫

假設網站的在 /www/blog/ 目錄下,建立裸倉庫

cd /www
sudo git init --bare blog.git
複製程式碼

更改所屬使用者和使用者組,獲得許可權

sudo chown -R xiawei:xiawei blog.git
sudo chown -R xiawei:xiawei blog
複製程式碼

2.4 建立工作目錄 git 倉庫

cd /www/blog
git clone /www/blog.git
複製程式碼

如果此時 blog 資料夾不是空的,會不能 clone 按先定義倉庫,再設定遠端倉庫地址即可

cd /www/blog
git init
git remote add origin /www/blog.git
複製程式碼

注意這時要刪除掉 index.html 等和本地待提交程式碼重複的檔案

rm index.html
複製程式碼

2.5 設定 git hooks

cd /www/xiaweiss.git/hooks/
vim post-receive
複製程式碼

按 i 鍵,將下面這幾行程式碼貼上進去

#!/bin/sh
unset GIT_DIR
cd /www/blog
git pull origin master
複製程式碼

賦予 post-receive 檔案可執行許可權

chmod +x post-receive
複製程式碼

2.6 本地 配置

最後修改 Hexo 配置檔案裡 deploy項,每次釋出程式碼會提交到這兩個倉庫

deploy:
- type: git
  repo: git@github.com:xiaweiss/xiaweiss.github.io.git
- type: git
  repo: xiawei@xiaweiss.com:/www/blog.git
複製程式碼

如果是本地的其他專案,可以直接

git clone xiawei@xiaweiss.com:/www/blog.git
複製程式碼

修改程式碼後,提交即可

使用 git hook 實現伺服器程式碼自動部署

歡迎新增我個人微信,互相學習交流

相關文章