通过 GitHub Actions 自动部署 Hexo
GitHub Actions 由 GitHub 官方推出的工作流工具。典型的应用场景应该是 CI/CD,类似 Travis 的用法。这里介绍响应 git push 事件触发 Hexo 编译静态页面并推送到 GitHub Pages 的用法。
准备工作
- 生成 ssh 部署私钥
1
ssh-keygen -t ed25519 -f ~/.ssh/github-actions-deploy
- 在 GitHub repo 的
Settings/Deploy keys
中添加刚刚生成的公钥 - 在 GitHub repo 的
Settings/Secrets
中添加GH_ACTION_DEPLOY_KEY
,值为刚刚生成的私钥
编写 GitHub Actions
在项目的根目录添加
deploy.yml
,目录结构如下1
2
3.github
└── workflows
└── deploy.yml步骤
- 添加部署私钥到 GitHub Actions 执行的容器中
- 在容器中安装 Hexo 以及相关的插件
- 更新主题 NexT 的配置
- 编译静态页面
- 推送编译好的文件到 GitHub Pages
编写部署的 action
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41name: Main workflow
on:
push:
branches:
- raw
jobs:
build:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: Use Node.js lts
uses: actions/setup-node@v2-beta
with:
node-version: '12.x'
- name: prepare build env
env:
GH_ACTION_DEPLOY_KEY: ${{ secrets.GH_ACTION_DEPLOY_KEY }}
NEXT_VERSION: v8.0.0-rc.2
run: |
mkdir -p ~/.ssh/
echo "$GH_ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name 'gythialy'
git config --global user.email 'gythialy@users.noreply.github.com'
npm i -g hexo-cli
npm i
git clone --branch ${NEXT_VERSION} --depth=10 git@github.com:next-theme/hexo-theme-next.git themes/next
git checkout -b ${NEXT_VERSION}
git clone git@github.com:next-theme/theme-next-three --depth=1 themes/next/source/lib/three
# git clone git@github.com:next-theme/theme-next-fancybox3 --depth=1 themes/next/source/lib/fancybox
git clone git@github.com:next-theme/theme-next-pace --depth=1 themes/next/source/lib/pace
- name: deploy to github
env:
HEXO_ALGOLIA_INDEXING_KEY: ${{ secrets.HEXO_ALGOLIA_INDEXING_KEY }}
run: |
hexo generate && hexo algolia && hexo deploy
小结
总的来说,就部署 Hexo 而言,速度比 Travis 部署 速度更快一点,同时由于现在还处于测试阶段,功能相对还是比较欠缺一点。不过作为一站式的功能来说,还是不错的。
参考链接
- Workflow syntax for GitHub Actions
---EOF---