Hugo 生成的静态资源在 /public/* 下,为了方便部署,可以在 GitHub 创建两个仓库。
一个名为 HugoBlog 存储 Hugo 整体资源,另一个名为 chousinbin.github.io 存储 /public/* 文件,发布网站。
为了方便两个仓库的同步部署,可以使用 GitHub Actions 帮助自动部署。
1. 创建 GitHub token
GitHub - 头像 - Setting - Developer settings - Personal access tokens - Generate new token
为 token 起一个名字,保质期设置为永久,勾选 workflow,生成 token。
注意:生成之后要立即复制 token 到一个安全地方,因为之后你将无法再次从 GitHub 中获取。

2. 为私有仓库创建 Actions Secrets
进入私有仓库 HugoBlog - 点击 Setting - Secrets and variables - Actions - New repository secret
默认名为 MY_PAT,值为第一步生成的 token。

3. 创建 Actions
在本地 HugoBlog 目录下创建 ./github/workflows/main.yaml 文件,复制以下内容到 main.yaml 中,并做出相应修改。
1name: GitHub Pages
2
3on:
4 push:
5 branches:
6 - master # 博客根目录的默认分支,这里是main,有时也是master
7 pull_request:
8
9jobs:
10 deploy:
11 runs-on: ubuntu-20.04
12 concurrency:
13 group: ${{ github.workflow }}-${{ github.ref }}
14 steps:
15 - uses: actions/checkout@v2
16 with:
17 submodules: true
18 fetch-depth: 0
19
20 - name: Setup Hugo
21 uses: peaceiris/actions-hugo@v2
22 with:
23 hugo-version: '0.127.0' # 填写你的hugo版本,可用hugo version查看
24 extended: true # 如果你使用的不是extended版本的hugo,将true改为false
25
26 - name: Build
27 run: hugo --minify
28
29 - name: Deploy
30 uses: peaceiris/actions-gh-pages@v3
31 if: ${{ github.ref == 'refs/heads/master' }} # 注意填写main或者master
32 with:
33 personal_token: ${{ secrets.HOGO}} # 如果secret取了其他名称,将MY_PAT替换掉
34 external_repository: chousinbin/chousinbin.github.io # 填写远程仓库,不一定是这个格式,按照自己的情况写
35 publish_dir: ./public
36 #cname: xinb.in # 填写你的自定义域名。如果没有用自定义域名,注释掉这行
4. 自定义域名
如果当前的网站自定义了域名,需要在 ./static/ 下创建 CNAME 文件,内容为域名,例如:
xinb.in
# 注意:不需要带协议和 www 子域名。
GitHub Pages 自定义域名需要将 CNAME 文件放在根目录,这样每当生成博客之后,CNAME 将复制到 ./public/ 目录下。通过自动部署之后 /public/ 内容复制到子仓库根目录中,相当于在根目录下。
5. 自动部署
完成以上步骤之后,对网站做出更改后,仅需推送主仓库 (HugoBlog) ,就会自动调用 GitHub Actions 推送静态资源到子仓库 (chousinbin.github.io)。使用自动部署,将在子仓库生成一个名为 gh-pages 的新分支。需要在 Setting - Pages 中更新发布分支。
