Github Actions 部署 Hexo

  • Github Actions 部署 Hexo 从此方便多了

  • 更新

    1
    19.12.26 初始
  • 资料来源:

    https://athorx.com/archives/17/
    https://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html

导语

  • Github Actions 是 Github 的持续集成服务,终于结束了内测,面向普通用户开放了.开源仓库可以永久免费使用,私有仓库每用有两千分钟的免费时间.
  • 可以把 Hexo 的部署搬到 Actions 上, 配合 Github 的私有库,这样每次只管写MD,部署等一个 push 解决.说的好像是写了多少博文似的😂
  • 这里只涉及与部署 Hexo 相关部分. 相关介绍详情见 GitHub Actions 入门教程 @阮一峰

需求

  • 只管写,一个 push 要能走完部署.
  • MD 文件与 Hexo 的配置分开,方便管理.

方案

  • 新建一个 Github 私库,这里名称是 Blog.
  • master 分支存放写完发布的 MD 文件.
  • dev 分支用来平时管理博客 MD 文件.写作完成合并到 master 分支.
  • Hexo 分支存放 Blog 的配置等,编译时候拉取.

开始前

  • 首先要确保本地的 hexo 已经可以正常编译.
  • GitHub Pages 可以正常浏览等.
  • 下面内容主要参考了 用GitHub Actions自动化发布Hexo网站到GitHub Pages

上传Bloig

  • 把 Blog/source/_posts 下的 MD 文件上传到master分支.
  • 其他的配置文件上传到 Hexo 分支. /public 和 /node_modules 不需要上传.在 .gitignore 中忽略即可.

生成部署密钥

  • Github Actions 其实是依照脚本运行一个容器,发布到Gihub Pages 需要一个新的密钥.

  • 生成密钥

    1
    2
    # rsa也不推荐了,改 ed25519了. 名称就是 github-actions-deploy
    ssh-keygen -b 4096 -t ed25519 -f ~/.ssh/github-actions-deploy
  • 生成的私钥上传到 Blog 库的 Settings–>Secrets–>Add a new secret . 名称随意,但要与下文引用保持一致.这里是 ACTION_DEPLOY_KEY.

  • 生成的公钥添加到 GitHub Pages 的 Settings–>Deploy keys–>Add deploy key .

workflows

  • workflow (工作流程):持续集成一次运行的过程,就是一个 workflow.

  • job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务.

  • step(步骤):每个 job 由多个 step 构成,一步步完成.

  • action (动作):每个 step 可以依次执行一个或多个命令(action)

  • 在 steps 中我们可以引用他人已写好的 action 非常方便.

  • workflow 在 .github/workflows 文件夹(没有新建) 下,格式是 .yml .文件名即 workflow 名.这里以 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    name: Deploy Blog

    on: # 只在master push 时运行
    push:
    branches:
    - master

    jobs:
    build: # 一项叫做build的任务

    runs-on: ubuntu-latest # 在最新版的Ubuntu系统下运行

    steps:
    - name: Checkout Hexo # 下载Hexo配置
    uses: actions/checkout@v2 #Action来自于 https://github.com/actions/checkout
    with:
    ref: Hexo

    - name: Checkout MD # 下载 MD 文件到 source/_posts
    uses: actions/checkout@v2
    with:
    ref: master
    path: source/_posts

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

    - name: Setup Hexo env
    env:
    ACTION_DEPLOY_KEY: ${{ secrets.ACTION_DEPLOY_KEY }}
    run: |
    # set up private key for deploy
    mkdir -p ~/.ssh/
    echo "$ACTION_DEPLOY_KEY" | tr -d '\r' > ~/.ssh/id_rsa # 配置秘钥
    chmod 600 ~/.ssh/id_rsa
    ssh-keyscan github.com >> ~/.ssh/known_hosts
    # set git infomation
    git config --global user.name 'jasper'
    git config --global user.email '[email protected]'
    # install dependencies
    npm i -g hexo-cli # 安装hexo
    npm i
    npm install --save github:theme-next/hexo-next-utteranc # 默认安装node模块的脚本好像没有安装 hexo-next-utteranc

    - name: Deploy
    run: |
    # publish
    hexo generate && hexo deploy # 执行部署程序
  • 有两个坑

    • 下载 master 分支时,注意 source/_posts 中 是/ . 不是 \.容器运行在 linux 无法识别 \.
    • 默认安装 node 的脚本没有正确安装 hexo-next-utteranc ,需要在后面补上一行安装命令.

生成

  • 把 workflows 推送到 master 分支.应该就触发了部署的动作.
  • 部署编译还是很快的,我这里仅用了 55s .当出现错误时基本是根据 log 和提示排查.

结语

  • 至此 Blog 的折腾要告一段落了,基本达到了自己的预期.接下来要努力把进度赶回来了.