Featured image of post 使用 Github Actions 在腾讯云 CloudBase 部署 Hugo

使用 Github Actions 在腾讯云 CloudBase 部署 Hugo

🌱 介绍

许多平台都提供了免费的静态页面托管的服务,如 Github PagesVercelNetlify等。但在国内由于一些“原因”,这些国外的服务在国内的访问并不稳定。

国内的免费托管平台如 Gitee 限制很多,不可以自定义域名而且之前出现了防盗链问题,访问也不是很快,不太推荐作为托管平台。

腾讯云推出的云开发 CloudBase 也有静态页面托管服务。其实它相比这些静态托管平台,有更多强大的功能,甚至能够搭一整套系统。虽然是付费服务,但是在按量付费的情况下资费不是很高,在博客访问量不是很高的情况下十分合适。

目前在腾讯云中暂时还没有 Hugo 的模板。目前有两种方式可以达到自动部署的功能:

  • 🌰 使用 Github Actions 编译,通过 Tencent CloudBase Github Action 自动部署到 CloudBase

  • 🌰 使用 Github Actions 编译,推送到 Web 应用托管(webify) 的简易静态页面模板。

🏖 使用 CloudBase

使用 CloudBse 时,使用按量计费环境会有一些免费用量。

☁️ 腾讯云

创建环境

云开发 CloudBase 新建一个应用,选择 空模板,根据自身需求填写信息。

new

创建成功后,获得 环境ID

env_id

获取 API 密钥

为部署新建一个密钥对。在 访问管理 -> 用户列表 -> 新建用户 -> 自定义创建 -> 可访问资源并接收消息🔗 传送门

根据自己的需要,新建用户名后选择 编程访问,点击下一步。

new_user

在自定义策略中勾选:

  • QcloudAccessForTCBRole:授予云开发(TCB)对云资源的访问权限;
  • QcloudAccessForTCBRoleInAccessCloudBaseRun:供云开发(TCB)服务角色(TCB_QcsRole)进行关联,用于 TCB 访问其他云服务资源。包含私有网络 VPC、云服务器 CVM 相关操作权限。

access

点一下一步后,新建用户成功。可以获得 SecretIdSecretKey

⚙️ Github Actions

设置 Github Secrets

在项目的 Settings -> Secrets -> Actions 中添加上述得到的 ENV_IDSECRET_IDSECRET_KEY(名称可以自定义)。

secret

添加 workflows

可以在仓库的 Actionsnew workflow,或者在项目中 .github/workflows 添加。

 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
name: Tencent CloudBase

on:
  push:
    branches:
      - main

jobs:
  hugo-publish:
    name: publish content to static website
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          submodules: true
          fetch-depth: 0

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

      - name: Build
        run: hugo --minify --gc

      # 使用云开发 Github Action 部署
      - name: Deploy to Tencent CloudBase
        uses: TencentCloudBase/cloudbase-action@v2
        with: 
          secretId: ${{ secrets.QCLOUD_SECRET_ID }}
          secretKey: ${{ secrets.QCLOUD_SECRET_KEY }}
          envId: ${{ secrets.QCLOUD_ENV_ID }}

🚧 提示:

这里使用了 TencentCloudBase/cloudbase-action@v2,需要在项目根目录添加 cloudbaserc.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
{
    "envId": "{{env.ENV_ID}}",  // 这里需要更改为你的 环境ID,或者在 .env 文件中配置
    "$schema": "https://framework-1258016615.tcloudbaseapp.com/schema/latest.json",
    "version": "2.0",
    "framework": {
        "name": "hugo-blog",
        "plugins": {
            "client": {
                "use": "@cloudbase/framework-plugin-website",
                "inputs": {
                    "outputPath": "public",
                    "ignore": [
                        ".git",
                        ".github",
                        "cloudbaserc.js"
                    ]
                }
            }
        }
    }
}

🚧 提示:

这里也可以选择 Tencent CloudBase Github Action V1。🙋‍♂️ (推荐)

V2 比 V1 有更多功能,比如拉取代码在腾讯云端编译,但目前没有 Hugo 模板。我们已经在 Github Actions 产出了静态文件,直接推送即可。所以目前对于 hugo 来说,没什么区别,使用甚至 V1 更快更简洁。

1
2
3
4
5
6
7
8
# 将上述 jobs 内替换为
- name: Deploy to Tencent CloudBase
  uses: TencentCloudBase/cloudbase-action@v1.1.1
  with: 
    secretId: ${{ secrets.QCLOUD_SECRET_ID }}
    secretKey: ${{ secrets.QCLOUD_SECRET_KEY }}
    envId: ${{ secrets.QCLOUD_ENV_ID }}
    staticSrcPath: public

🏝 使用 webify

使用 Web 应用托管(webify)主要是利用 Github Actions 生成 静态页面到另一个分支,再托管这个分支的内容。

☁️ 创建服务

Web 应用托管 -> 新建应用 新建一个简易静态页面模板。根据需求填写信息。选择纯静态页面。

webify

应用列表 -> 应用设置 中配置仓库信息,并根据自身情况选择静态文件的部署分支。(如果当前没有生成静态页面的分支,可完成后面操作后再进行此步骤)。

webify_info

⚙️ Github Actions

设置 Github Token

在用户的 Settings -> Developer settings -> Personal access tokens -> Generate new token 获取一个 Repo Token🔗 传送门

在项目的 Settings -> Secrets -> Actions 中添加上述得到的 Token

access_token

添加 workflows

 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
name: Tencent CloudBase

on:
  push:
    branches:
      - main

jobs:
  hugo-publish:
    name: publish content to static website
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          submodules: true
          fetch-depth: 0

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

      - name: Build
        run: hugo --minify --gc

      - name: Deploy to Branch
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.ACCESS_TOKEN }}
          keep_files: false
          publish_branch: gh-pages  # 更改为你想要生成的分支
          publich_dir: ./public
          commit_message: ${{ github.event.head_commit.message }}

⛓ 参考