前言

Github Action和Git关系密切,要使用Github Action就得熟练使用Git

hexo项目的源码是保存在电脑某个文件夹上的,在我的电脑上存放位置为G:\hexo内,如果电脑硬盘突然损坏或者想在多台电脑上实现个人博客的同步管理,就很不方便。于是就把hexo项目的源码都托管在github上,既可以当做项目源码备份,又方便在别的PC上随时拉取项目进行内容更新或者新内容发布,还可以使用Github Action实现自动部署,一举多得。

当想在别的电脑上管理hexo项目时,只需要登录github,使用git将存储hexo源码的私有仓库拉取到本地,然后在新电脑上安装git和node.js,就可以进行内容管理了。以前安装过的各种插件、依赖等,都能通过npm install自动从package.json下载,从而恢复两台电脑一样的操作环境,每次更新项目内容时,都先使用git pull来拉取最新的远端仓库,这样就能保证无论在哪台电脑上,操作的都是最新的项目内容,就能实现多设备同步、备份的功能了。

在新电脑上需要做的操作如下:

  • 克隆仓库
  • 将旧电脑的ssh秘钥复制到新电脑。公钥已经在github上配置好了,可以直接使用,可以通过ssh -T git@github.com验证能否成功连接github
  • 安装Node.js环境(会附带安装npm)
  • 安装依赖(npm install),会把以前项目安装过插件或依赖的通过package.json安装到新电脑的node_modules文件夹下
  • 配置hexo。主要是_config.yml_config.butterfly.yml文件,不过git pull会拉取完整的配置文件到本地,同旧电脑上的配置相同
  • 创建新内容,写文章
  • 生成和发布

操作

获取github token

为了确保Github Action持续部署时具备足够的权限来进行 hexo deploy 操作,需要先获取 token

打开github首页,点击右上角的头像,然后选择设置开发者设置个人访问令牌令牌(经典)生成新令牌

令牌设置

成功获取令牌

新建仓库&设置token

  1. 新建仓库时一定要选择私有仓库,因为在接下来的配置中会用到 token,也只有我自己能操作这个仓库,如果 token 被盗用,别人可以肆意操作我的 github 仓库内容。

新建仓库

  1. 进入新建的仓库,根据下面的步骤把第一步获取到的github token设为变量存储,方便在yml文件中直接通过名称引用token值

设置token

git操作

  1. 删除G:/themes/butterfly/.git,因为主题文件夹下的.git文件夹的存在会导致其被识别成子项目,从而无法被上传到源码仓库
  2. 打开G:\hexo\.gitignore,用以下内容替换掉原来的内容
1
2
3
4
5
6
7
8
9
10
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
.deploy_git*/
.idea
themes/butterfly/.git

配置Github Action

G:\hexo\.github下新建workflows文件夹(G:\hexo.github\workflows),再在workflows文件夹内新建autodeploy.yml,输入如下内容,所有关于分支的内容都要用main

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
63
64
65
66
67
68
69
name: 自动部署hexo
# 当有改动推送到 main 分支时,启动Github Action
on:
push:
branches:
- main
release:
types:
- published

jobs:
deploy:
runs-on: ubuntu-latest
steps:
# 1. 检出代码
- name: 检查分支
uses: actions/checkout@v4

# 2. 安装 Node.js 环境
- name: 安装 Node
uses: actions/setup-node@v4
with:
node-version: "20.x"

# 3. 检查 Node 版本
- name: 检查 Node 版本
run: node -v # 检查 Node.js 版本,确保安装的是 v20.17.0

# 4. 安装 Hexo
- name: 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g

# 5. 缓存 node_modules 目录
- name: 缓存 Hexo
id: cache-npm
uses: actions/cache@v4
env:
cache-name: cache-node-modules
with:
path: node_modules
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-

# 6. 安装依赖项
- name: 安装依赖
if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
run: npm install --save

# 7. 生成 Hexo 静态文件
- name: 生成静态文件
run: |
hexo clean
hexo generate

# 8. 部署到 GitHub Pages
- name: 部署到 Github
uses: JamesIves/github-pages-deploy-action@v4
with:
token: ${{ secrets.HEXO_DEPLOY_TOKEN }} # 请确保 token 已在 GitHub Secrets 中配置
repository-name: 2819685584/2819685584.github.io
branch: main
folder: public
commit-message: "${{ github.event.head_commit.message }} Updated By Github Actions"

重新设置远程仓库和分支

  1. G:\hexo下执行如下命令,git init只需要执行一次,如果之前项目已经有.git文件,要先删掉该文件再执行
1
2
3
git init #初始化项目
git remote add hexo_source git@github.com:2819685584/hexo_source.git
git checkout -b main # 切换到main分支

git命令

  1. 可以通过git remote -v查看远端仓库,如果忘记远端仓库地址或者名称可以查看

远端仓库信息

提交更新&发布文章

  • git add . —> 将当前目录下的所有更改(新建、修改、删除的文件)添加到暂存区
  • git commit -m “备注信息” —> 将暂存区的更改提交到本地仓库,并附上简短的描述
  • git push origin main —> 将本地main 分支的更改推送到远端仓库,origin 是默认的远端仓库名称,也可以自行更改仓库名称,和地址关联起来就行
1
2
3
git add .  
git commit -m "备注信息"
git push origin main

查看部署情况

成功提交源码到github仓库并更新文章

部署详情

总结

后面再研究一下Github Action的工作原理和花样整活

  1. ssh秘钥、token与服务器的身份验证问题
  2. workflows工作流配置文件问题

Github Action使用的是Github的服务器(虚拟机、容器),相当于所有部署操作都要在虚拟机上先安装好部署所需要的环境和依赖,然后在虚拟机上进行部署,最后将数据同步到github pages或私有服务器(通过ssh秘钥或者token验证身份)。Github Action还能做许多其他自动化部署和测试工作,只是我目前还没有需求,不知道他还能应用在哪些场景下,当前实现的hexo源码的备份和自动化部署,每次只需要push源码到github私有仓库,就能同步实现文章发布。

Github Action还能与常用的Gitee、Vercel、Netlify结合,实现多平台同步更新,但是我没用过Vercel、Netlify,以后用到再研究,只需要修改autodeploy.yml文件即可。