自动化部署的精髓在于 git 上传文章到远程仓库之后,
触发远程 hooks 进行 hexo 文章的生成和部署到网站目录

首先在服务器端对应目录建立 git 仓库

1
git init --bare <repo>

注意此时使用 --bare 参数建立的是一个裸仓库,该仓库不会保存工作树,仅仅保存 git 信息,一般在服务器端使用。并且 名称常为 .git 以示其为裸仓库

在本地 clone 当前项目

1
2
git clone username@address:path/<repo>
cd <repo>

设置好 git 用户名和邮件

1
2
git config user.name <name>
git config user.email <email>

使用 git hooks 实现服务器端裸仓库接受推送后自动部署,官方文档

在服务器仓库目录下

1
2
cd hooks
touch post-receive

在 post-receive 下添加以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
REMOTE_PATH=<repoPath>
DEPLOY_PATH=<hexoSourcePath>
WEBSITE_PATH=<websitePath>
rm -rf $DEPLOY_PATH
mkdir $DEPLOY_PATH
git --git_dir=$REMOTE_PATH --work-tree=DEPLOY_PATH checkout -f
echo "同步完成"
echo "开始生成"
cd hexoPath
hexo clean
hexo generate
rm -rf $WEBSITE_PATH/yourwebsite
mv yourwebsite $WEBSITE_PATH
echo "部署完成"

注意 git hooks 执行权限与 git 的用户权限一致,请注意权限管理避免出现 Permission denied

此时本地向远程仓库推送文章,远程 hexo 将自动 generate 并且将对应文件夹移动至网站目录,至此完成