使用 GitHub Actions 把 Hugo 发布到 GitHub Pages

一、设置密钥

生成密钥

ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f gh-pages -N ""

得到 gh-pagesgh-pages.pub 两个文件

打开 GitHub 上 Hugo 项目代码库的 Setting 页面

二、添加配置文件

在 Hugo 项目该位置添加配置文件:.github/workflows/gh-pages.yml

文件内容照抄 GitHub Actions for Hugo

name: github pages

on:
  push:
    branches:
      - master

jobs:
  build-deploy:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1  # v2 does not have submodules option now
        # with:
        #   submodules: true

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: '0.62.2'
          # extended: true

      - name: Build
        run: hugo --minify

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
          publish_dir: ./public

这个 Workflow 一目了然

  1. 当推送到 master 分支时触发
  2. 运行 ubuntu
  3. 调用 checkout action 获取源代码
  4. 调用 hugo action 配置 Hugo
  5. 运行 Hugo 生成网站内容
  6. 调用 gh-pages action 把 ./public 目录下的内容提交到 gh-pages 分支

虽然自己定制还需要学习,但常见的自动化任务把别人写好的配置文件拿来用是很简单的。

三、运行

把 Workflow 文件提交、推送即可触发,Hugo 站点发布到 GitHub Pages。以后每次推送都会触发,以实现 Hugo 站点的自动发布。

最先注意到的静态站点生成工具是 Jekyll。这类静态站点生成工具大致是站点源码(框架代码、主题)和源内容(Markdown)是一拨,在此基础上生成的静态内容是一拨。Jekyll 因为是 GitHub 亲生的,你设置好,把源头的内容往代码库提交,GitHub 会自动帮你生成静态内容发布到 GitHub Pages。

不过不知道 Jekyll 就是被定位为发布代码更新消息的简单博客工具呢,还是因为被收购而无心恋战,Jekyll 的功能很久都没有什么增强,于是我就用上 Hugo 了。于是就有发布的问题。把内容混在一起是不可接受的,于是需要再引入 Jenkins、Travis 之类的工具。再后来呢,Netlify 很好用,但毕竟多一道工序。

所以 GitHub Actions 的好处,有些任务场景,不必要外包给第三方来完成的,可以直接在 GitHub 里做,省事。