使用Github Action和docker自动化部署hexo博客

简介

hexo博客可以通过hexo部署到用户的github page上,此时上传至github上的文件只是hexo生成的静态网页文件。而博客的源文件以及博客的配置始终保存在本地,这样会有丢失的风险。用户最好同时将blog的源文件做好版本管理,自然而然我们可以使用github来托管blog源文件。因为在github上需要同时托管两个repo:

  • blog仓库用来存放hexo博客的所有源文件以及配置
  • github.io的仓库用来托管github page的静态博客文件

在本地操作的时候,需要同时用git推送blog的修改,以及使用hexo d -g生成博客并部署。有没有一种方案可以将博客的源代码管理以及博客的部署统一到一步完成呢。

Github Action是实现CI/CD的利器,使用好github action能够很方便的让测试以及部署流程自动化。

hexo的环境配置可以使用dockerfile来一键配置。docker hub上已有许多可用的hexo环境的docker image。为了更好的使用hexo环境,我按照自己的习惯创建了一个hexo的docker环境,这个docker环境可以在CI中使用,自动化生成和部署博客。

准备

  • 创建blog仓库用于托管博客的所有源文件以及配置
  • 创建github.io的静态博客仓库
  • dockerfile用于配置CI的hexo环境
  • 配置部署密钥至github secrets中,通过CI调用ssh部署密钥来部署博客

CI workflow

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
name: deploy

on: [push]

env:
GIT_USER: WeiYUN13
GIT_EMAIL: yunwei_ecpkn@buaa.edu.cn
GIT_SSH_KEY: ${{secrets.HEXO_DEPLOY_KEY}}
HEXO_SERVER_PORT: "4000"

jobs:
deploy_hexo:
name: deploy hexo blog to http://weiyun13.github.io
runs-on: ubuntu-latest

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

- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1

- name: build hexo_in_docker image
run: |
mkdir -p ~/.ssh/
echo "$GIT_SSH_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
git clone git@github.com:WeiYUN13/hexo_in_docker.git ~/hexo_in_docker
cd ~/hexo_in_docker && docker build -t hexo_in_docker .

- name: start hexo_in_docker container and deploy
run: |
docker run --name=blog \
-e HEXO_SERVER_PORT=$HEXO_SERVER_PORT \
-e GIT_USER="$GIT_USER" \
-e GIT_EMAIL="$GIT_EMAIL" \
-e GIT_SSH_KEY="`cat ~/.ssh/id_rsa`" \
-e DEPLOY_NOW="yes" \
-v "$GITHUB_WORKSPACE":/blog \
-p "$HEXO_SERVER_PORT":4000 \
hexo_in_docker


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!