腾讯云静态网站托管 Hexo 自动化部署

status
category
date
summary
slug
icon
tags
password
最近阿里云的静态服务器即将过期,阿里云的登录方式需要支付宝扫码+短信验证,为了表示不满,想把这个博客迁移到腾讯云,过程中发现腾讯云提供了静态网页托管服务,尝试的过程中发现官方文档真的坑,在此记录踩坑过程。
我的使用场景是,私有仓库中有两个分支(两个仓库同理):
  • master:存放 Hexo 自动生成的博客文件,主要为 HTML
  • hexo:存放博客源代码
希望有的效果是,在 hexo 分支下撰写博客,通过 hexo g -d自动部署到 master 分支,然后通过 Github Action 将静态资源文件传输到腾讯云的服务器上。
参考文档:

Github Action

根据 官方cloudbase-action 的提示,为 Github 上的 Hexo 仓库设置好 EnvId、SecretId、SecretKey 之后,开始创建 Github Action,这里需要注意,云函数有两个版本,腾讯云和 Github 上两份官方文档都推荐使用最新版本。
配置中主要用到云开发 Github Action 扩展 TencentCloudBase/[email protected] 来部署静态文件,请检查该扩展是否为 最新版本,否则可能会在自动部署中出现错误。——腾讯云
如果你目前使用的是 Tencent CloudBase Github Action V1 版本,请参考 V1 README,推荐使用 V2 版本以获取更多功能。——Github

cloudbase-action@v1

如果使用旧版的 Github Action,广州的环境会报错Environment *** not foundGithub Issue 17Github Issue 23 中都提到了这个问题,开发者推荐使用 v2 版本。如果图省事,就新建一个上海的环境,然后按照文档进行部署,亲测可用,附上 Github Action 代码:

cloudbase-action@v2

注意:下面操作均在 master 分支上进行,我的 master 分支是直接生成的输出文件。首先是 Github Action:
v2 版本将文件路径等参数移出了 .yaml 文件,而是改用 json 文件进行配置。还要在项目根目录下添加cloudbaserc.json,即该配置文件与index.html同目录:

文件被覆盖的问题!!!

试用了几次才发现,上面提到的方式最终发现不可行,原因是 hexo generate deploy 时,会将生成的 public 文件夹全部强制覆盖 git 仓库中的 master 目录,导致目录中的 GitHub Action 文件以及cloudbaserc.json文件被删除。
解决方案:首先将 git 仓库的 default 分支修改为 hexo,因为 Github Action 只能加在默认主分支上。然后在 hexo 分支中添加 Action 和配置文件,即在 hexo 分支中的 markdown 资源修改并 push 之后,在远程触发钩子,自动执行 generate 和 deploy。我这样做的目的是为了避免每次将 public 文件上传到仓库。
要注意cloudbaserc.json文件中,输出目录的参数变化:
然后每次写完 markdown,直接 commit 然后 push 到远程,触发 Action 即可自动部署到腾讯云静态网站托管。
目前这个方案的缺点是:
  • GitHub Action 每次都需要经历 checkout、安装 npm 和 hexo、然后远程 hexo clean、generate,速度很慢。
  • 无法更新 Git 仓库,即仓库中原来存放 index.html 等资源的 master 分支,这是因为远程没有配置 Git 密钥
Loading...

© 刘口子 2018-2025