自动部署博客

本文介绍通过 Github ActionsCloudflare Pages 服务两种方式自动部署博客。

Github Actions

生成用于仓库间推送的秘钥:

1
ssh-keygen -f hexo-deploy-key -t rsa -C "l1xnan@qq.com"

其会在当前路径生成两个文件:

  • 私钥: hexo-deploy-key
  • 公钥: hexo-deploy-key.pub

我们将博客源码放在代码仓:

1
https://github.com/l1xnan/blog.git

在此仓库下进入 Settings > Secrets and variables > Actions 中添加一个 Secret,名称为 HEXO_DEPLOY_KEY,值为 hexo-deploy-key 文件内容。后续在 Workflow 中通过名称 HEXO_DEPLOY_KEY 使用这个密钥。

Github Pages 部署在代码仓:

1
https://github.com/l1xnan/l1xnan.github.io.git

在此仓库下进入 Settings > Deploy keys 中添加 Deploy key,值为 hexo-deploy-key.pub 文件内容,同时勾选 Allow write access 选项。

模仿 Hexo 针对 Github Pages 官方帮助做一下调整。在博客源文件仓库 blog 添加文件 Workflow 配置文件.github/workflows/pages.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
name: Deploy Hexo

on:
push:
branches:
- master

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: checkout
uses: actions/checkout@v3

- name: nodejs
uses: actions/setup-node@v3
with:
node-version: 18

- name: Cache NPM dependencies
uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
restore-keys: |
${{ runner.OS }}-npm-cache

- name: env
env:
HEXO_DEPLOY_KEY: ${{secrets.HEXO_DEPLOY_KEY}}
run: |
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name 'l1xnan'
git config --global user.email 'l1xnan@qq.com'

- name: install
run: npm install

- name: build
run: npm run build

这样我们提交 blog 代码仓文件时,会自动触发 Action 构建,并自动推送到 l1xnan.github.io 仓库,完成博客更新。

对普通用户 GitHub Actions 提供了每月 2000 分钟的免费额度,触发一次 action 在 30s 左右,完全够用。如果使用 hugo 单次耗时会更短。
如果只是备份提交不想触发 Action,可以在提交信息中添加以下任何字符串:

  • [skip ci]
  • [ci skip]
  • [no ci]
  • [skip actions]
  • [actions skip]

或者,可以用两个空行结束提交消息,后跟:

  • skip-checks:true
  • skip-checks: true

参考: GitHub 操作:跳过工作流程运行

Cloudflare Pages

Cloudflare 也推出了 Pages 服务,使用 Cloudflare Pages 可以神方便的把 Hexo 部署到 Pages 中,且可以完全私有化部署,不要公开相关代码仓。

操作上非常方便,只要注册 Cloudflare 账号,进入面板,在 Pages 页中创建项目,关联到 Github,指定读取 blog 权限,根据页面引导填写一些配置,即可完成部署,提供免费域名,例如:https://l1xnan.pages.dev

这样我们每次提交 blog 仓,会触发部署构建,自动更新网站。Cloudflare Pages 每月免费 500 次构建。

如果想临时跳过构建和部署,可在提交信息中添加 [CI Skip][CI-Skip][Skip CI][Skip-CI] 或者 [CF-Pages-Skip] 标志(不区分大小写)。
注意和 GitHub Actions 共有的标志有 [skip ci][ci skip]