背景
在配置 Hexo 和写博客的过程中,每次发布博客都要提交变更、hexo clean 和 hexo depoly,步骤实在是太繁琐。有没有一种方式可以实现自动化地部署博客呢?答案是有的。当前市面上有关自动化部署的工具确实不少,像常用的 jinkens、travis、circleci 和 GitHub Actions 等。
这里我就用 GitHub Actions 吧,毕竟博客是托管在 GitHub 上的,一套流程走下来也是方便的很。
Hexo
首先我们需要确保在本地已经安装了 hexo-cli,安装方式参见 官网。
其次,我们要在 GitHub 上部署 pages,参考 这里。
打开 Hexo 的配置文件 _config.yml
,确保配置文件中有以下配置:
deploy:
type: git
repository: git@github.com:smpower/smpower.github.io.git
branch: master
这里解释一下,上面配置的意思是使用 hexo-deployer-git
插件将 Hexo 生成的静态网站资源提交到 repository
仓库的 master
分支上。当我们访问博客的时候,实际上就是访问的这个分支的静态资源。
注意:请将 repository
改为你自己的仓库地址,并且将 branch
修改为你的 gh-pages 分支。
生成密钥
这里我们生成的密钥是用在仓库中的。
ssh-keygen -t rsa -b 4096 -C "Hexo Deploy Key" -f github-deploy-key-hi-ruofei-com -N ""
这会在当前目录下生成两个文件:
- github-deploy-key-hi-ruofei-com —— 私钥
- github-deploy-key-hi-ruofei-com.pub —— 公钥
Github 配置密钥
我们把 私钥
放在我们存放 Hexo 原始文件代码的仓库里面,用来触发 Actions 使用。
把 公钥
放在 GitHub pages 对应的仓库里面,用于 Hexo 部署时的写入操作。
配置私钥
首先在 GitHub 上打开保存 Hexo 原始代码的仓库,访问 Settings -> Secrets
,页面如下:
然后点击 New repository secret
:
Name
处填写 HEXO_DEPLOY_KEY_HI_RUOFEI_COM
,注意大小写,这个后面的 GitHub Actions Workflow 要用到,一定不能写错。
在 Value
处填写 github-deploy-key-hi-ruofei-com
中的内容:
添加了私钥以后的页面如下:
配置公钥
接下来我们需要访问存放网页的仓库,也就是 Hexo 部署以后的仓库,比如:yourname.github.io 这种,访问 Settings -> Deploy keys:
点击 Add deploy key
按钮来添加一个新的公钥:
在 Title 中输入:HEXO_DEPLOY_PUB_HI_RUOFEI_COM 字样,当然也可以填写其它自定义的名字。
在 Key 中粘贴 github-deploy-key-hi-ruofei-com.pub 文件的内容。
注意:一定要勾选 Allow write access 来打开写权限,否则无法写入会导致部署失败。
最后添加好了公钥的界面如下:
创建 Workflow
首先在 Hexo 的仓库中创建一个新文件:.github/workflows/deploy.yml,文件名可以自己取,但是一定要放在 .github/workflows 目录中,文件的内容如下:
name: Hexo Deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-18.04
if: github.event.repository.owner.id == github.event.sender.id
steps:
- name: Checkout source
uses: actions/checkout@v2
with:
ref: hexo # 这是你的 Hexo 源文件所在的分支
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: "14.x"
- name: Setup Hexo
env:
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY_HI_RUOFEI_COM }}
run: |
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.email "contact@mail.ruofei.site"
git config --global user.name "ruofei"
npm install hexo-cli yarn -g
yarn
- name: Deploy
run: |
hexo clean
hexo deploy
简单解释一下,当我们推送内容到远程 hexo 分支的时候,就会触发这个 Workflow。
使用 Ubuntu 18.04 作为 hexo deploy 的系统。
首先 checkout 源代码(在 hexo 分支),然后设置使用最新的 Node.js v14.x LTS 作为 node 解释器。
接下来就是创建 SSH 相关的配置文件,注意 secrets.HEXO_DEPLOY_KEY_HI_RUOFEI_COM 就是对应我们之前设置的私钥,所以名字一定不要搞错。
git config 相关的名字和邮件地址替换成大家自己使用的就好了。
最后就是安装 Hexo CLI,各个依赖模块和部署了。
验证
下面就是 GitHub Actions 页面显示的运行结果:
前面有绿色钩钩的,就表示部署成功,红色叉叉的表示失败。如果部署失败,还会收到 GitHub 的邮件提醒。
好了,以上就是利用 GitHub Actions 自动部署 Hexo 到 GitHub Pages 的方法,有疑问的请在下方留言哦 😊