使用Github Actions自动部署Hexo博客
介绍
本文将介绍如何利用Github Actions功能自动部署博客。这样本地就不需要安装Node.js
以及Hexo
包,写完文档直接push到远程仓库,由Github Actions自动部署到博客网站上。由于本网站现阶段托管于github.io
,因此我目前的需求是,推送博客文章的更改后,生成对应的静态网页,最后将静态网页内容自动推送到 username.github.io
这个仓库中。
必要的准备
测试常规Hexo部署流程
参考Hexo Doc,
安装 hexo-deployer-git
1
$ npm install hexo-deployer-git --save
修改Hexo项目的根目录中的
_config.yml
文件1
2
3
4
5
6deploy:
type: git
repo: <git@github.com:username/username.github.io.git>
branch: master
name: <your-username?
email: <your-email>使用
hexo clean && hexo g -d
命令测试常规Hexo部署流程是否正常。
创建两个仓库
Hexo部署文档中有过说明,最好将Hexo项目目录与静态博客网页分别使用两个Git仓库管理,因此我们准备两个仓库。
- 创建
my-blog
仓库存放Hexo项目目录 - 创建
username.github.io
仓库用来存放静态博客页面
配置密钥
生成一个RSA密钥专供GitHub Actions部署Hexo网页使用
1
$ ssh-keygen -f github-deploy-key
当前目录下会有
github-deploy-key
(私钥)和github-deploy-key.pub
(公钥)两个文件。配置部署密钥
2.1 复制公钥,设置为username.github.io
仓库的部署密钥(Settings -> Deploy keys -> Add deploy key
)- Title 填写
HEXO_DEPLOY_PUB
- Key 填写复制的公钥
- 勾选
Allow write access
选项
2.2 复制私钥,设置为
my-blog
项目的密文(Settings -> Secrets -> Add a new secret
)- Name填写
HEXO_DEPLOY_PRI
- Value填写复制的私钥
- Title 填写
编写Workflow
Github使用workflow定义Github Actions的执行的环境与命令,作用类似于Gitlab中的.gitlab-ci.yml
在Hexo项目根目录下新建文件
1
2$ mkdir -p .github/workflows
$ touch .github/workflows/deploy.yml编辑
deploy.yml
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63name: Hexo-CI
on:
push:
branches:
- master
env:
GIT_USER: your-github-username
GIT_EMAIL: your-github-email
THEME_NAME: hexo-theme-fluid
DEPLOY_REPO: username/username.github.io
DEPLOY_BRANCH: master
jobs:
build:
name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
runs-on: ubuntu-latest
strategy:
matrix:
os: [ubuntu-latest]
node_version: [14.x]
steps:
- name: Checkout
uses: actions/checkout@v2
with:
ref: master
- name: Checkout deploy repo
uses: actions/checkout@v2
with:
repository: ${{ env.DEPLOY_REPO }}
ref: ${{ env.DEPLOY_BRANCH }}
path: .deploy_git
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node_version }}
- name: Configuration environment
env:
HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
run: |
sudo timedatectl set-timezone "Asia/Shanghai"
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name $GIT_USER
git config --global user.email $GIT_EMAIL
- name: Install dependencies and theme
run: |
npm install
npm install --save ${{ env.THEME_NAME }}
- name: Deploy hexo
run: |
npm run deploy整理Hexo目录,推送更改到
my-blog
仓库.gitignore
中应该包含对public/
,.deploy_git/
等由于Hexo生成静态网页的文件夹的排除查看部署结果
查看my-blog
仓库中Actions,可以看到本次推送触发Actions的执行结果。
模板参数说明
name
为此 Action 的名字on
触发条件,目前含义为,当master分支收到推送后,触发Actionsenv
为一些环境变量,默认变量参考环境变量 on Github Docsenv.GIT_USER
为 Hexo 编译后使用此 git 用户部署到仓库env.GIT_EMAIL
为 Hexo 编译后使用此 git 邮箱部署到仓库env.THEME_NAME
为您的 Hexo 所使用的主题的仓库,这里为 hexo-theme-fluidenv.DEPLOY_REPO
为 Hexo 编译后要部署的仓库,写托管静态网页的仓库env.DEPLOY_BRANCH
为 Hexo 编译后要部署到的分支,如果是非master分支,参考Hexo Doc 和Github
仓库中settings->pages->branch
处进行更改jobs
为此 Action 下的任务列表,具体语法参考Job Vars on Github Docsjobs.{job}.name
任务名称jobs.{job}.runs-on
任务所需容器,可选值:ubuntu-latest、windows-latest、macos-latest。jobs.{job}.steps.$.name
步骤名,编译时会会以 LOG 形式输出。