切换到Hexo写博客后,每次换电脑都要来遍NodeJS、Hexo的配置。虽然不算困难,但挺消耗写文章的心情,故决定折腾下Github CI,实现写完文章后推送就自动完成Hexo的生成和部署,这样方便专注于文章的撰写,不被环境搭建分散精力。
设置仓库
准备两个仓库,一个为博客源码仓库,一个是静态页面仓库。
博客源码仓库:名称任意,设为私有
静态页面仓库:名称需按照xxx.github.io
格式来,必须设为公开的,存放Hexo生成的内容。参考https://pages.github.com/
设置密钥
为了向静态页面仓库推送内容,需要添加一对SSH密钥,其中公钥设置到静态页面仓库,私钥设置到源码仓库。
生成密钥
ssh-keygen -t ed25519 -C "your_email@example.com"
在Github的静态仓库页面,添加新的Deploy Key。在
Settings -> Deploy keys -> Add new
中,填入任意Title,Value则是新生成的公钥内容。由于要往此仓库推送,需勾选”Allow Write Access“。在Github的源码仓库页面,在
Settings -> Secrets -> Actions
中点击New repository secret
,Name设置为DEPLOY_KEY
(后面配置Github Actions的脚本时会用NAME索引到此secret),Value填入新生成私钥的内容
定义Workflows
在源码仓库根目录下,创建.github/workflows/hexo_deploy.yml
文件,内容如下:
name: HEXO_DEPLOY
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v2.5.0
with:
ref: master
submodules: 'true'
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Setup hexo
env:
ACTION_DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
run: |
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.email "qiaotanmail@gmail.com"
git config --global user.name "tanqiao"
npm install hexo-cli -g
npm install
- name: Hexo deploy
run: |
hexo clean
hexo deploy
修改源码仓库根目录Hexo的_config.yml
文件,设置deploy方式:
deploy:
type: git
repository: git@github.com:tanjoe/tanjoe.github.io.git
branch: master
注意Hexo部署到Git仓库的功能依赖于hexo-deployer-git
包。可以在源码仓库中执行npm install hexo-deployer-git --save
安装。
完成以上配置后,每次往源码仓库master分支推送,就会触发Hexo的部署,部署的目标则是静态内容仓库的master分支。