使用 git hook 實現服務器代碼自動部署

前幾天把 Hexo 博客部署到了阿里雲服務器,但發現每次推送文章都須要去服務器同步代碼。最終尋找到 git hook 來解決了這個問題html

更新於 2017.11.14
首發於夏味的博客: xiaweiss.comgit

1. 說明

在服務器,要建一個至關於 github 存放功能的裸倉庫來存儲代碼。 之因此叫裸倉庫,是由於這個倉庫只是爲了存代碼用的,沒有工做目錄,不能夠在它裏面查看改寫代碼。github

在網站文件夾下,會有一個工做目錄來存放代碼,這個目錄的代碼能夠像clone github代碼庫同樣,clone 服務器裏的裸倉庫。vim

當服務器裏裸倉庫收到提交進來的代碼後,會觸發 git hook 的 post-receive 事件,配置好的程序就能夠自動去工做目錄的倉庫執行 git pull,服務器代碼就自動更新了bash

2. 配置步驟:

遠程鏈接服務器,登陸 root 帳號服務器

2.1 設置用戶

新增用戶xiawei,這裏能夠寫你的名字微信

useradd xiawei
複製代碼

修改用戶密碼post

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
複製代碼

修改代碼後,提交便可

歡迎添加我我的微信,互相學習交流
相關文章
相關標籤/搜索