利用GitHub Actions进行Hexo的多镜像站部署

最简单的做法就是为每个镜像站额外维护一个配置文件

但这样做的缺点很明显, 一旦有更改, 就必须手动同步, 像git, svn这些版本控制系统都难以自动完成"对于部分项保留当前分支, 对于其它项合并其它分支"的工作我知道有git cherry-pick, 但我不会

好吧还是给一个思路, 从主站分支创建镜像站分支, 将需要保留且长期的项修改并提交到当前分支

每次主站commit, 自动记录commit编号, cherry-pick到分支站中

差不多就这样


接下来讲正解

首先要清楚镜像站之间的配置不同在哪里

大部分时候都是这样

1
2
3
4
5
6
7
8
9
10
11
# URL
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'
url:

# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: git
repo:
branch:

那么我们很明显需要一个东西来自动修改这些项

nodejs的解决方案是js-yaml

当然你也可以拿C/C++, shell或者其它的东西写, 本文就只讲nodejs解决方案

1
2
3
4
5
6
7
8
9
10
11
12
13
const fs = require('fs');
const yaml = require('js-yaml');

try {
let hexo_config = yaml.load(fs.readFileSync('./_config.yml', 'utf8')); // 主题配置文件也可以这样修改
// 例如deploy:
// repo:
// 可以写成deploy.repo = ''
fs.writeFileSync('./hexo-config.yml', yaml.dump(hexo_config), 'utf8'); // 将修改后的文件存在当前目录的hexo-config.yml中
}
catch (e) {
console.log(e);
}

接下来讲一下GitHub Actions的配置要点

1
2
3
4
5
6
on: 
# push:
# branches:
# - pages # pages分支有push时触发
watch:
types: [started] # 有人Star时触发
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
- name: Checkout Repository master branch
uses: actions/checkout@master
with:
ref: # 自行填写分支

- name: Setup Node.js 16.x
uses: actions/setup-node@master
with:
node-version: "16.x"

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

- name: Setup Deploy Key
run: |
mkdir ~/.ssh/
cp ./.ssh/id_rsa ~/.ssh/id_rsa # 复制ssh密钥, 可以选择存储在环境变量中
cp ./.ssh/id_rsa.pub ~/.ssh/id_rsa.pub
cp ./.ssh/known_hosts ~/.ssh/known_hosts
sudo chmod 0600 ~/.ssh/id_rsa # 权限不这样设会报错
sudo chmod 0600 ~/.ssh/id_rsa.pub
sudo chmod 0600 ~/.ssh/known_hosts

- name: Setup Git Information
run: |
git config --global user.name '' # 登录用户名
git config --global user.email '' # 登录邮箱

- name: Generate For FT
run: |
node ft-pages.js
cp "./hexo-config.yml" ./_config.yml # 如果修改了主题配置文件也要一起复制

- name: Deploy Hexo For FT
run: |
hexo clean
hexo generate
hexo deploy

晚安