借助强大的 Github Action
,我们能够轻松地实现博客的自动化构建与部署,让整个流程更加优雅高效。在这个过程中,我们选用了 Hugo
这一优秀的工具,它与 hexo 一样,都是出色的静态博客生成器。
考虑国内网络环境,我们选择了腾讯云COS
来部署博客,以提供更快速、稳定的访问体验。这个策略让博客的美感与技术有机融合,为读者呈现出精致的阅读空间。
准备工作:
- 到腾讯云–
访问管理
—用户列表
,新建一个账户
地址: https://console.cloud.tencent.com/cam
访问方式改为"编程访问”,用户权限添加"
QcloudCOSDataFullControl
、QcloudCDNFullAccess
"。完成之后将生成的 SecretId、SecretKey 复制保存。到 Github 新建一个仓库(私有公共都行),把自己 hugo 生成的站点源文件(不是 public 下文件)同步过去。
在刚创建的仓库——
Settings
——Secrets and variables
——Actions
,新建
SecretId
、SecretKey
、Bucket
、Region
四个密钥。其中 SecretId、SecretKey 为上面复制保存的,Bucket(存储桶名称)、 Region(所属地域 如:ap-guangzhou
)在 COS 中存储桶列表中获取。
自动构建
在博客仓库根目录下新建 .github/workflows
文件夹,新建一个 deploy.yml
(文件名随意),作用:借助 Github Action
实现自动部署
注意: 第5 38 40 行
第5行触发的分支是main还是master,
第38行改为你的用户名和仓库名,比如: 111/222
第40行是Github Pages 所在分支
最后两行是同步根目录还是public目录
完整脚本
name: Auto Deploy hugo
on:
push:
branches:
- main # 更新触发的分支
jobs:
build-deploy:
# runs-on: ubuntu-latest
runs-on: ubuntu-20.04
steps:
- name: Check out repository code
uses: actions/checkout@v3
with:
submodules: recursive # Fetch Hugo themes (true OR recursive)
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Setup hugo
uses: peaceiris/actions-hugo@v2
with:
# hugo-version: "latest" # 可以修改为你使用的 Hugo 版本
hugo-version: "0.113.0"
extended: true # 设置是否需要 extended 版本
- name: Cache resources # 缓存 resource 文件加快生成速度
uses: actions/cache@v3
with:
path: resources
# 检查照片文件变化
key: ${{ runner.os }}-hugocache-${{ hashFiles('content/**/*') }}
restore-keys: ${{ runner.os }}-hugocache-
- name: Build Hugo static files # 部署静态资源
run: hugo --gc --minify
- name: Deploy to Github Pages # 部署到Github Pages页面
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }} # 两个仓库请使用 deploy_key
external_repository: 111/222 # 如果在同一个仓库请注释
publish_dir: ./public # hugo 生成到 public 作为跟目录
publish_branch: main # Github Pages 所在分支
commit_message: ${{ github.event.head_commit.message }}
# 上传到腾讯COS存储桶
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.9
- name: Setup coscmd and sdk
run: sudo pip install coscmd
- name: Configure coscmd
env:
SECRET_ID: ${{ secrets.SecretId }}
SECRET_KEY: ${{ secrets.SecretKey }}
BUCKET: ${{ secrets.Bucket }}
REGION: ${{ secrets.Region }}
run: coscmd config -a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION
- name: Upload to COS
run: coscmd upload -rfs --delete ./ /
# run: coscmd upload -rfs --delete public/ /
其他代码
# 上传到腾讯COS存储桶
- name: Install coscmd
run: sudo pip install coscmd
- name: Configure coscmd
env:
COS_SECRET_ID: ${{ secrets.COS_SECRET_ID }}
COS_SECRET_KEY: ${{ secrets.COS_SECRET_KEY }}
COS_BUCKET_NAME: jpcos-1253486782 # Change for yourself
COS_BUCKET_REGION: ap-tokyo # Change for yourself
run: coscmd config -a $COS_SECRET_ID -s $COS_SECRET_KEY -b $COS_BUCKET_NAME -r $COS_BUCKET_REGION
- name: Deploy to COS Bucket
run: coscmd upload -rfs --delete ./ /
# run: coscmd upload -rfs --delete public/ /
同步到Backblaze B2
地址:https://www.backblaze.com/cloud-storage
10GB
免费存储空间。
Backblaze B2
每月免费 10G 存储及每天 1G 的流量,如果套壳 Cloudflare,流量个人使用等于不要钱。折腾的乐趣,就在于不停的折腾~
Backblaze B2 同步,B2_APPKEY_ID
B2_APPKEY
在Application Keys菜单下生成就行。要特别注意的是B2_BUCKET
写法,完整的写法是b2://xxx
,其中xxx
为存储桶名称。
# 同步到Backblaze B2
name: Sync B2 Bucket
on: push
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: jakejarvis/backblaze-b2-action@master
env:
SOURCE_DIR: './'
B2_BUCKET: ${{ secrets.B2_BUCKET }}
B2_APPKEY_ID: ${{ secrets.B2_APPKEY_ID }}
B2_APPKEY: ${{ secrets.B2_APPKEY }}
所需的环境变量
SOURCE_DIR
您想要同步/上传到 B2 的本地目录。例如,./public
B2_BUCKET
您要同步到的存储桶的名称。例如,my_files
B2_APPKEY_ID
您的 Backblaze 应用程序密钥 ID。在这里生成它。
B2_APPKEY
您的 Backblaze 应用程序密钥 — 又名“秘密”密钥。在这里生成它。