介绍


Github Actions 可以很方便实现 CI/CD 工作流,类似 Travis 的用法,来帮我们完成一些工作,比如实现自动化测试、打包、部署等操作。当我们运行 Jobs 时,它会创建一个容器 (runner),容器支持:Ubuntu、Windows 和 MacOS 等系统,在容器中我们可以安装软件,利用安装的软件帮我们处理一些数据,然后把处理好的数据推送到某个地方。

本文将介绍利用 Github Actions 实现自动部署 hexo 到 Github Pages,在之前我们需要写完文章执行 hexo generate --deploy 来部署,当你文章比较多的时候,可能还需要等待很久,而且还可能会遇到本地安装的 Node.js 版本与 Hexo 不兼容的问题。利用 Github Actions 你将会没有这些烦恼

前提


创建所需仓库

  1. 创建 blog-source 仓库用来存放 Hexo 项目
  2. 创建 your.github.io 仓库用来存放静态博客页面

生成部署密钥

使用终端输入以下内容,一路按回车直到生成成功

1
ssh-keygen -f github-deploy-key

当前目录下会有 github-deploy-keygithub-deploy-key.pub 两个文件

配置部署密钥

复制 github-deploy-key 文件内容,在 blog-source 仓库 Settings -> Secrets -> Add a new secret 页面上添加

  1. Name 输入框填写 HEXO_DEPLOY_RSA
  2. Value 输入框填写 github-deploy-key 文件内容

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

  1. Title 输入框填写 HEXO_DEPLOY_PUB
  2. Key 输入框填写 github-deploy-key.pub 文件内容
  3. 勾选 Allow write access 选项

编写 Github Actions

Workflow 模版

blog-source 仓库根目录下依次创建 .github/workflows/deploy.yml 文件

1
2
3
4
blog-source (repository)
└── .github
└── workflows
└── deploy.yml

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
name: Deploy Blog

on: [push] # 当有新push时运行

jobs:
build: # 一项叫做build的任务
runs-on: ubuntu-latest # 在最新版的Ubuntu系统下运行

steps:
- name: Checkout # 将仓库内master分支的内容下载到工作目录
uses: actions/checkout@v1 # 脚本来自 https://github.com/actions/checkout

- name: Use Node.js 13.14 # 配置Node环境
uses: actions/setup-node@v1 # 配置脚本来自 https://github.com/actions/setup-node
with:
node-version: "13.14"

- name: Setup Hexo
env:
HEXO_DEPLOY_RSA: ${{ secrets.HEXO_DEPLOY_RSA }}
run: |
# 部署私钥文件
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_RSA" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
# 设置git信息
git config --global user.name '笨蛋海绵'
git config --global user.email '1037886804@qq.com'
# 安装依赖项目
npm i -g hexo-cli
npm i

- name: Deploy
run: |
# publish
hexo generate && hexo deploy # 执行部署程序

执行任务

写一篇文章,pushblog-source 仓库的 master 分支,在此仓库 Actions 页面查看当前 task 任务进度

当任务完成后查看您的博客 https://your.github.io,如果不出意外的话已经可以看到新添加的文章了