前言

GitHub Actions 是一个CI/CD(持续集成Continuous Intergation/持续分发Continuous Delivery持续部署Continuous Deployment) 平台,可用于自动执行构建、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。

GitHub Actions文档

1、创建GitHub仓库

  • 创建一个名为username.github.io的公开(public)仓库,用于存放生成的静态页面,下面统一用公开仓库代表。注:username为你的github用户名
  • 再创建一个命名可随意的私人(private)仓库,用于存放Hexo的源码,下面统一用私人仓库代表。创建仓库时添加Add a README file文件,完成仓库初始化

2、在本地(Windows)生成密匙

在Git Bash中输入下面命令,一路回车生成密匙(注意生成的密匙路径):

1
ssh-keygen -f github-deploy-key

3、GitHub配置密匙

复制 github-deploy-key 文件内容,在私人仓库的Settings -> Secrets and variables -> Actions 中点击 New repository secret 添加私匙。

  • Name 输入框填写 HEXO_DEPLOY_PRI
  • Value 输入框填写 github-deploy-key 文件内容

(可选)再新建一个gitee 的私钥,用于存储 gitee 的密码

  • Name 输入框填写 GITEE_PASSWORD
  • Value 输入框填写 gitee 的密码

(可选)同步到私有服务器,新建一个私钥

  • Name 输入框填写SERVER_IPValue填入私有服务器IP
  • Name 输入框填写SSH_PRIVATE_KEYValue填入部署生成的私钥
  • 参考文章:CentOS部署Hexo博客

4、在公开仓库部署公钥

复制 github-deploy-key.pub 文件内容,在公开仓库 Settings -> Deploy keys -> Add deploy key 页面上添加

  • Title 输入框填写 HEXO_DEPLOY_PUB
  • Key 输入框填写 github-deploy-key.pub 文件内容
  • 勾选 Allow write access 选项(*)

5、创建 Workflow

  1. 在本地博客的.github目录下,新建workflows文件夹,并添加文件deploy.yml
  2. 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# Action 的名字
name: Hexo Workflows

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

# 这里放环境变量,需要替换成你自己的
env:
# Hexo 编译后使用此 git 用户部署到 github 仓库
GIT_USER: hexo
# Hexo 编译后使用此 git 邮箱部署到 github 仓库
GIT_EMAIL: 8888888888@qq.com
# Hexo 编译后要部署的 github 仓库
GIT_DEPLOY_REPO: hexo/hexo.github.io
# Hexo 编译后要部署到的分支
GIT_DEPLOY_BRANCH: master

# Hexo 编译后使用此 gitee 用户部署到gitee仓库
GITEE_USER: hexo
# Hexo 编译后要部署的 gitee 仓库
GITEE_DEPLOY_REPO: hexo/hexo
# Hexo 编译后要部署到的分支
GITEE_DEPLOY_BRANCH: master

# 注意替换为你的 GitHub 源仓库地址
GIT_SOURCE_REPO: [email protected]:hexo/hexo.github.io.git
# 注意替换为你的 Gitee 目标仓库地址
GITEE_DESTINATION_REPO: [email protected]:hexo/hexo.git

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-latest]
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.HEXO_DEPLOY_PRI}}
run: |
sudo timedatectl set-timezone "Asia/Shanghai"
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
# coding 已取消同步
ssh-keyscan -t rsa e.coding.net >> ~/.ssh/known_hosts
ssh-keyscan -t rsa gitee.com >> ~/.ssh/known_hosts
git config --global user.name $GIT_USER
git config --global user.email $GIT_EMAIL

- name: Install dependencies
run: |
npm install hexo-cli -g
npm install

- name: Deploy hexo
run: |
npm run algolia
npm run deploy
- name: Sync to Gitee
uses: wearerequired/git-mirror-action@master
env:
# 直接使用了 HEXO_DEPLOY_PRI
SSH_PRIVATE_KEY: ${{ secrets.HEXO_DEPLOY_PRI }}
with:
# GitHub 源仓库地址
source-repo: ${{ env.GIT_SOURCE_REPO }}
# Gitee 目标仓库地址
destination-repo: ${{ env.GITEE_DESTINATION_REPO }}
# 同步到私有服务器
# - name: Sync to Server
# uses: wlixcc/[email protected]
# with:
# username: 'git'
# server: '${{ secrets.SERVER_IP }}'
# ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}
# local_path: './public' # 私有服务器本地存放文件夹
# remote_path: '/home/hexo' # 私有服务器本地存放路径

# 同步到Gitee
- name: Build Gitee Pages
uses: yanglbme/gitee-pages-action@main
with:
# 你的 Gitee 用户名
gitee-username: ${{ env.GITEE_USER }}
# 注意在 Settings->Secrets 配置 GITEE_PASSWORD
gitee-password: ${{ secrets.GITEE_PASSWORD }}
# 你的 Gitee 仓库,仓库名严格区分大小写
gitee-repo: ${{ env.GITEE_DEPLOY_REPO }}
# 要部署的分支,默认是 master,若是其他分支,则需要指定(指定的分支必须存在)
branch: ${{ env.GITEE_DEPLOY_BRANCH }}
  1. 同步到Gitee需要到Gitee个人设置SSH公钥中添加github-deploy-key.pub
  2. 若自动化过程中npm run algolia运行报错,大概率是db.json没有上传导致的(不需要搜索功能更新的,可删掉)
  3. npm run deploy运行报错,修改_config.yml的部署(repo)配置,如下所示:
1
2
3
4
5
# Deployment
deploy:
type: 'git'
repo: [email protected]:hexo/hexo.github.io.git
branch: master

6、将本地的Hexo源码上传到私人仓库,点击私人仓库的Actions即可看见自动化任务的运行