用Github Action自动部署Hugo博客Public页面

在知道Github Action之前,我甚至没有托管我的博客源码,导致有些时候代码改乱了,也没有后悔药可以吃。在折腾J小将的博客的时候,实现了用Github Action部署Hugo博客,即,只需要push一次源码,然后自动生成静态文件到静态分支。

于是开始折腾自己的博客:开始把源码放到一个仓库(设为私密),公开的静态码放另一个仓库,每次只需要更新源码仓库即可。

写此帖记录一下处理步骤。

参考了一下两位的文章,非常有帮助:

https://zhuanlan.zhihu.com/p/403221054
https://dwye.dev/post/hugo-github-action/

简单描述一下步骤

首先需要在本地文件博客根目录创建/.github/workflows/gh-pages.yml,写一些配置。还需要生成一对SSH密钥来进行Github配对,分别是Secrey Key和Public Key,分别放在源码仓库和静态仓库的配置中。

Hugo

我这里是一个仓库nicopcat/Hugo-Sources存放源码,一个仓库nicopcat/nicopcat.github.io存放静态文件,主分支都是 main,有submodule,非extended版本。

生成SSH密钥

  1. 检查是否已经生成过SSH
    查找路径C:\Users\root\.ssh,里面有两个文件,一个是.pub格式,放的是可以公开的公钥(Public Key),另一个则是没有格式的密钥(Secret Key),不要与人分享。

  2. 也许你已经生成过密钥并由于种种原因放在了 Github - settings - SSH and GPG keys 里:
    ssh-key-settings 如果有,可能需要删除,不然会与接下来的配置冲突。

  3. 如果之前没有生成过密钥,则输入以下指令:

    ssh-keygen -t rsa - -C "$(git config user.email)"
    
  4. 在源码仓库,比如我的仓库nicopcat/Hugo-Sources下:

    • 找到 Settings - Secrets - Action
    • 看到Secret,就知道是要放密钥(Secret Key)
    • New repository secret ,新增密钥,将.ssh/里的密钥全部拷贝进来,内容以-----BEGIN OPENSSH PRIVATE KEY-----开头
    • 名字必须与下面github action workflows文件中的吻合,比如我的是ACTIONS_DEPLOY_KEY secret-key
  5. 在静态文件仓库,即nicopcat/nicopcat.github.io下:

    • 找到 Settings - Deploy Keys
    • Add deploy key ,新增公钥,名字可以随意取。将.ssh/里的公钥全部拷贝进来,内容以ssh-rsa:开头
    • 注意:要勾选 Allow write access deploy-key

添加workflows文件 配置 Github Action

在源码跟目录下新建 /.github/workflows/gh-pages.yml,内容如下,需要更改的地方为你自己的仓库、分支。

name: Deploy GitHub Page

on:
  push:
    branches:
      - main # 只在main上push触发部署

jobs:
  deploy:
    name: deploy github page
    runs-on: ubuntu-latest # 使用ubuntu系统镜像运行自动化脚本

    steps: # 自动化步骤
        - uses: actions/checkout@v2  # 第一步,下载代码仓库
            with:
                submodules: true  # 有submodules

        - name: Setup Hugo
            uses: peaceiris/actions-hugo@v2
            with:
                hugo-version: latest  # hugo版本
                extended: true  # 是否为extended版本

        - name: Build
            

        - name: Deploy
            uses: peaceiris/actions-gh-pages@v3
            with:
                external_repository: nicopcat/nicopcat.github.io # 静态文件仓库
                deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} # 密钥名
                publish_dir: ./public # 静态网页路径
                publish_branch: main

写好后把文件push上去即可。