假如现在有两个仓库,一个是存放网页静态文件的github.io仓库,为公有仓库;一个是存放博客源码的hexo仓库,因为里面的配置涉及到私人的密码信息,因此设置为私有仓库。

那么现在博客部署分为两步:见使用Hexo,换电脑也能更新博客

  • 当添加新文章或更改配置后,需要将源码push到私有仓库

  • 博客编译三步曲将网页静态文件上传到github.io.

    1
    2
    3
    hexo cl
    hexo g
    hexo d

有没有什么方法能实现全自动的博客部署, 每次只需要push源码到私有仓库,hexo会自动编译上传网页静态文件。

方法有很多,本文介绍一个Github新推出的功能–Actions.

首先介绍一下Github Actions:作为一种CI/CD工具(Continuous Integration/Continuous,持续集成/持续部署)它可以实现许多任务的自动化,能够进行测试,进行质量检查,然后部署。

这介绍有点官方,简而言之就是,当你将源代码push到Github之后,你可以自己定义一套操作流程。比如说你想让你的代码push上去之后在其他平台上看看会不会报错,那么你定义的流程就是首先将你上传的源码clone到本地(当然不是你的本地,类似于docker,都在云上),然后安装相关环境,再去执行你定义的操作。如果发现有什么错误信息,你好去修改你的源码。

拉回到本文的主题,我们想定义的一套流程是:当我push源码的时候,它会自动编译博客而不需要我再去执行那三步曲。

下面是具体步骤:

准备密钥

公钥+私钥

1
2
ssh-keygen -t rsa -C "Github邮箱地址"
# 比如 ssh-keygen -t rsa -C "123@gmail.com"

公钥内容:~/.ssh/id_rsa.pub

私钥内容:~/.ssh/id_rsa

密钥设置

  • github的Settings中,设置SSH keys为公钥内容,命名随意。

  • 在自己创建的私有仓库hexo的Settings中,设置Secrets,新增内容为私钥,命名为DEPLOY_KEY。

添加Actions配置文件

这一步就是定义当我们push源码后的操作:

  • 在Actions中新增workflow,点击Actions,然后新建workflows,这时GitHub会自动生成一个main.yml文件。

  • 最后修改main.yml文件,用如下内容替换去配置文件,你只需要修改下Git的配置信息,然后点击Start commit即可。

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
# workflow name
name: Hexo Blog CI

# master branch on push, auto run
on:
push:
branches:
- master

jobs:
build:
runs-on: ubuntu-latest

steps:
# check it to your workflow can access it
# from: https://github.com/actions/checkout
- name: Checkout Repository master branch
uses: actions/checkout@v2

# from: https://github.com/actions/setup-node
- name: Setup Node.js 10.x
uses: actions/setup-node@main
with:
node-version: "10.x"

- name: Setup Hexo Dependencies
run: |
npm install hexo-cli -g
npm install hexo-deployer-git --save
npm install

- name: Setup Deploy Private Key
env:
HEXO_DEPLOY_PRIVATE_KEY: ${{ secrets.DEPLOY_KEY }}
run: |
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts

- name: Setup Git Infomation
run: |
git config --global user.name "your name"
git config --global user.email "your email"
git config --global core.quotepath false
- name: Deploy Hexo
run: |
rm -rf .deploy_git
hexo clean
hexo generate
hexo deploy

当我们每次push源码的时候,Github Actions会自动执行上面的操作。

注意事项

  • 当push博客的静态网站文件到GitHub时,一定是master分支,不然博客Pages上不会更新内容。

  • 修改你博客根目录下的_config.yml文件,将HTTP修改为SSH形式,内容如下(将yourname改为自己的):

    1
    2
    3
    4
    deploy:
    type: git
    repo: git@github.com:yourname/yourname.github.io.git
    branch: master

img