利用Github Action实现Hexo博客自动化部署

文件配置

  1. github构建仓库blog用于存储博客源码
  2. 本地git clone仓库
  3. 将能够正常部署的hexo博客文档复制到本地git仓库中,执行提交push
  4. 创建 .github/workflows/Hexo-Auto-Deploy.yml文件并填入执行脚本(脚本在下面)

需要提交至blog源码目录结构如下:

微信图片_20220923101325

图中红框是必要的源码文件,其余是我写的git上传脚本,theme文件夹为非必要文件
Hexo-Auto-Deploy.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
name: Hexo Auto Deploy

on:
# 触发条件1:main 分支收到 push 后执行任务。
push:
branches:
- master
# 触发条件2:手动按钮
workflow_dispatch:

# 环境变量
env:
GIT_USER: # github用户名
GIT_EMAIL: # git提交email
GIT_DEPLOY_REPO: # 部署目标仓库,就是之前正常部署的仓库 我的是:xuxingchen1996/xuxingchen1996.github.io
GIT_DEPLOY_BRANCH: master # 部署目标仓库的分支

jobs:
build:
name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
runs-on: ubuntu-latest
if: github.event.repository.owner.id == github.event.sender.id
strategy:
matrix:
os: [ubuntu-20.04]
node_version: [16.x]

steps:
- name: Checkout
uses: actions/checkout@v2

- name: Checkout deploy repo
uses: actions/checkout@v2
with:
repository: ${{ env.GIT_DEPLOY_REPO }}
ref: ${{ env.GIT_DEPLOY_BRANCH }}
path: .deploy_git

- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node_version }}

- name: Configuration environment
env:
HEXO_DEPLOY_PRI: ${{secrets.GITEE_PRIVATE_KEY}}
run: |
sudo timedatectl set-timezone "Asia/Shanghai"
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
ssh-keyscan -t rsa gitee.com >> ~/.ssh/known_hosts
sudo chown -R runner:runner ~/.ssh
git config --global user.name $GIT_USER
git config --global user.email $GIT_EMAIL

- name: Install dependencies
run: |
npm install

- name: Deploy hexo
run: |
npm run deploy

若需要部署到阿里oss实现静态页面托管可追加以下代码

1
2
3
4
5
6
7
8
9
- name: Setup Aliyun OSS
uses: manyuanrong/setup-ossutil@master
with:
endpoint: oss-cn-beijing.aliyuncs.com # oss对应endpoint
access-key-id: ${{ secrets.OSS_KEY }}
access-key-secret: ${{ secrets.OSS_SECRET }}

- name: Deploy to aliyun
run: ossutil cp -rf public oss://xxxx/ # 对应的Bucket名字 覆盖式上传

OSS_KEYOSS_SECRET为阿里的AccessIDAccessSecret参照下方GITEE_PRIVATE_KEY的配置

github配置

看到上面的action脚本配置也能知道我们需要一套ssh密钥了,

  1. 用本地git命令行ssh-keygen重新生成一套rsa公钥私钥

  2. 按正常配置sshgithub的方式,将*.pub里的公钥添加到github账户ssh key

  3. id_rsa里的私钥添加在仓库的 Settings -> Secrets -> Actions 中,取个GITEE_PRIVATE_KEY的名字(因为之前做githubgitee交互所以用的这个名字,可以根据自己需要更改但也要更改脚本里的名字)存放私钥

  4. 到这里就可以写完博客直接执行push命令自动化部署了

    1
    2
    3
    git add .
    git commit -m '文件更新'
    git push