hexo博客工作流CI(一键部署的快乐)

在日常写博客的过程中我常常使用 CI 部署,一开始我是使用Jenkins,后来觉得很丑且经常拉库失败(设置的 cron 是半小时拉取一次,然而常常 4-5 小时才能更新)

就转向了阿里的工作流,好看很多且界面操作也简单了许多,缺点就是个人使用实在是没必要,企业的话用起来还是很爽的。

再后来看到店长的文章以后就开始使用 Github Action,具体可以去看这篇文章

Github Action 优点

  1. 可以多域名多站点部署
  2. 不会出现从服务器去连接 github 连接不上的情况
  3. 可以一键多处全部部署完成 ✅
  4. 不再需要使用繁杂的前置命令

    hexo clean
    hexo bangumi -u #bilibili 番剧更新
    hexo generate
    hexo algolia
    gulp

比如我自己是在vercel, netlify, 服务器多吉云加速,三处部署。

大大提高可用性与速度。

工作流

在这里分享一下我的工作流,平时写完文章以后,配合 vscode 左侧的叉子,填写提交信息后,点击提交,立即就可以提交至源码仓库

通过源码仓库的 github action 推送至服务器与 github page 的仓库,vercelnetlify会自行拉取 github page 的仓库的更新,进而实现所有线路更新。

并且使用了店长分享的全站提交至 npm,并排除提交html文件大大减小 npm 包体积大小,具体可以去看这篇文章npm 图床使用

这使我可以随时使用静态资源文件(如 js,css,img 等),我只需修改package.json的版本即可实现资源更新,而丰富的 npm 镜像又让我的站点速度大大提升,极大的便利性使我得到了极其舒适的体验。

以下是该工作流部分代码,注意该工作流已解决使用 CI 更新时,hexo 更新时间不一致的问题。

autodeploy.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
name: 自动部署
# 当有改动推送到master分支时,启动Action
on:
push:
branches:
- master
#2020年10月后github新建仓库默认分支改为main,注意更改
release:
types:
- published

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 检查分支
uses: actions/checkout@v2
with:
ref: master
fetch-depth: 0
- name: Sync local file timestamps
run: |
git ls-files -z | while read -d '' path; do touch -d $(git log -1 --format="@%ct" "$path") "$path"; done

- name: 安装 Node
uses: actions/setup-node@v1
with:
node-version: "16.x"

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

- name: 缓存 Hexo
id: cache-npm
uses: actions/cache@v3
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 }}-

- name: 安装依赖
if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
run: |
npm install gulp-cli -g #全局安装gulp
npm install --save

- name: 生成静态文件
run: |
hexo clean
hexo bangumi -u #bilibili番剧更新
hexo generate
hexo algolia
gulp

- name: Deploy to Server
uses: easingthemes/ssh-deploy@v2
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-rltgoDzvO --delete"
EXCLUDE: ".well-known"
SOURCE: "./public/*"
REMOTE_HOST: ${{ secrets.SERVER_IP }}
REMOTE_PORT: ${{ secrets.REMOTE_PORT }}
REMOTE_USER: "你的用户名"
TARGET: "你的服务器绝对路径"

- name: 推送百度必应url
run: |
hexo deploy

- name: 部署到Github
run: |
cd ./public
git init
git config --global user.name "anzhiyu-c"
git config --global user.email "userEmail@gmail.com"
git add .
git commit -m '${{ github.event.head_commit.message }}'
git push --force --all https://xxxxxxToken@github.com/anzhiyu-c/anzhiyu-c.github.io

npmignore.js

1
2
3
4
5
6
7
8
9
10
11
12
13
hexo.extend.generator.register("npmignore", function (locals) {
// Object
return {
path: "/.npmignore",
data: `**/*.html
.github/
download/
ads.txt
CNAME
robots.txt
`,
};
});

npmpublish.js

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
/*
* @Description: npm
* @Author: 安知鱼
* @Email: 2268025923@qq.com
* @Date: 2022-02-22 12:13:18
* @LastEditTime: 2022-08-27 12:29:41
* @LastEditors: 安知鱼
*/
hexo.extend.generator.register("npmpush", function (locals) {
// Object
return {
path: "/.github/workflows/autopublish.yml",
data:
`name: Node.js Package
# 监测分支,2020年10月后github新建仓库默认分支改为main,记得更改
on:
push:
branches:
- master

jobs:
publish-npm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: "12.x"
registry-url: https://registry.npmjs.org/
- run: npm publish
env:
NODE_AUTH_TOKEN: ` + "${{secrets.npm_token}}",
};
});