使用Github Actions自动部署Hexo博客

介绍

本文将介绍如何利用Github Actions功能自动部署博客。这样本地就不需要安装Node.js以及Hexo包,写完文档直接push到远程仓库,由Github Actions自动部署到博客网站上。由于本网站现阶段托管于github.io,因此我目前的需求是,推送博客文章的更改后,生成对应的静态网页,最后将静态网页内容自动推送到 username.github.io 这个仓库中。

必要的准备

测试常规Hexo部署流程

参考Hexo Doc

  1. 安装 hexo-deployer-git

    1
    $ npm install hexo-deployer-git --save
  2. 修改Hexo项目的根目录中的_config.yml文件

    1
    2
    3
    4
    5
    6
    deploy:
    type: git
    repo: <git@github.com:username/username.github.io.git>
    branch: master
    name: <your-username?
    email: <your-email>

    使用hexo clean && hexo g -d 命令测试常规Hexo部署流程是否正常。

创建两个仓库

Hexo部署文档中有过说明,最好将Hexo项目目录与静态博客网页分别使用两个Git仓库管理,因此我们准备两个仓库。

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

配置密钥

  1. 生成一个RSA密钥专供GitHub Actions部署Hexo网页使用

    1
    $ ssh-keygen -f github-deploy-key

    当前目录下会有github-deploy-key(私钥)和github-deploy-key.pub(公钥)两个文件。

  2. 配置部署密钥
    2.1 复制公钥,设置为username.github.io仓库的部署密钥(Settings -> Deploy keys -> Add deploy key

    • Title 填写 HEXO_DEPLOY_PUB
    • Key 填写复制的公钥
    • 勾选Allow write access选项

    2.2 复制私钥,设置为my-blog项目的密文(Settings -> Secrets -> Add a new secret

    • Name填写HEXO_DEPLOY_PRI
    • Value填写复制的私钥

编写Workflow

Github使用workflow定义Github Actions的执行的环境与命令,作用类似于Gitlab中的.gitlab-ci.yml

  1. 在Hexo项目根目录下新建文件

    1
    2
    $ mkdir -p .github/workflows
    $ touch .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
    name: Hexo-CI

    on:
    push:
    branches:
    - master

    env:
    GIT_USER: your-github-username
    GIT_EMAIL: your-github-email
    THEME_NAME: hexo-theme-fluid
    DEPLOY_REPO: username/username.github.io
    DEPLOY_BRANCH: master

    jobs:
    build:
    name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
    runs-on: ubuntu-latest
    strategy:
    matrix:
    os: [ubuntu-latest]
    node_version: [14.x]

    steps:
    - name: Checkout
    uses: actions/checkout@v2
    with:
    ref: master


    - name: Checkout deploy repo
    uses: actions/checkout@v2
    with:
    repository: ${{ env.DEPLOY_REPO }}
    ref: ${{ env.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 github.com >> ~/.ssh/known_hosts
    git config --global user.name $GIT_USER
    git config --global user.email $GIT_EMAIL


    - name: Install dependencies and theme
    run: |
    npm install
    npm install --save ${{ env.THEME_NAME }}

    - name: Deploy hexo
    run: |
    npm run deploy
  3. 整理Hexo目录,推送更改到my-blog仓库
    .gitignore中应该包含对 public/, .deploy_git/ 等由于Hexo生成静态网页的文件夹的排除

  4. 查看部署结果
    查看my-blog仓库中Actions,可以看到本次推送触发Actions的执行结果。

模板参数说明

  • name 为此 Action 的名字
  • on 触发条件,目前含义为,当master分支收到推送后,触发Actions
  • env 为一些环境变量,默认变量参考环境变量 on Github Docs
  • env.GIT_USER 为 Hexo 编译后使用此 git 用户部署到仓库
  • env.GIT_EMAIL 为 Hexo 编译后使用此 git 邮箱部署到仓库
  • env.THEME_NAME 为您的 Hexo 所使用的主题的仓库,这里为 hexo-theme-fluid
  • env.DEPLOY_REPO 为 Hexo 编译后要部署的仓库,写托管静态网页的仓库
  • env.DEPLOY_BRANCH 为 Hexo 编译后要部署到的分支,如果是非master分支,参考Hexo DocGithub仓库中settings->pages->branch处进行更改
  • jobs 为此 Action 下的任务列表,具体语法参考Job Vars on Github Docs
  • jobs.{job}.name 任务名称
  • jobs.{job}.runs-on 任务所需容器,可选值:ubuntu-latest、windows-latest、macos-latest。
  • jobs.{job}.steps.$.name 步骤名,编译时会会以 LOG 形式输出。

参考链接

  1. 利用 Github Actions 自动部署 Hexo 博客
  2. 使用 GitHub Actions 自动部署 Hexo 博客
  3. Github Actions Reference

使用Github Actions自动部署Hexo博客
https://gwzlchn.github.io/202106/Hexo-CI/
作者
Zelin Wang
发布于
2021年6月21日
更新于
2022年10月23日
许可协议