阅读此篇文章之前,需具备hexo本地环境的搭建,会用git push到Github Pages上使得静态网站可以访问这样的能力。

同样,《Coding持续集成自动部署Hexo博客》还可以试试用Coding-Ci来做这个事情。

Github Actions做的事情,就是替代你之前在本地构建Hexo环境,并且每次更新还要git推送一次,而现在这一切都放到服务器端来处理,这使得你随时随地都可以发表博客文章,只要有设备能链接上Github即可。

而之前你不但要有链接的上的设备,还要有hexo的运行环境,如果在别的电脑来坐这个事情,那么过程必将是繁琐的,而且就算同步也不好使,因没法在移动端实现吧?

下面开始着手 Github Actions的实现,自己也折腾了许久才得以完成。

安装hexo必要插件

Github Actions用的是deploy 方式,得先在本地安装一下此插件 npm install hexo-deployer-git --save

如果你还有其他的插件,一并安装,这些信息应该会更新到 package.jsonpackage-lock.json 两文件,我之前失败可能是与此相关。如果有gulp这样的插件,可能还要写入部署配置文件中去 deploy.yml

这是2021年之前是需要的,现在2025年我没有验证是否需要,但我的package.json是有"deploy": "hexo deploy"的,应该还是需要的吧。

配置_config.yaml

在Hexo项目根目录配置文件 _config.yaml中加入如下代码配置,这个文件不是主题里面的那个,请注意。

1
2
3
4
deploy:
type: git
repo: [email protected]:你滴Github用户名/你滴Github用户名.github.io.git
branch: master

branch: master对应的是Github Pages仓库的settings→pages中Build and deployment下的Branch,如果你这里不是master,那么就要改为你仓库对应的,因为我的仓库2020年建立的时候就是master,不清楚现在新建是否默认还是master,如下图中的②所示:

github-settings-pages

密钥生成和Github配置

密钥生成

git命令生成公私秘钥 ssh-keygen -f github-actions-key如果你不知道密钥文件文件生成到哪里,可以用 dir命令回车看看当前目录存在哪些文件,或者 cd /d/ 这样就进入D盘根目录,执行上述命令生成即可,一路回车到底,一般默认是在Windows用户文件夹根目录,
完事后应该可以看到一个不带后缀名的文件(是为私钥)和一个带 .pub 后缀名的文件(是为公钥)。

如果你严格执行了我上述命令,那么文件名分别是私钥 github-actions-key 和公钥 github-actions-key.pub 通常前者文件大于后者,文件名跟我不一样也没有关系,反正有.pub的就是公钥,没有的就是私钥,按这个区分就好了。

Github配置

先去github创建一个Private仓库,同时你已经有公开的github pages仓库,这种仓库一般是 你的github用户名.github.io 命名的,并且这个仓库已经存在的,使得通过 你的github用户名.github.io可访问,如果你都不知道GithubPages做站点,那么建议先看如何通过Github来搭建静态网站吧!

配置公钥 github-actions-key.pub,用记事本打开这个文件,找到你的Github Pages仓库页面的设置(注意是仓库的设置页面而非帐号的设置页面),操作步骤大致为Settings → Deploy keys → Add deploy keyTitleHEXO_DEPLOY_PUB_KEY,把 github-actions-key.pub中的内容复制到Key框中。

配置私钥 github-actions-key私钥,找到你的Private仓库的设置页面(没有如果还没有创建,则先创建,此仓库创建时设置私有),按Settings → Secrets and variables → Actions → New repository secret 把私钥的内容添加进去,此时 Name中要严格填写 HEXO_DEPLOY_PRIVATE_KEY 否则就要修改 deploy.yml 相应代码。

Github Actions配置

Github Actions是在你创建的Private仓库中,把hexo源文件传到此仓库,源文件有如下,当然你也可以试试网页版直接上传这些文件和文件夹。

  • scaffolds文件夹
  • source文件夹
  • theme文件夹
  • _config.yml
  • package.json
  • package-lock.json

最后在Private仓库点击 Actions→set up a workflow yourself 对下面的代码做相应修改,粘贴进去,文件名我命名为 deploy.yml然后提交,便会自动开始运行。
下面代码指定了时区,不然可能会导致你用今天的日期写一篇文章后,尽管自动更新了,文章依旧不发表的问题,因为默认的时区比我们这里慢上好几个小时。下面代码还可在这里查看,更易于复制 https://gitee.com/ct2/web/blob/master/github-actions-hexo.md

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
# workflow name
name: Hexo Github Actions

# master branch on push, auto run
on:
push:
branches:
- master
# 对应配置_config.yaml中的字段,需要保持一致性

jobs:
# 子任务
build:
# 指定运行所需要的虚拟机环境
runs-on: ubuntu-latest

steps:
# check it to your workflow can access it
# from: https://github.com/actions/checkout
- name: Checkout Repository master branch
uses: actions/checkout@master

# from: https://github.com/actions/setup-node
- name: Setup Node.js 22.18.0
uses: actions/setup-node@master
with:
node-version: "22.18.0"

- name: Setup Hexo Dependencies
run: |
npm install hexo-cli -g
npm install

- name: Setup Deploy Private Key
env:
HEXO_DEPLOY_PRIVATE_KEY: ${{ secrets.HEXO_DEPLOY_PRIVATE_KEY }}
run: |
sudo timedatectl set-timezone "Asia/Shanghai"
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts

- name: Setup Git Infomation
run: |
git config --global user.name '这里要改写为你滴Github用户名'
git config --global user.email '这里要改写为你滴Github注册邮箱'
- name: Deploy Hexo
run: |
hexo clean
hexo generate
hexo deploy

上传到Github私有仓库

https://github.com/settings/tokens中创建一个用来上传的密钥吧,选择`token (classic),选择范围(Select scopes)仅需勾选workflow`即可,过期时间(Expiration)最大只能是1年有效期。

创建完成后,我们先把Github端的仓库克隆到本地吧,记得把命令cd到你需要克隆的所在目录,然后执行命令参考如下:

1
2
3
git config --global user.name "你的Github用户名"
git config --global user.email "你的Github邮箱"
git clone https://user-name:这里就是刚才创建的密钥@github.com/你的Github用户名/你滴Github仓库名(这里是用来存放hexo源码的私有仓库).git

然后把所需文件复制到这个仓库目录下再次执行命令,如果你直接打开cmd命令,那么你需要手动cd到仓库目录,所需文件一般是hexo的如下文件:

  • scaffolds文件夹
  • source文件夹
  • theme文件夹
  • _config.yml
  • package.json
  • package-lock.json

参考如下:

1
2
3
4
5
6
7
8
git init
git add .
git config --global user.name "你的Github用户名"
git config --global user.email "你的Github邮箱"
git commit -m 此次操作说明
git remote add origin https://user-name:这里就是刚才创建的密钥@github.com/你的Github用户名/你滴Github仓库名(这里是用来存放hexo源码的私有仓库).git
# git remote add origi 这条命令第一次需要用,第二次则不需要
git push origin master

仅供参考,大致是这么一个过程。