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 中获取。

image-20240706203819169

2. 为私有仓库创建 Actions Secrets

进入私有仓库 HugoBlog - 点击 Setting - Secrets and variables - Actions - New repository secret

默认名为 MY_PAT,值为第一步生成的 token。

image-20240706204229980

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 中更新发布分支。

image-20240706205112933